pytest получить путь к файлу текущего тестового файла - PullRequest
0 голосов
/ 30 апреля 2019

Я не могу получить путь к текущему файлу, тестируемому в pytest.

Например, рассмотрим что-то вроде следующей структуры каталогов:

devops_scripts
├── devops_utilities
│   ├── backupMonthly.py
│   ├── generateAnsibleINI.py
│   └── tests
│       └── test_backup.txt
├── monitoring
│   ├── analyizeCatalinaLog.py
│   ├── fetchCatalinaLogs.py
│   └── getaccountcredit.py
├── pi_provisioning
│   ├── piImageMake.sh
│   ├── piImageRead.sh
│   └── piImageSquashSd.py
└── script_utilities
    ├── README.md
    ├── __init__.py
    ├── execute.py
    ├── path_handling.py
    ├── sql_handling.py
    └── tests
        ├── sourcedirfortests
        │   ├── file1.txt
        │   └── file2.txt
        ├── test_ansible.txt
        └── test_execute.txt

Если я запускаюpytest с верхнего уровня опустится до тестирования test_execute.txt.Когда тестируется test_execute.txt, как мне получить путь к файлу?(Я могу получить от rootdir до os.path.abspath('.'), но это не то, что мне нужно)

(мне нужно иметь возможность установить эти пути для проверки некоторых вещей выполнения на file1.txt и file2.txt. Мне также нужно, чтобы это работало независимо от того, насколько глубоко вложены различные вещи, которые я пытаюсь протестировать.) Меня не очень интересует настройка определенных каталогов временного тестирования, их удаление и т. Д. Мне просто нужен путь к файлукоторый проверяется.

Я пробовал такие вещи, как:

>>> print os.path.abspath(__file__)

Но это просто дает: UNEXPECTED EXCEPTION: NameError("name '__file__' is not defined",)

Я не выше, даже доступ к некоторым внутренним функциям /объекты в py.test

(я должен добавить, что мне это нужно для работы в Python 2.7 и Python 3.x)

1 Ответ

1 голос
/ 01 мая 2019

Pytest устанавливает PYTEST_CURRENT_TEST env var для текущего текущего теста.Он не только содержит информацию о текущем файле, но и информацию о текущем собранном идентификаторе теста (например, имя теста, параметры и т. Д.).

import os
def test_current():
    print(os.getenv('PYTEST_CURRENT_TEST'))

Вы должны использовать флаг -s для запуска Pytest, если хотите увидеть напечатанный текст.

С Справочный документ :

Во время тестового сеанса pytest установит PYTEST_CURRENT_TEST в качестве текущего идентификатора тестового узла и текущего этапа, который может быть настроен, вызван и отключен.

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