테스트
pytest| 원저작자 | 크레켈 외 |
|---|---|
| 안정된 릴리스 | 7.1.1 |
| 저장소 | |
| 기입처 | 파이썬 |
| 플랫폼 | MacOS, Windows, POSIX |
| 유형 | 소프트웨어 테스트 프레임워크 |
| 면허증. | MIT 라이선스 |
| 웹 사이트 | pytest |
Pytest는 PyPy 프로젝트에서 시작된 Python 테스트 프레임워크입니다.유닛 테스트, 통합 테스트, 엔드 투 엔드 테스트, 기능 테스트 등 다양한 유형의 소프트웨어 테스트를 작성할 때 사용할 수 있습니다.이 기능에는 파라미터화된 테스트, 고정장치 및 아사트 재작성이 포함됩니다.
Pytest 고정장치는 테스트 케이스에서 파라미터 이름을 전달함으로써 테스트 컨텍스트를 제공합니다.파라미터화는 여러 세트의 입력 및 출력을 테스트하기 위한 중복 코드를 제거하며, 다시 작성된 아사트 스테이트먼트는 실패 원인에 대한 자세한 출력을 제공합니다.
역사
파이테스트는 파이썬의 내장 모듈 unittest의 단점을 해결하기 위한 서드파티 패키지의 노력의 일환으로 개발되었습니다.표준 CPython에 대한 Python의 대체 구현인 PyPy의 일부로 시작되었습니다.2003년 초 설립된 이후 PyPy는 테스트에 중점을 두고 있다.PyPy는 새롭게 작성된 코드에 대한 유닛 테스트, 버그에 대한 회귀 테스트, CPython의 테스트 [1]스위트를 이용한 통합 테스트를 실시했다.
2004년 중반, utest라는 테스트 프레임워크가 등장하여 PyPy의 기여자들은 기존 테스트 케이스를 utest로 전환하기 시작했습니다.한편, EuroPython 2004에서는 std라는 이름의 테스트용 보완 표준 라이브러리가 발명되었습니다.이 패키지는 나중에 문제가 될 수 있는 내용을 재작성하는 것과 같은 원칙을 제시했습니다.2004년 말, std 프로젝트는 py로 이름이 바뀌었고 std.utest는 py.test가 되었고 py 라이브러리는 PyPy에서 분리되었다.2010년 11월에는 pytest 2.0.0이 py와는 다른 패키지로 출시되었습니다.2016년 8월까지 여전히 py.test로 불렸으나 pytest 3.0.0이 출시된 후 권장 명령줄 진입 지점이 [2]pytest가 되었습니다.
Pytest는 Python의 인기로 인해 개발자 보안 플랫폼 Snyk에 의해 Python의 주요 생태계 프로젝트 중 하나로 분류되었습니다.unittest와 nose(다른 테스트 패키지)에서 pytest로 전환한 유명한 프로젝트에는 Mozilla와 [3][4][5][6]Dropbox가 포함됩니다.
특징들
파라미터 테스트
소프트웨어 테스트에서는 테스트 기능을 통해 값을 전송하고 출력이 올바른지 확인하는 것이 일반적인 패턴입니다.대부분의 경우 기능을 완전히 테스트하기 위해서는 여러 세트의 입력/출력을 테스트해야 하며, 이러한 경우를 별도로 작성하면 대부분의 동작이 그대로 유지되고 입력/출력 값만 달라지기 때문에 코드가 중복됩니다.Pytest의 매개 변수화된 테스트 기능은 서로 다른 반복을 하나의 테스트 케이스에 결합하여 이러한 중복 코드를 제거한 후 이러한 반복을 실행하고 각 테스트 결과를 [7]별도로 표시합니다.
pytest에서 매개 변수화된 테스트는@pytest.mark.parametrize(argnames, argvalues) 데코레이터, 여기서 첫 번째 파라미터는argnames, 는 쉼표로 구분된 이름의 문자열입니다.argvalues전달되는 값의 리스트입니다.argnames. 에 여러 개의 이름이 있는 경우argnames,argvalues각 태플의 값이 의 이름에 대응하는 튜플 리스트가 됩니다.argnames색인별로의 이름argnames그런 다음 데코레이터에 의해 파라미터로 표시된 테스트 기능에 전달됩니다.pytest가 이러한 장식된 테스트를 실행할 때 각 쌍은argnames그리고.argvalues자체 테스트 출력과 고유 식별자를 사용하여 개별 주행이 구성됩니다.그런 다음 식별자를 사용하여 개별 데이터 [7]: 52–58 [8]쌍을 실행할 수 있습니다.
리라이트 어설션
소프트웨어 테스트를 작성할 때 assert 문장은 테스트 실패를 전달하기 위한 주요 수단이며 기대값은 실제 [7]: 32–34 값과 비교됩니다.Python의 내장된 assert 키워드는 실패 시 세부사항 없이 AssertionError만 발생시키는 반면, pytest는 Python의 assert 키워드를 고쳐 쓰고 assert 스테이트먼트 내의 표현식 평가와 같은 실패 원인에 대한 자세한 출력을 제공합니다.unittest(Python의 테스트용 내장 모듈)의 아사트 [7]: 32 문장과 비교할 수 있습니다.
| 테스트 | 중단되지 않다 |
|---|---|
assert x | assertTrue(x) |
assert x == y | assertEqual(x, y) |
assert x >= y | assertLessEqual(x, y) |
unittest대부분의 유닛 테스트 라이브러리와 마찬가지로 Java 프로그래밍 언어의 JUnit에서 영감을 얻었기 때문에 보다 상세한 구문을 고수한다.pytest는 Python의 내장 아사트 호출을 대행 수신하면서 동일한 구문을 달성하여 접근 방식을 보다 [7]: 32 [5]간결하게 만든다.
Pytest 고정 장치
Pytest의 테스트는 [10]AAA로 알려진 배열, 행동 및 어설트 시퀀스로 구성된 테스트를 사용하여 컴퓨터 코드가 예상대로[9] 동작하는지 확인합니다.고정 장치는 테스트를 위한 컨텍스트를 제공합니다.시스템을 알려진 상태로 만들고 데이터를 테스트 기능에 전달하는 데 사용할 수 있습니다.고정 장치는 실질적으로 테스트의 해부도에서 배열 단계를 구성합니다(AAA, 배열, 작용, 어설션의 줄임말).[10][9]Pytest 고정 장치는 테스트 케이스를 설정하기 전 또는 정리를 위한 테스트 케이스를 실행한 후 실행할 수 있지만 unittest 및 nose(또 다른 타사 Python 테스트 프레임워크)의 설정 및 해체와는 다릅니다.pytest 고정 장치로 선언된 기능은@pytest.fixture() 데코레이터:[11] 이름을 매개 변수로 테스트 함수에 전달할 수 있습니다.pytest는 테스트 기능의 파라미터에서 고정장치 이름을 찾으면 먼저 동일한 모듈에서 해당 고정장치를 검색하고, 발견되지 않으면 conftest.py [7]: 61 파일에서 해당 고정장치를 검색합니다.
예를 들어 다음과 같습니다.
수입품 테스트 @pytest.고정 장치() 방어하다 데이터 세트(): "테스트 기능에 데이터 반환" 돌아가다 {'data1': 1, 'data2': 2} 방어하다 test_filename(테스트)_interface(실행)(데이터 세트): "고정값 테스트 및 확인" 주장하다 데이터 세트 == {'data1': 1, 'data2': 2} 위 예에서 pytest 고정장치dataset사전이 반환되고 사전이 테스트 함수로 전달됩니다.test_dataset주장하기 위해서요.테스트 케이스와 동일한 파일 내의 픽스쳐 검출과 더불어 pytest 픽스쳐를 테스트 디렉토리의 conftest.py 파일에 배치할 수도 있습니다.테스트 디렉토리 내에 여러 개의 conftest.py 파일이 있을 수 있으며,[7]: 63 각 파일은 테스트의 각 세그먼트에 대해 검출되는 고정장치를 위한 것입니다.
고정 범위
pytest에서 고정 장치 스코프를 사용하여 사용자가 고정 장치를 호출해야 하는 시기를 정의할 수 있습니다.기능 스코프, 클래스 스코프, 모듈 스코프, 세션 스코프의 4가지 고정 스코프가 있습니다.기능 범위 고정 장치는 모든 pytest 고정 장치에 대해 기본적으로 사용됩니다. 이 고정 장치를 파라미터로 하는 기능이 실행될 때마다 호출됩니다.보다 넓은 설비 범위를 지정하는 목적은 반복적인 설비 호출을 배제하는 것이며, 이로 인해 테스트 실행 속도가 느려질 수 있습니다.클래스 범위 고정 장치는 호출 횟수에 관계없이 테스트 클래스당 한 번씩 호출되며, 다른 모든 범위에 동일한 논리가 적용됩니다.고정 장치 범위를 변경할 때는 다음과 같이 범위 매개변수를 고정 장치 장식기에 추가하면 됩니다.@pytest.fixture(scope="class")를 클릭합니다.[7]: 72 [12]
테스트 필터링
pytest의 또 다른 특징은 원하는 테스트만 선택하여 실행하거나 개발자가 원하는 대로 동작하는 테스트를 통해 필터링할 수 있다는 것입니다."k" 옵션(예: )을 사용하면 pytest는 이름에 다음이 포함된 테스트만 실행합니다.some_name그 반대입니다.실행할 수 있으며 pytest는 이름에 포함되지 않은 모든 테스트를 실행합니다.some_name를 클릭합니다.[13]
Pytest의 마커는 테스트 동작을 변경할 뿐만 아니라 테스트를 필터링할 수도 있습니다.Pytest의 마커는 Python 데코레이터로 시작합니다.@pytest.mark.<markername>구문을 테스트 함수 위에 배치합니다.서로 다른 임의 이름 마커를 사용하는 경우 명령줄에서 실행하면 해당 [7]: 13 마커로 장식된 테스트만 실행됩니다.사용 가능한 모든 마커는 설명과 함께 에 나열할 수 있습니다. 사용자 지정 마커는 사용자가 정의하여 pytest.ini에 등록할 수도 있습니다.이 경우 해당 사용자 지정 마커가 내장된 [7]: 147 마커와 함께 나열됩니다.
「 」를 참조해 주세요.
레퍼런스
- ^ Bolz-Tereick, Carl Friedrich (9 September 2018). "PyPy Status Blog". PyPy. Retrieved 12 May 2022.
- ^ "History". pytest. Retrieved 13 April 2022.
- ^ "Project examples". Pytest. Retrieved 1 February 2022.
- ^ Koorapati, Nipunn. "Open Sourcing Pytest Tools". Dropbox. Retrieved 1 February 2022.
- ^ a b Oliveira, Bruno (August 2018). pytest Quick Start Guide. Packt Publishing. ISBN 978-1-78934-756-2. Retrieved 1 February 2022.
- ^ "pytest". Snyk. Retrieved 12 May 2022.
- ^ a b c d e f g h i j Okken, Brian (September 2017). Python Testing with Pytest (1st ed.). The Pragmatic Bookshelf. ISBN 9781680502404. Retrieved 22 January 2022.
- ^ "Parametrizing fixtures and test functions". pytest.org. Retrieved 24 May 2022.
- ^ a b Viafore, Patrick (12 July 2021). Robust Python. O'Reilly Media, Inc. ISBN 978-1-0981-0061-2. Retrieved 3 July 2022.
Tests verify that what you build is performing as you expect.
- ^ a b Khorikov, Vladamir (January 2020). Unit Testing Principles, Practices, and Patterns. Published by Manning Publications. ISBN 9781617296277. Retrieved 4 June 2022.
- ^ "About fixtures". Pytest. Retrieved 7 February 2022.
- ^ Ashwin, Pajankar (27 February 2017). Python Unit Test Automation: Practical Techniques for Python Developers and Testers. Apress. ISBN 9781484226766. Retrieved 7 March 2022.
- ^ Molina, Alessandro (February 2021). Crafting Test-Driven Software with Python. Publisher(s): Packt Publishing. ISBN 9781838642655. Retrieved 8 March 2022.