Я использую pytest для тестирования моделей Python для встраиваемых систем. Тестируемые функции зависят от платформы. (Я использую «платформу» в этом контексте для обозначения типа встроенной системы, а не типа ОС).
Самый простой способ организовать мои тесты — распределить их по каталогам в зависимости от типа платформы.
/platform1
/platform2
/etc.
pytest /platform1
Это быстро стало трудно поддерживать, так как многие функции перекрываются на разных платформах.С тех пор я переместил свои тесты в один каталог, при этом тесты для каждой функциональной области были назначены одному имени файла (например, test_functionalityA.py). Затем я использую маркеры pytest, чтобы указать, какие тесты в файле применимы к данной платформе.
@pytest.mark.all_platforms
def test_some_functionalityA1():
...
@pytest.mark.platform1
@pytest.mark.platform2
def test_some_functionlityA2():
...
Хотя мне бы хотелосьзаставить 'conftest' автоматически определять тип платформы и запускать только соответствующие тесты, я смирился с тем, что определяю, какие тесты запускать в командной строке.
pytest -m "(platform1 или all_platforms)"
Вопрос: (наконец-то!)
Есть ли способ упростить ситуацию и заставить pytest запускать все непомеченные тесты по умолчанию и, кроме того, все тесты, пройденные через '- m' в командной строке?
Например: pytest -m "platform1"
будет запускать тесты с пометкой @pytest.mark.platform1, а также все тесты с пометкой @pytest.mark.all_platforms или даже все тесты без @pytest.mark вообще?
Учитывая большое количество общих функций, возможность удалить строку @pytest.mark.all_platforms была бы большим подспорьем.