除非存在命令行-m参数,否则跳过测试

时间:2020-01-27 11:20:47

标签: python pytest

我有考试:

3

我有我的conftest.py:

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

如果我跑步:

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')

仅test_normal运行。

如果我跑步:

pytest some_test.py -v -s

两个测试都运行。

我如何做到这一点,以便此命令可以运行两个测试:

pytest some_test.py -v -s --production 

2 个答案:

答案 0 :(得分:0)

Pytest docs指出您可以单独使用@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')

答案 1 :(得分:0)

您不需要任何争执。您可以直接从命令行执行此操作。 要仅运行生产测试:

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

仅运行非生产测试: pytest some_test.py -v -s -m 'not production'

要同时运行两个: pytest some_test.py -v -spytest some_test.py -v -s -m 'production or not production'

类似地,您可以在标记中使用andornot的组合来运行任何测试组合。