Я ищу способ запуска python -m unittest discover, который обнаружит тесты, скажем, в каталогах A, B и C. Однако в каталогах A, B и C есть каталоги с именем dependencies внутри каждого из них. , в котором также есть несколько тестов, которые, однако, я не хочу запускать.

Есть ли способ запустить мои тесты, удовлетворяющие этим ограничениям, без создания для этого сценария?

9
lucasnadalutti 7 Сен 2016 в 00:56

2 ответа

Я столкнулся с той же проблемой и в конце концов смог найти эти удобные аргументы для передачи в unittest, обнаружив, что решила мою проблему.

Это описано здесь: https://docs.python.org/2 /library/unittest.html#test-discovery

-s, --start-directory directory
Directory to start discovery (. default)

-p, --pattern pattern
Pattern to match test files (test*.py default)

Поэтому я изменил свою команду так:

python -m unittest discover -s test

Поскольку все тесты, которые я действительно хочу запустить, находятся в одном модуле, test. Вы также можете использовать -p для теоретического соответствия регулярному выражению, которое попадает только в ваши тесты, игнорируя все остальное, что может найти.

3
Stefan Theard 6 Окт 2017 в 21:33

Казалось бы, что python -m unittest спускается в каталоги модулей, но не в другие каталоги.

Он быстро попробовал следующую структуру

temp
  + a
  - test_1.py
  + dependencies
    - test_a.py

С результатом

>python -m unittest discover -s temp\a
test_1
.
----------------------------------------------------------------------
Ran 1 test in 0.002s

OK

Однако, если каталог является каталогом модуля (содержащим файл __init__.py), ситуация иная.

temp
+ a
  - __init__.py
  - test_1.py
  + dependencies
    - __init__.py
    - test_a.py

Вот результат

>python -m unittest discover -s temp\a
test_a
.test_1
.
----------------------------------------------------------------------
Ran 2 tests in 0.009s

OK

Теперь полезность этого ответа для вас зависит от того, допустимо ли, чтобы ваша папка dependencies не была каталогом модуля.

РЕДАКТИРОВАТЬ: увидев ваш комментарий

Будет ли вариант использовать pytest? У этого средства выполнения тестов есть много аргументов команды, один специально для исключения тестов.

См. Раздел Изменение стандартного (Python) обнаружения тестов

Со своего сайта

Игнорировать пути во время сбора тестов

Вы можете легко игнорировать определенные тестовые каталоги и модули во время сбора, передав параметр --ignore=path в cli. pytest позволяет использовать несколько параметров --ignore

0
M. Wymann 7 Сен 2016 в 16:39