У меня много тестов, на выполнение которых уходит много времени. К счастью, время, затрачиваемое на эти тесты, равномерно распределяется между тестами для нескольких подсистем моего проекта.
Я использую волшебные команды pytest от IPython. Я бы хотел просто сказать такие вещи, как
pytest potato_peeler --donttesti18n --runstresstests
или же
pytest garlic_squeezer --donttestsmell --logperfdata
но я не могу добавить параметры garlic_squeezer
и potato_peeler
так же, как logperfdata
и др., потому что parser.addoption
расстраивается, если имя опции не начинается с --
.
Я знаю, что это кажется крошечным неудобством, но у меня множество людей запускают эти тесты по несколько раз в день, и я хотел бы, чтобы их вызов имел как можно больше смысла, имитируя то, как вы запускаете команды на командная строка (команда, объект, на котором вы хотите запустить команду, затем --flags.)
Есть ли способ использовать варианты без пунктира? (это не требует написания полноценного плагина pytest, который отменяет синтаксический анализ параметров?)
Я надеялся использовать ловушку pytest_commandline_parse
, но вы не можете использовать этот крючок в conftest.py
, вам нужно написать полноценный плагин.
Вы можете отмечать свои тесты и запускать только те, которые отмечены какой-либо отметкой.
Например:
import pytest
@pytest.mark.runstresstests
def test_stress_something():
pass
@pytest.mark.logperfdata
def test_something_quick():
pass
...
Если вы хотите запускать только стресс-тесты: pytest -m runstresstests
Полная документация на https://docs.pytest.org/en/latest/example/markers.html
Извините, но я не знаю. В чем проблема с тире? Я думал только о чем-то, что «не требует написания полноценного плагина pytest, который отменяет синтаксический анализ параметров». Это то, что уже реализовано в pytest.
Рывок - это всего лишь немного ненужного трения. Это похоже на то, как ipython дает вам возможность вызывать функции без скобок после них; необходимость ввести один лишний символ, который на самом деле ничего не означает, приводит к значительному разочарованию (и ошибкам), если это связано с чем-то, что вы должны делать все время. В любом случае спасибо за попытку. :П
Но тогда я должен сделать -m! Была надежда, что вообще не придется ставить перед ним черту ...