Не допускайте «дублирования» тестового кода только потому, что параметр отличается - PullRequest
0 голосов
/ 21 мая 2018

В моем наборе тестов у меня есть разные тесты на интеграцию и стабильность.

Например,

@pytest.mark.integration
def test_integration_total_devices(settings, total_devices):
    assert total_devices == settings['integration']['nodes']['total']

@pytest.mark.stability
def test_stability_total_devices(settings, total_devices):
    assert total_devices == settings['stability']['nodes']['total']

Как вы можете заметить, это точно такой же код, просто читаядругой параметр из конфига.

Как я могу предотвратить эту ситуацию дублирования кода?Значения настроек различны, поэтому я не могу просто:

@pytest.mark.integration
@pytest.mark.stability
def test_integration_total_devices(settings, total_devices):
    assert total_devices == settings['nodes']['total']

Я забыл упомянуть (спасибо, что напомнил @dzejdzej), что кажется, что параметризация pytest не работает.Это работает, когда я хочу выполнить обе «метки», но цель метки - просто запустить тесты одного из них независимо, например, pytest -m integration.Однако, насколько я тестировал, всякий раз, когда я устанавливаю параметризацию, он запускает оба.

@pytest.mark.parametrize('type', (
    pytest.param('stability', marks=pytest.mark.stability),
    pytest.param('integration', marks=pytest.mark.integration),
))
@pytest.mark.integration
@pytest.mark.stability
def test_total_devices(settings, total_devices, type):
    assert total_devices == settings[type]['nodes']['total']

1 Ответ

0 голосов
/ 21 мая 2018

Пожалуйста, посмотрите на параметризацию pytest https://docs.pytest.org/en/latest/parametrize.html

Должно быть возможно сделать что-то вроде этого:

@pytest.mark.parametrize('area,total_devices', (
    pytest.param('stability', 10, marks=pytest.mark.stability),
    pytest.param('integration', 15, marks=pytest.mark.integration),
))
def test_integration_total_devices(area, total_devices):
    assert total_devices == settings.get(area)['nodes']['total']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...