Есть ли способ выбрать pytest
тесты для запуска из файла? Например, файл, foo.txt
содержащий список тестов, которые нужно выполнить:
tests_directory/foo.py::test_001
tests_directory/bar.py::test_some_other_test
Или есть ли способ выбрать несколько тестов, не имеющих общего шаблона в имени теста, из разных каталогов с pytest?
pytest -k <pattern>
позволяет один шаблон.
Один из вариантов - иметь pytest.mark
против каждого теста, но мое требование - запускать разные комбинации тестов из разных файлов.
Есть ли способ указать несколько шаблонов и имя тестового файла для каждого шаблона?
Или
Есть ли способ указать точные тестовые пути в файле и передать этот файл в качестве входных данных pytest
?
Или
Есть ли функция ловушки, которая может быть использована для этой цели?
py.test path/to/test/file.py -k function_name_test
Определение тестов / выбор тестов
Pytest поддерживает несколько способов запуска и выбора тестов из командной строки.
Запустите тесты в модуле
pytest test_mod.py
Запустите тесты в каталоге
pytest testing/
Запускать тесты по выражениям ключевых слов
pytest -k "MyClass and not method"
Это запустит тесты, которые содержат имена, соответствующие данному строковому выражению, которые могут включать в себя операторы Python, которые используют имена файлов, имена классов и имена функций в качестве переменных. Пример выше будет работать,
TestMyClass.test_something
но нетTestMyClass.test_method_simple
.Запускать тесты по идентификаторам узлов
Каждому собранному тесту присваивается уникальный,
nodeid
состоящий из имени файла модуля, за которым следуют такие спецификаторы, как имена классов, имена функций и параметры из параметризации, разделенные::
символами.Чтобы запустить определенный тест в модуле:
pytest test_mod.py::test_func
Другой пример, указывающий метод теста в командной строке:
pytest test_mod.py::TestClass::test_method
Выполнять тесты по выражениям маркера
pytest -m slow
Запустят все тесты, которые украшены
@pytest.mark.slow
декоратором.Для получения дополнительной информации см. Марки .
Запускать тесты из пакетов
pytest --pyargs pkg.testing
Это будет импортировать
pkg.testing
и использовать ее расположение в файловой системе для поиска и запуска тестов.Источник: https://docs.pytest.org/en/latest/usage.html#specifying-tests-selecting-tests
источник
Если у вас одинаковое имя метода в двух разных классах, и вы просто хотите запустить один из них, это работает:
источник
Метод 1 : случайно выбранные тесты. Долго и некрасиво.
Способ 2: Используйте выражения ключевых слов.
Примечание: я ищу по именам тестов. То же самое применимо к именам TestClass.
Случай 1: ниже будет работать в зависимости от того, что найдено. Так как мы использовали «ИЛИ».
Допустим, два приведенных выше факта верны, будут проведены 2 теста.
Случай 2: теперь неверное имя и другое правильное имя.
Только один найден и запущен.
Случай 3 : если вы хотите, чтобы все тесты запускались или никого не было, используйте AND
Оба будут запущены, если правильно или нет.
Случай 4: запускать тестирование только в одной папке:
Случай 5: запустить тестирование только из одного файла.
Случай 6: Запустите все тесты, кроме матча.
источник
Мой ответ предоставляет способы запуска поднабора тестов в различных сценариях.
Запустите все тесты в проекте
Запускать тесты в одном каталоге
Чтобы запустить все тесты из одного каталога, используйте каталог в качестве параметра для
pytest
:Запускать тесты в одном тестовом файле / модуле
Чтобы запустить файл, полный тестов, перечислите файл с относительным путем в качестве параметра для
pytest
:Запустите одну функцию тестирования
Чтобы запустить одну тестовую функцию, добавьте
::
и имя тестовой функции:-v
используется, чтобы вы могли увидеть, какая функция была запущена.Запустите один тестовый класс
Чтобы запустить только класс, сделайте то же самое, что мы сделали с функциями и добавьте
::
, затем имя класса в параметре файла:Выполнить один метод тестирования класса теста
Если вы не хотите запускать весь тестовый класс, только один метод, просто добавьте другой
::
и имя метода:Запустите набор тестов на основе имени теста
Этот
-k
параметр позволяет передать выражение для запуска тестов с определенными именами, указанными в выражении в качестве подстроки имени теста. Можно использовать и , или , и не создавать сложные выражения.Например, чтобы запустить все функции, в имени которых есть _raises:
источник
Согласно документу о выполнении тестов по идентификаторам узлов
так как у вас есть все идентификаторы узлов в foo.txt, просто запустите
это то же самое с командой ниже (с содержанием файла в вопросе)
источник
Возможно, используя
pytest_collect_file()
hook, вы можете проанализировать содержимое файла.txt
o, в.yaml
котором тесты указаны как вам нужно, и вернуть их ядру pytest.Хороший пример показан в документации по Pytest . Я думаю, что вы ищете.
источник
Вот возможный частичный ответ, потому что он позволяет выбирать только тестовые сценарии, а не отдельные тесты в этих сценариях.
И это также ограничено тем, что я использую устаревший режим совместимости со
unittest
скриптами, поэтому не гарантирую, что он будет работать с собственным pytest.Поехали:
subset_tests_directory
.ln -s tests_directory/foo.py
ln -s tests_directory/bar.py
будьте осторожны с импортом, который подразумевает, что файлы находятся в
test_directory
. Мне пришлось исправить некоторые из них, запустив ихpython foo.py
изнутриsubset_tests_directory
и исправив по мере необходимости.Как только тестовые сценарии выполняются правильно, как раз
cd subset_tests_directory
иpytest
там. Pytest будет подбирать только те скрипты, которые видит.Другая возможность - символическая ссылка в вашем текущем тестовом каталоге, скажем как
ln -s foo.py subset_foo.py
тогдаpytest subset*.py
. Это позволит избежать необходимости корректировать импорт, но будет мешать, пока вы не удалите символические ссылки. У меня тоже сработало.источник