pytest, есть ли способ включить тестовый файл или список тестовых файлов? - PullRequest
0 голосов
/ 24 марта 2019

Я ищу советы по передовому опыту в следующем контексте:

  • Я использую pytest для запуска интеграционных тестов в моем развертывании IAC
  • Моя база кода IAC структурирована как:
  myapp
      |
      |_roles
      |    |_role1
      |    |_role2
      |_resources
           |_tomcat
           |_java

Я хотел бы использовать такую ​​же структуру для моих тестовых файлов. В настоящее время тесты разделены по ролям соответствия файлов (role1, role2):

  tests
      |
      |_roles
           |_test_role1.py
           |_test_role2.py

, что приводит к дублированию кода, например:

  • role1 - базовое приложение tomcat,

  • role2 содержит чистый код Java,

Так что в обоих тестовых файлах (test_role1.py и test_role2.py) будет функция тестирования java.

Если бы я мог добавить структуру dir как:

  tests
      |
      |_roles
      |    |_test_role1.py
      |    |_test_role2.py
      |
      |_resources
           |_test_tomcat.py
           |_test_java.py

Тогда я мог бы просто "включить / импортировать" функции test_java.py, чтобы использовать их в test_role1.py и test_role2.py без дублирования кода ...

Какой лучший способ добиться этого?

Я уже использую фикстуры (определенные в conftest.py), и я чувствую, что решение для моего дублированного кода - это что-то вроде модулей фикстур или тестовых модулей, но мои слабые знания Python / pytest держат меня в стороне от реального решения.

Спасибо

1 Ответ

0 голосов
/ 03 мая 2019

Если вы не против запустить свои тесты в виде модуля, вы можете превратить ваши файлы Python в пакеты, поместив файл с именем ' init .py' в корень проекта, в каталог. с кодом для тестирования и в каталоге с кодом тестирования.

Затем вы можете выполнить относительный импорт для доступа к нужным вам функциям: например, чтобы получить доступ к "_test_java.py" из "_test_role2.py"

from ../_roles  import _test_java

Одна точка представляет текущий каталог. Две точки представляют родительский каталог.

Вам нужно будет использовать флаг -m при вызове кода, чтобы Python понимал, что вы запускаете модуль с относительным импортом.

В вашем случае вы можете рассмотреть возможность выполнения грязного относительного импорта в conftest.py

Этот пост объясняет вышесказанное более подробно: http://blog.habnab.it/blog/2013/07/21/python-packages-and-you/

...