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
Это не самое красивое решение, но оно работает