Пропуск тестов, если не указан параметр командной строки -m - PullRequest
1 голос
/ 27 января 2020

У меня есть мой тест:

import pytest


def test_normal():
    print("normal test runned")
    assert 1 == 1


@pytest.mark.production
def test_production():
    print("production test runned")
    assert 1 == 1

У меня есть свой conftest.py:

def pytest_addoption(parser):
    try:
        parser.addoption('--production', action='store_true', dest="production", default=False, help="enable production tests")
    except ValueError:
        print('option already set')


def pytest_configure(config):
    if not config.option.production:
        setattr(config.option, 'markexpr', 'not production')

Если я бегу:

pytest some_test.py -v -s

Запускается только test_normal.

Если я запускаю:

pytest some_test.py -v -s --production 

Оба теста выполняются.

Как мне сделать так, чтобы эта команда выполняла оба теста:

pytest some_test.py -v -s -m 'production'

Ответы [ 2 ]

0 голосов
/ 29 января 2020

Для этого вам не нужно никаких противоречий. Вы можете сделать это из командной строки напрямую. Для запуска только производственных тестов:

pytest some_test.py -v -s -m 'production'

Для запуска только непроизводственных тестов: pytest some_test.py -v -s -m 'not production'

Для запуска обоих: pytest some_test.py -v -s или pytest some_test.py -v -s -m 'production or not production'

Аналогичным образом вы можете использовать комбинацию and, or и not в маркере для запуска любой комбинации тестов.

0 голосов
/ 27 января 2020

Документы Pytest утверждают, что вы можете использовать только @pytest.mark для достижения желаемого: @pytest.mark.production и выполнить pytest -m production.

Для использования --m с вашим подходом:

def pytest_addoption(parser):
    try:
        parser.addoption('--m', action='store', help="enable production tests")
    except ValueError:
        print('option already set')


def pytest_configure(config):
    if config.option.m != "production":
        setattr(config.option, 'markexpr', 'not production')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...