2013-03-28 5 views
5

py.test를 사용하여 기능 테스트 프레임 워크를 작성하므로 정확한 테스트를 실행할 수 있도록 지정해야합니다. 나는 동적 테스트 콜렉션의 장점을 이해하지만, 먼저 테스트 환경 건강 검사를 실행하고 난 후 내 회귀 테스트를 실행할 수 있기를 원합니다. 분류가 다른 목적으로 사용되는 이러한 세트의 테스트를 배제하지 않는다는 것을 의미합니다.py.test로 테스트 스위트 (임의의 테스트 컬렉션) 실행

테스트 스위트는 Jenkins 빌드 프로젝트와 연결됩니다. osx, python 2.7.3, py.test 2.3.4를 사용하고 있습니다. 나는이 제품군에 대한 명령 줄에서 다음 실행하면

# suite_regression.py 
import unittest, pytest 
import functionaltests.sample_unittest as sample_unittest 

# set up the imported tests 
suite_sample_unittest = sample_unittest.suite() 

# create this test suite 
suite = unittest.TestSuite() 
suite.addTest(suite_sample_unittest) 

# run the suite 
unittest.TextTestRunner(verbosity=2).run(suite) 

:

그래서 나는 다음과 같은 테스트 케이스가 있습니다

# sample_unittest.py 
import unittest, pytest 

class TestClass(unittest.TestCase): 

    def setUp(self): 
     self.testdata = ['apple', 'pear', 'berry'] 

    def test_first(self): 
     assert 'apple' in self.testdata 

    def test_second(self): 
     assert 'pear' in self.testdata 

    def tearDown(self): 
     self.testdata = [] 

def suite(): 
    suite = unittest.TestSuite() 
    suite.addTest(TestClass('test_first')) 
    return suite 

if __name__ == '__main__': 
    unittest.TextTestRunner(verbosity=2).run(suite()) 

를 그리고 난 이런 테스트 스위트를 가지고 test_first가 실행됩니다 (그러나 py.test가 제공 할 추가 정보를 얻지 못함).

python functionaltests/suite_regressi on.py -v

나는 제품군에 대해 다음을 실행하면, 0 테스트를 수집 : 나는 실행하면 다음과 같은

py.test functionaltests/suite_regression.py

을 테스트 케이스에 대해 test_first 및 test_second가 실행됩니다.

py.test functionaltests/sample_unittest.py -v

어떻게 py.test 키워드를 사용하면 테스트를 스위트로 구성하는 데 도움이되는지 알 수 없습니다. 테스트 케이스를 폴더 구조에 배치하고 폴더 옵션을 사용하여 py.test를 실행하면 기능 영역별로 테스트를 구성 할 수 없습니다.

그래서 내 질문 :

  1. 는 재사용 가능한 형식으로 시험의 임의의 그룹을 지정하는 py.test 메커니즘이 있습니까?
  2. py.test에서 unittest.TestSuite를 사용할 방법이 있습니까?

편집 : 그래서 나는 임의의 레이블이 나에게 플래그 테스트 기능 및 시험 방법을 할 수있는 py.test 마커를 시도하고 런타임에 해당 레이블에 대한 필터링합니다.

# conftest.py 
import pytest 

# set up custom markers 
regression = pytest.mark.NAME 
health = pytest.mark.NAME 

그리고 내 업데이트 된 테스트 케이스 :
# sample_unittest.py 
import unittest, pytest 

class TestClass(unittest.TestCase): 

    def setUp(self): 
     self.testdata = ['apple', 'pear', 'berry'] 

    @pytest.mark.healthcheck 
    @pytest.mark.regression 
    def test_first(self): 
     assert 'apple' in self.testdata 

    @pytest.mark.regression 
    def test_second(self): 
     assert 'pear' in self.testdata 

    def tearDown(self): 
     self.testdata = [] 

def suite(): 
    suite = unittest.TestSuite() 
    suite.addTest(TestClass('test_first')) 
    return suite 

if __name__ == '__main__': 
    unittest.TextTestRunner(verbosity=2).run(suite()) 

그래서 다음 명령 수집을 실행은 test_first 실행 :

py.test functionaltests/sample_unittest합니다.평 -v -m 상태 검사 그리고이 수집 test_first 실행 test_second

: 그래서 뒤로

py.test functionaltests/sample_unittest.py -v -m 회귀

을 내 질문 : 마커는 부분적인 해결책이지만 수집 된 마킹 된 테스트의 실행을 제어 할 수있는 방법이 아직 없습니다.

+0

* "수집 된 표시된 테스트의 실행을 제어 할 수있는 방법이 없습니다."* 무슨 뜻입니까? 순서? –

+0

예, 임의의 순서에 따라 실행을 제어하고 수집 된 테스트의 기본 순서에 의존하지 않습니다. – sophe

답변

2

현재 테스트 실행 순서를 직접 제어 할 수있는 방법은 없습니다. FWIW, 무언가를 구현하는 데 사용할 수있는 플러그인 후크 pytest_collection_modifyitems이 있습니다. 무작위 화를 구현하는 데 사용하는 플러그인은 https://github.com/klrmn/pytest-random/blob/master/random_plugin.py을 참조하십시오.

+0

이것은 앞으로 나아갈 수있는 방법을 제공합니다. – sophe

+0

폴더 내의 @sophe 테스트는 여전히 알파벳 순서로 실행됩니다 :) Holger는 "그것에 의존하지 말 것" –

2

나는 늦은 지금 약간의하지만 난 그냥 여기 문서와 상호 작용하는 선택 플러그인을 완료 같아요

https://github.com/tgoodlet/pytest-interactive

실제로 홀가는 위에서 언급 한 후크를 사용합니다.

IPython을 사용하여 수집 단계 직후에 여러 가지 테스트를 선택할 수 있습니다. 테스트를 주문하는 것은 슬라이스, 아래 첨자 또는 탭 완성을 사용하면 쉽게 수행 할 수 있습니다. 개발 중에 사용하기위한 대화 형 도구이고 자동 회귀 실행에는 그다지 중요하지 않습니다.

마크를 사용하여 지속적으로 주문한 경우, 특히 긴 회귀 분석에서 기본 선행 조건 테스트를 실시한 경우에 특히 유용합니다. pytest-ordering을 사용했습니다.

관련 문제