내용: 가이드
머리말
1. 동작 모드
명령줄 모드:
pytest -s login.py
주요 기능 모드:
if __name__ == '__main__':
pytest.main(["-s", "login.py"])
pytest.ini running:
pytest.ini 파일에서 pytest의 실행 매개변수를 구성합니다.
참고 사항:
위치: 구성 파일은 일반적으로 프로젝트의 루트 디렉토리에 있습니다. 인코딩: ANSI여야 하며 텍스트 편집 도구를 사용하여 인코딩 형식 을
수정할 수 있습니다.
파일이 읽히게 되는데, 가장 높은 수준의 ;
파일 시작 부분의 첫 줄은 주석을 제외하고는 [pytest]여야 하며 고정 형식이며 파일 이름 pytest.ini도 고정되어 있으므로 읽을 수 없습니다. 자체적으로 이름이 변경되었습니다.
일반적으로 사용되는 매개변수:
addopts 명령줄 매개변수, 공백으로 구분,
테스트 경로 테스트 케이스 경로,
마커 마커 매개변수, 할당 방법은 키:값,
python_files 모듈 이름 지정 규칙 xx.py,
python_classes 클래스 이름 이름 지정 규칙 Xxx,
python_functions 방법 이름 지정 규칙* *
required_plugins 플러그인 사용법,
xfail_strict = true는 xpass를 비활성화합니다.
2, 긍정
pytest 단위 테스트 프레임워크는 특별한 assert 메서드를 제공하지 않지만 Python의 assert를 직접 사용하여 assert를 수행합니다.
import pytest
# 功能:用于计算 a 与 b 相加的和
def add(a, b):
return a + b
# 功能:用于判断素数
def is_prime(n):
if n <= 1:
return False
for i in range(2, n):
if n % i == 0:
return False
return True
# 测试相等
def test_add_1():
assert add(3, 4) == 7
# 测试不相等
def test_add_2():
assert add(17, 22) != 50
# 测试大于或等于
def test_add_3():
assert add(17, 22) <= 50
# 测试小于或等于
def test_add_4():
assert add(17, 22) >= 38
# 测试包含
def test_in():
a = "hello"
b = "he"
assert b in a
# 测试不包含
def test_not_in():
a = "hello"
b = "hi"
assert b not in a
# 判断是否为 True
def test_true_1():
assert is_prime(13)
# 判断是否为 True
def test_true_2():
assert is_prime(7) is True
# 判断是否不为 True
def test_true_3():
assert not is_prime(4)
# 判断是否不为 True
def test_true_4():
assert is_prime(6) is not True
# 判断是否为 False
def test_false_1():
assert is_prime(8) is False
if __name__ == '__main__':
pytest.main(["-s", "0701.py"])
3, 고정 장치
Fixture는 일반적으로 테스트 방법, 테스트 기능, 테스트 클래스 및 전체 테스트 파일에 대한 테스트 환경을 초기화하거나 복원하는 데 사용됩니다.
setup_module/teardown_module: 현재 파일의 모든 테스트 케이스 전후에 실행됩니다.
setup_function/teardown_function: 각 테스트 함수 전후에 실행됩니다.
설정/해제: 각 테스트 기능 전후에 실행됩니다. 이 두 메서드는 클래스 메서드에서도 작동합니다.
4. 파라미터화
# argnames:参数名
# argvalues:参数对应值,类型必须为可迭代类型,一般使用list
@pytest.mark.parametrize(argnames, argvalues, indirect=False,ids=None, scope=None)
예:
import pytest
class TestLogin:
@pytest.mark.parametrize(("username", "password"), [("zhangsan", "zhangsan123"), (" xiaoming", "xiaoming123")])
def test_a(self, username, password):
print(username)
print(password)
assert 1
5. 테스트 실행
pytest는 테스트 케이스를 실행하기 위한 풍부한 매개변수를 제공하며 "pytest --help"를 통해 도움말을 볼 수 있습니다.
이름에 특정 문자열이 포함된 테스트 사례 실행:
예: 이름에 "add"가 포함된 테스트 사례를 지정하려면 "-k"를 전달합니다.
pytest -k add test.py
if __name__ == '__main__':
pytest.main(["-k", "add", "test.py"])
테스트 실행의 자세한 정보 감소:
실행 로그에 훨씬 적은 정보가 있으며 "-q"는 테스트 실행의 자세한 정보를 줄이는 데 사용됩니다. 대신 "-quiet"를 사용할 수도 있습니다.
pytest -q test.py
if __name__ == '__main__':
pytest.main(["-q", "test.py"])
테스트 케이스가 실패하면 테스트 종료:
테스트 케이스의 디버깅 단계에서 유용합니다.실패한 테스트 케이스가 발생하면 후속 테스트 예제를 계속 실행하는 대신 디버깅을 통해 테스트 케이스를 먼저 통과해야 합니다.
pytest -x test.py
if __name__ == '__main__':
pytest.main(["-x", "test.py"])
테스트 디렉터리 실행:
테스트 디렉터리는 상대 경로(예: ./test_dir) 또는 절대 경로(예: D:\pytest_sample\test_dir)를 지정할 수 있습니다.
pytest ./test_dir
실행할 특정 클래스 또는 메서드 지정:
여기에서 test_fixtures_02.py 파일의 TestMultiply 클래스 아래에 test_numbers_5_6() 메서드를 실행하도록 지정하고 파일 이름, 클래스 이름 및 메서드 이름은 "::" 기호로 구분됩니다.
pytest test_fixtures_02.py::TestMultiply::test_numbers_5_6
6. 시험 건너뛰기
사용 방법: 건너뛰어야 하는 테스트 스크립트 위에 데코레이터 @pytest.mark.skipif(condition, reason="xxx") 추가
# condition:跳过的条件,必传参数
# reason:标注原因,必传参数
@pytest.mark.skipif(condition, reason=None)
7. 테스트 보고서 생성
JUnit XML 파일을 생성합니다.
pytest ./test_dir --junit-xml=./report/log.xml
온라인 테스트 보고서 생성:
pytest ./test_dir --pastebin=all
위의 코드는 세션 로그 링크를 생성하고, 링크를 복사하고, 브라우저를 통해 열면 HTML 형식의 테스트 보고서를 받을 수 있습니다.
8. 파이테스트 플러그인
pytest-html:
pytest-html은 HTML 형식으로 테스트 보고서를 생성할 수 있습니다.
먼저 pip 명령을 통해 pytest-html 확장을 설치합니다.
pip install pytest-html
둘째, 테스트 사례를 실행하고 테스트 보고서를 생성합니다.
pytest ./ --html=./report/result.html
pytest-rerunfailures:
pytest-rerunfailures는 테스트 사례가 실패할 때 재시도할 수 있도록 합니다.
pip install pytest-rerunfailures
"-reruns" 매개변수를 통해 테스트 케이스 실행에 실패한 후 재시도 횟수를 설정합니다.
pytest -v test.py --reruns 3
pytest-parallel:
pytest-parallel 확장은 테스트 케이스의 병렬 실행을 가능하게 합니다.
pip install pytest-parallel
매개변수 "–tests-per-worker"는 스레드 수를 지정하는 데 사용되며 "auto"는 자동 할당을 의미합니다.
pytest -q test.py --tests-per-worker auto
예:
from time import sleep
def test_01():
sleep(3)
def test_02():
sleep(5)
def test_03():
sleep(6)
스레드를 사용하지 않고 테스트 케이스를 실행하는 데 14.05s가 걸렸지만 사용 후 6.02s로 단축되었습니다.
pytest-ordering:
함수 실행 순서를 제어합니다.
pip3 install pytest-ordering
사용:
테스트 중인 함수 @pytest.mark.run(order=x) 표시,
순서대로 전달된 매개변수에 따라 실행 순서 해결,
순서 값이 모두 양수이거나 모두 음수인 경우 실행 순서: 값이 작을수록 우선 순위가 높고
양수와 음수가 모두 존재하며 양수가 우선 순위가 높습니다.
다음은 내가 컴파일한 2023년에 가장 완벽한 소프트웨어 테스트 엔지니어 학습 지식 아키텍처 시스템 다이어그램입니다. |
1. Python 프로그래밍 입문부터 숙달까지
2. 인터페이스 자동화 프로젝트 실전
3. 웹 자동화 프로젝트의 실전
4. 앱 자동화 프로젝트의 실전
5. 1차 제조사 이력서
6. DevOps 시스템 테스트 및 개발
7. 일반적으로 사용되는 자동화 테스트 도구
여덟, JMeter 성능 테스트
9. 요약(마지막에 약간의 놀라움)
땀을 흘리고 노력해야만 눈부신 성과를 거둘 수 있고, 열심히 노력해야만 멋진 인생을 창조할 수 있습니다. 인내하고 꿈을 쫓으면 타의 추종을 불허하는 강자가 될 것입니다!
끊임없는 노력만이 빛을 발할 수 있고, 용감하게 나아가겠다는 각오가 있어야 꿈을 이룰 수 있으며, 어려움을 두려워하지 않고 용감하게 도전한다면 반드시 자신만의 멋진 장을 써나갈 수 있을 것입니다!
최선을 다해야만 찬란하게 꽃을 피울 수 있고, 인내해야만 기적을 만들 수 있으며, 씩씩하게 나아가야 꿈을 이룰 수 있습니다. 자신을 믿고 발을 땅에 대고 열심히 일하면 미래는 반드시 당신의 것이 될 것입니다!