Использование файлов ресурсов в тестах python (pytest) - PullRequest
3 голосов
/ 05 февраля 2020

Может кто-нибудь сказать мне, как правильно обращаться с файлами ресурсов в pytest?

У меня есть привычка создавать каталог ресурсов прямо под каталогом пакета (sr c), а другой - под тестом. ответвление

root---package---resource_dir
     |         |-file1.py
     |         |-file2.py
     |
     |-test-- resource_dir-
            |              |-config1.csv
            |              |-config2.csv
            |-test1.py
            |-test2.py

Если я хочу получить доступ к этим файлам из своих тестов, как это сделать pythoni c? До сих пор я использовал относительные пути к файлам, но это решение не очень хорошее. Есть ли решение, подобное решению для ресурсов Java?

Ответы [ 2 ]

0 голосов
/ 05 февраля 2020

Я бы добавил папку root и test / resource_dir в sys.path. Это позволит вам всегда включать ресурсы одинаково, независимо от того, как выглядит структура каталога вашей тестовой папки.

Добавление папки root в sys.path также помогает создать согласованность между тестами. выполнение и обычное выполнение, и позволит вашим тестам напрямую ссылаться на ресурсы из root/package/resource_directory.

Добавление test/resource_dir в sys.path позволяет тестам напрямую ссылаться на ресурсы из test/resource_dir.

Пример кода о том, как это настроить, см. В варианте B для этот ответ , но с заменой папки lib на resource_dir.

0 голосов
/ 05 февраля 2020

Один из способов сделать это - использовать pkg_resources. Это позволяет искать файлы в вашем пакете. Так, например, если вы хотите распечатать содержимое файла, который находится в каталоге ресурсов тестирования, вы можете сделать следующее:

import pkg_resources
config_file = open(pkg_resources.resource_filename('test.resources','config.csv'),'r')
    for line in config_file:
        print(line)

    print(">>>End of File")

обратите внимание, что все каталоги и подкаталоги должны быть pacakges (т.е. файл init .py должен присутствовать, даже если он пуст).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...