pytest — как выполнить функцию после определенных тестов

У меня есть несколько тестов, организованных в нескольких классах. У меня уже есть тестовое приспособление с областью видимости = класс, чтобы оно запускалось перед набором (классом) тестов. Однако мне нужно выполнить функцию после некоторых конкретных тестов. Допустим, у меня есть 100 тестов в классе, у меня уже есть фикстура, которая будет выполнять функцию перед этими тестами, но я также хочу запустить функцию после 2-3 таких тестов.

Каков наилучший подход для достижения этого? Можно ли это сделать с помощью светильников или чего-то еще?

3 ответа

Во-первых, напишите фикстуру, которая будет выполняться после завершения теста:

      @pytest.fixture
def foo():
    yield
    print("do stuff after test")

Документы: Завершение исправления / выполнение кода демонтажа

Теперь отметьте каждый тест, который должен вызывать это приспособление, с помощью usefixtures("foo"):

      @pytest.mark.usefixtures("foo")
def test_spam():
    ...

Документы: Используйте фикстуры в классах и модулях с usefixtures

Если вы используете встроенный модуль unittest Python, вы можете переопределить tearDownметод для запуска чего-либо после каждого теста в классе.

Если вы используете структуру pytest и используете фикстуры pytests, вы можете использовать yieldключевое слово в ваших светильниках.

Это задокументировано в https://doc.pytest.org/en/latest/fixture.html#teardown-cleanup-aka-fixture-finalization .

Если вы знаете конкретные тесты, которые вы хотите запустить после того, как вы можете настроить тесты в файле .csv с разными значениями для каждого теста, например (индекс) (столбец) (столбец) Тесты Тест # завершен? тест 1 1 T тест 2 2 F

      import pandas as pd 
#makes panda read your file and sets the variable as the data in the file
data = pd.read_csv("filename.csv") 
#Gets the value from the column 'test#' and 'complete' and sets as a variable
Var1 = DataFrame.get_value("the number test you want to take", 'Complete?')
If Var1 = T 
   #Run the rest of your program here
#Then you can just repeat this for the other tests you want to check for 

Это не самое красивое решение, но оно работает

      
Другие вопросы по тегам