전체 네트워크는 뜨겁고 pytest 자동 테스트 프레임워크는 0-1에서 실제 전투에 능숙합니다.


머리말

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"])

D1

테스트 실행의 자세한 정보 감소:
실행 로그에 훨씬 적은 정보가 있으며 "-q"는 테스트 실행의 자세한 정보를 줄이는 데 사용됩니다. 대신 "-quiet"를 사용할 수도 있습니다.

pytest -q test.py
if __name__ == '__main__':
	pytest.main(["-q", "test.py"])

D2

테스트 케이스가 실패하면 테스트 종료:
테스트 케이스의 디버깅 단계에서 유용합니다.실패한 테스트 케이스가 발생하면 후속 테스트 예제를 계속 실행하는 대신 디버깅을 통해 테스트 케이스를 먼저 통과해야 합니다.

pytest -x test.py
if __name__ == '__main__':
	pytest.main(["-x", "test.py"])

D3

테스트 디렉터리 실행:
테스트 디렉터리는 상대 경로(예: ./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. 요약(마지막에 약간의 놀라움)

땀을 흘리고 노력해야만 눈부신 성과를 거둘 수 있고, 열심히 노력해야만 멋진 인생을 창조할 수 있습니다. 인내하고 꿈을 쫓으면 타의 추종을 불허하는 강자가 될 것입니다!

끊임없는 노력만이 빛을 발할 수 있고, 용감하게 나아가겠다는 각오가 있어야 꿈을 이룰 수 있으며, 어려움을 두려워하지 않고 용감하게 도전한다면 반드시 자신만의 멋진 장을 써나갈 수 있을 것입니다!

최선을 다해야만 찬란하게 꽃을 피울 수 있고, 인내해야만 기적을 만들 수 있으며, 씩씩하게 나아가야 꿈을 이룰 수 있습니다. 자신을 믿고 발을 땅에 대고 열심히 일하면 미래는 반드시 당신의 것이 될 것입니다!

추천

출처blog.csdn.net/csdnchengxi/article/details/131810534