2017-11-29 6 views
2

몇 가지 단위 테스트가 있지만 테스트를 호출 할 때 옵션을 선언하지 않으면 특정 단위 테스트에 태그를 지정하여 건너 뛸 수있는 방법을 찾고 있습니다.Pytest - 옵션/플래그를 선언하지 않으면 테스트를 건너 뛰는 방법?

예 : pytest test_reports.py으로 전화하면 특정 단위 테스트를 실행하지 않기를 원합니다.

그러나 pytest -<something> test_reports으로 전화를 걸면 모든 테스트를 실행하고 싶습니다.

나는 @pytest.mark.skipif(condition) 태그를 들여다 보았지만 제대로 이해할 수 없었기 때문에 올바른 길을 가고 있는지 확실하지 않았습니다. 여기에있는 모든 지침은 훌륭합니다!

답변

0

당신이 찾고있는 것이 sys.argv이라고 생각합니다. 그에 대한 세부 사항은 여기에서 찾을 수 있습니다 :

첫 번째 방법으로 기능을 태그하는 것입니다 http://www.pythonforbeginners.com/system/python-sys-argv이 그것을 How do I run Python script using arguments in windows command line

+0

더 나은 예를 sys.argv' https : //로 유래 .com/questions/14155669/call-python-script-from -bash-with-argument – theBrainyGeek

2

그렇게하는 방법은 두 가지가 있습니다 할 또 다른 쉽게 (하지만 틀림없이 지루한) 방법이있다

@pytest.mark 데코레이터를 사용하고 -m 옵션을 사용하여 태그가 지정된 기능 만 실행하거나 건너 뜁니다.

@pytest.mark.anytag 
def test_calc_add(): 
    assert True 

@pytest.mark.anytag 
def test_calc_multiply(): 
    assert True 

def test_calc_divide(): 
    assert True 

py.test -m anytag test_script.py 처음 두 기능 만 실행으로 스크립트를 실행합니다.

다른 방법으로 py.test -m "not anytag" test_script.py을 실행하면 세 번째 기능 만 실행되고 처음 두 기능은 건너 뜁니다.

여기서 'anytag'는 태그의 이름입니다. 그것은 무엇이든 될 수 있습니다.

두 번째 방법은 -k 옵션을 사용하여 이름에 공통 부분 문자열이있는 함수를 실행하는 것입니다.

def test_calc_add(): 
    assert True 

def test_calc_multiply(): 
    assert True 

def test_divide(): 
    assert True 

마지막을 기능을 실행하고 건너 뜁니다 py.test -k calc test_script.py로 스크립트를 실행합니다.

'calc'는 함수 이름과 'calc'라는 이름에 'calc'가있는 다른 모든 함수에 나타나는 일반적인 하위 문자열입니다. 'calculate'도 실행됩니다.

0

우리는 conftest.py

테스트 케이스에 addoption와 마커를 사용하고 있습니다 :

@pytest.mark.no_cmd 
def test_skip_if_no_command_line(): 
    assert True 

conftest합니다.평 : 기능에 기능에

def pytest_addoption(parser): 
    parser.addoption("--no_cmd", action="store_true", 
        help="run the tests only in case of that command line (marked with marker @no_cmd)") 

def pytest_runtest_setup(item): 
    if 'no_cmd' in item.keywords and not item.config.getoption("--no_cmd"): 
     pytest.skip("need --no_cmd option to run this test") 

pytest 전화 :

py.test test_the_marker 
    -> test will be skipped 

    py.test test_the_marker --no_cmd 
    -> test will run 
`의