Pytest 테스트 프레임워크 기본 사용 방법 상세 정보

pytest 소개
pytest는 매우 성숙한 전 기능의 Python 테스트 프레임워크로 주요 특징은 다음과 같다.
1. 간단하고 유연하며 손에 넣기 쉽고 문서가 풍부하다.
2. 매개 변수화를 지원하여 테스트할 테스트 용례를 세밀하게 제어할 수 있다.
3. 간단한 단원 테스트와 복잡한 기능 테스트를 지원할 수 있고selenium/appnium 등 자동화 테스트, 인터페이스 자동화 테스트(pytest+requests)에도 사용할 수 있다.
4.pytest는 많은 제3자 플러그인을 가지고 있으며 사용자 정의 확장이 가능합니다
  • 예를 들어pytest-selenium(통합selenium),
  • pytest-html(완벽한 html 테스트 보고서 생성),
  • pytest-rerunfailures(실패case 중복 실행),
  • pytest-xdist(다중 CPU 배포),
  • pytest-ordering(테스트 실행 순서 제어)
  • 5. 테스트 용례의 skip과 xfail 처리;
    6. CI 도구와 잘 결합할 수 있다. 예를 들어 Jenkins
    규칙 작성:
  • 테스트 파일: test_시작(_test로 끝낼 수도 있음)
  • 테스트 클래스는 Test로 시작하며 init 방법이 있을 수 없습니다
  • 테스트 함수는test_시작
  • 단언은 기본적인 assert를 사용하면 된다
    빠른 예
    test_pyexample.py
    
    import pytest
    
    class TestClass:
        def test_one(self):
          x = "this"
          assert 'h' in x
    
        def test_two(self):
          x = "hello"
          assert hasattr(x, 'check')
    
        def test_three(self):
          a = "hello"
          b = "hello world"
          assert a in b
    명령줄에서 실행:
    1. 코드가 있는 디렉터리에 cd, 명령을 실행:py.test test_pyexample.py
    2,pytest-sugar 플러그인을 설치하면 진도표를 볼 수 있습니다
    Pycharm 구성 실행:
    1.file->Setting->Tools->Python Integrated Tools-> 프로젝트 이름->Default test runner->선택py.test
    
    import pytest
    
    class TestClass:
        def test_one(self):
          x = "this"
          assert 'h' in x
    
        def test_two(self):
          x = "hello"
          assert hasattr(x, 'check')
    
        def test_three(self):
          a = "hello"
          b = "hello world"
          assert a in b
    
    if __name__ == "__main__":
      pytest.main('-q test_class.py')
    Console 공통 매개변수 설명:
  • -v는 모든 테스트 함수의 실행 결과를 표시하는 데 사용됩니다
  • -q는 전체 테스트 결과만 표시합니다
  • -s는 테스트 함수에서print() 함수 출력을 표시하는 데 사용됩니다
  • -x, --exitfirst, exit instantly on first error or failed test
  • -m는 장식기 설정이 있는 테스트 용례만 실행합니다
  • -h 도움말

  • 
    py.test # run all tests below current dir
    py.test test_mod.py # run tests in module file test_mod.py
    py.test somepath # run all tests below somepath like ./tests/
    py.test -k stringexpr # only run tests with names that match the
    # the "string expression", e.g. "MyClass and not method"
    # will select TestMyClass.test_something
    # but not TestMyClass.test_method_simple
    py.test test_mod.py::test_func # only run tests that match the "node ID",
    # e.g "test_mod.py::test_func" will be selected
    # only run test_func in test_mod.py
    pytest 매개 변수화
    장식기 사용: @pytest.mark.parametrize()
    개별 매개변수:
    
    import pytest
    import random
    @pytest.mark.parametrize('x',[(1),(2),(6)])
    def test_add(x):
      print(x)
      assert x==random.randrange(1,7)
    여러 매개변수:
    
    import pytest
    @pytest.mark.parametrize('x,y',[
      (1+2,3),
      (2-0,1),
      (6*2,12),
      (10*2,3),
      ("test","test"),
    ])
    def test_add(x,y):  # , x,y 
      assert x==y
    테스트 실행 순서 제어
    pytest-ordering 설치
    pip install pytest-ordering
    장식기 @pytest를 빌려주세요.mark.run(order=1) 테스트 실행 순서 제어
    
    import pytest
    import time
    value=0
    @pytest.mark.run(order=2) # order=2
    def test_add2():
      print("I am 2")
      time.sleep(2)
      assert value==10
    @pytest.mark.run(order=1)  # order=1
    def test_add():
      print("I am add")
      global value
      value=10
      assert value==10
    실행 후 테스트 보고서 생성(htmlReport)
    pytest-html 설치:
    pip install -U pytest-html
    사용 방법:
    py.test test_pyexample.py --html=report.html
    더 자세한 테스트 보고서
    pytest-cov 설치:
    pip install pytest-cov
    어떻게 사용합니까
    
    py.test --cov-report=html --cov=./ test_code_target_dir
    Console 
    --cov=[path], measure coverage for filesystem path (multi-allowed),  , 
    --cov-report=type, type of report to generate: term, term-missing, annotate, html, xml (multi-allowed),  
    --cov-config=path, config file for coverage, default: .coveragerc, coverage 
    --no-cov-on-fail, do not report coverage if test run fails, default: False, , 
    --cov-fail-under=MIN, Fail if the total coverage is less than MIN.  MIN, 
    다중 프로세스 실행
    pytest-xdist 설치:
    pip install -U pytest-xdist
    사용 방법:
    py.test test_pyexample.py -n NUM
    여기서 NUM은 동시 실행된 프로세스 수를 작성합니다.
    재실행 실패 용례
    pytest-rerunfailures 설치:
    
    import random
    def add(x,y):
      return x+y
    def test_add():
      random_value=random.randint(2,7)
      print('random_value:'+str(random_value))
      assert add(1,3)==random_value
    사용 방법:
    명령:pytest --reruns 재시도 횟수
    예를 들어pytest--reruns3는 실행에 실패한 용례를 세 번 다시 실행할 수 있음을 나타낸다
    명령:pytest --reruns 재시도 횟수 --reruns-delay 횟수 사이의 시간 지연 설정 (단위:초)
    예를 들어pytest--reruns3-reruns-delay5는 (역:서연4,지류) 운행에 실패한 용례는 세 번 다시 실행할 수 있고 첫 번째와 두 번째 간격은 5초이다
    또한 장식기를 통해 구성할 수 있습니다.
    @pytest.mark.flaky(reruns=3, reruns_delay=5)
    이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

    좋은 웹페이지 즐겨찾기