Allure + pytest: настройки pytest.ini или pyproject.toml. Как можно использовать переменные окружения(не присваивать, а именно использовать) ?

Проблема:
В настройках pytest.ini или pyproject.toml необходимо установить дефолтный путь для генерации отчетов allure (пусть будет корень проекта):


# .\pytest.ini
[pytest]
addopts  =  --alluredir  $VIRTUAL_ENV//..//report

# или

# .\pyproject.toml
[tool.pytest.ini_options]
addopts = ["--alluredir", "$VIRTUAL_ENV//..//report"]

Из командной строки выражение работает на ура
Но при записи в …ini или …toml просто пропускает $VIRTUAL_ENV и создает папку report в любой активной дерриктории командной строки или runner`а pycharm. Я же хочу всегда складывать все в одно и тоже место:))
I need help…Друзья!! Каким образом указать путь [addopts = ] в найстройках, пробовал всё что только можно, различные комбинации кавычек слешей, способов указания переменной среды $%…искал на форуме и везде где только можно) Либо каким образом можно управлять этими настройками в конфигах allure либо из кода?

Добрий день ось вам взагалі приклад pytest.ini
конкретно ваше питання alluredir ключ

[pytest]

minversion = 7.4.0

filterwarnings =
    ignore::pytest.PytestWarning
    ignore:.*U.*mode is deprecated:DeprecationWarning

python_files = test_*.py *_test.py *_tests.py *_suite.py
python_classes = Test* *Test* *Test *Tests *Suite
python_functions = test_*

addopts =
;    --reruns 2
;    --reruns-delay 1
    -p no:cacheprovider
    --showlocals
    --alluredir ./allure-results


log_cli = true
log_cli_level = CRITICAL
console_output_style = count

log_cli_format = %(asctime)s %(levelname)s %(name)s %(message)s


log_cli_date_format = %Y-%m-%d %H:%M:%S
1 лайк

Спасибо! Взял кое-что в свой проект, но у меня вопрос был немного не о том…сейчас напишу решение…

@pytest.hookimpl(tryfirst=True)
def pytest_configure(config):
    alluredir = getattr(config.option, "allure_report_dir", None)
    if not alluredir:
        setattr(config.option, "allure_report_dir", "any")

Немного предыстории к решению: парсил .ini менял значения, круто но долго, и работает только на следующий запуск сессии. Написал плагин, с той же функцией, тоже не срабатывает на момент запуска, пробовал различные варианты, но 5 строк кода от ребят со стековерфлоу решили мою проблему.

  1. @pytest.hookimpl(tryfirst=True) - всегда первый
  2. getattr и setattr(config.option,…,…) - в отличие от pytestconfig редактируемый.
  3. any - сюда можно вставить любой генерируемый путь на все вкусы и цветы
  4. соответственно из pytest.ini --alluredir убираем
  5. И получаем динамически меняющуюся папку для наших отчетов
  6. Ссори, если плохо изъясняюсь :wink: