Как пропустить тест в pytest на основе параметра / фиксации командной строки - PullRequest
1 голос
/ 04 июня 2019

У меня есть набор pytest, содержащий несколько файлов, которые тестируют веб-сервисы.Тесты можно запускать для разных типов, называть их типом A и типом B, и пользователь может указать, для какого типа тесты следует запускать.Хотя большинство тестов применимо для типов A и B, некоторые не применимы для типа B. Мне нужно иметь возможность пропустить некоторые тесты, когда pytest запускается с флагом --type = B.

Вот мойФайл conftest.py, в котором я устанавливаю прибор на основе типа

import pytest

#Enable type argument
def pytest_addoption(parser):
    parser.addoption("--type", action="store", default="A", help = "Specify a content type, allowed values: A, B")

@pytest.fixture(scope="session", autouse=True)
def type(request):
    if request.node.get_closest_marker('skipb') and request.config.getoption('--type') == 'B': 
        pytest.skip('This test is not valid for type B so it was skipped')
        print("Is type B")
    return request.config.getoption("--type")

Затем, прежде чем пропустить тестовую функцию, я добавляю маркер следующим образом:

class TestService1(object):

    @pytest.mark.skipb()
    def test_status(self, getResponse):
        assert_that(getResponse.ok, "HTTP Request OK").is_true()
        printResponse(getResponse)

class TestService2(object):

    @pytest.mark.skipb()
    def test_status(self, getResponse):
        assert_that(getResponse.ok, "HTTP Request OK").is_true()
        printResponse(getResponse)

Я могузапустить pytest и не получить никаких ошибок интерпретатора, однако это не пропускает мой тест.Вот команда, которую я использую для запуска теста:

pytest -s --type=B

Обновление: мне нужно уточнить, что мои тесты распределены по нескольким классам.Обновлен мой пример кода, чтобы сделать это более понятным.

...