I Triy pominięcie określonych testów zależnych od wartości argumentów wiersza poleceń. Próbuję uzyskać wartości argumentów z pytest.config.getoption("--some-custom-argument") jak opisano w tym Powiązane pytanie sugestia w plikach testowych i sprawdź Wartości argumentów przez skipif. Ale pyest nie ma config. I uzyskanie wartości argumentów przez request.config.getoption("--some-custom-argument") wydaje się działać tylko w funkcjach urządzenia. Czy mogę dostać argumenty wiersza poleceń przed testem wykonania w jakiś sposób inny, że mogę je sprawdzić w skipif na poziomie zakresu plików?

1
thinwybk 4 czerwiec 2018, 16:08

3 odpowiedzi

Najlepsza odpowiedź

Ponieważ testy są zbierane po etapie konfiguracji i przed kolekcją testową (tj. Również przed wykonaniem testu), dostępny jest pytest.config modułami modułów Przykład:

# conftest.py
def pytest_addoption(parser):
    parser.addoption('--spam', action='store')

# test_spam.py
import pytest


print(pytest.config.getoption('--spam'))


@pytest.mark.skipif(pytest.config.getoption('--spam') == 'eggs', 
                    reason='spam == eggs')
def test_spam():
    assert True

Działa z --spam=eggs daje:

$ pytest -vs -rs --spam=eggs
============================== test session starts ================================
platform linux -- Python 3.6.5, pytest-3.4.1, py-1.5.3, pluggy-0.6.0 -- /data/gentoo64/usr/bin/python3.6
cachedir: .pytest_cache
rootdir: /data/gentoo64/home/u0_a82/projects/stackoverflow/so-50681407, inifile:
plugins: mock-1.6.3, cov-2.5.1, flaky-3.4.0
collecting 0 items                                                                                                     
eggs
collected 1 item

test_spam.py::test_spam SKIPPED
============================ short test summary info ==============================
SKIP [1] test_spam.py:7: spam == eggs

=========================== 1 skipped in 0.03 seconds =============================
1
hoefling 4 czerwiec 2018, 17:53

Możesz spróbować ci to robić

@pytest.mark.skipif(pytest.config.option.some-custom-argument=='foo', 
                    reason='i do not want to run this test')

Ale dlaczego nie używać wyrażeń?

0
Julia Aleksandrova 4 czerwiec 2018, 17:12

Jeśli rozumiem pytanie, możesz chcieć spojrzeć na to Odpowiedź.

Sugeruje, aby użyć urządzenia z obiektem {x0}} i odczytywanie wartości argumentu wejścia stamtąd request.config.getoption("--option_name") lub request.config.option.name.

Fragment kodu (Kredyt idzie do Ipetrik):

# test.py
def test_name(name):
    assert name == 'almond'


# conftest.py
def pytest_addoption(parser):
    parser.addoption("--name", action="store")

@pytest.fixture(scope='session')
def name(request):
    name_value = request.config.option.name
    if name_value is None:
        pytest.skip()
    return name_value
0
Sergey Makhonin 13 maj 2019, 15:22