단위 테스트를 위한 pytest

전제 조건: pytest pytest-html이 설치되어 있어야 합니다( html 테스트 보고서 생성 ).
pip install pytest pip install pytest-html

1: 명명 규칙

파이 테스트 단위 테스트 의 클래스 이름과 메서드 이름은 반드시 test 로 시작 해야 하며, 실행 중에는 test 로 시작하는 클래스와 메서드 만 찾을 수 있다 .
더 엄격한
unittest : 설정 >> setupclass , teardown >> teardownclass (수업 과제)
Pytest: setup, setup_class teardown, teardown_class 함수 ( unittest 실행 과 동일 )
테스트 방법의 시작과 끝에서 실행합니다. 즉 , 테스트 기능을 실행하면 설정 해제 가 실행됩니다.
테스트 메소드 의 시작과 끝에서 실행되지만 테스트 함수의 개수에 관계없이 setup_class teardown_class 는 한 번만 실행됩니다.

2: Pytest 는 자체 html 테스트 보고서 를 생성합니다.

전제 조건: pytest-html 모듈 (python 의 내장 테스트 보고서 모듈 ) 을 다운로드해야 합니다.

pip 설치 pytest-html

사례 번호 1

pytest.main("module.py ") [지정된 모듈 실행, 테스트로 시작하는 모든 클래스 및 테스트 케이스 실행]

 보고서 생성

사례 2

지정된 모듈 지정 클래스 지정 유스 케이스 실행, 콜론 분할 및 테스트 보고서 생성

 출력 보고서:

사례 3:

pytest.main() 직접 실행 [ 현재 디렉토리 에서 test 로 시작 하는 파일 또는 test로 끝나는 py 파일을 자동으로 찾기 ] (pytest_test )

보고서 생성:

 파이테스트 호출문

출력 보고서: 

-x 테스트 케이스가 실패하면 테스트를 종료합니다.

-s: 인쇄 내용 표시

확장: 건너뛰기
@pytest.mark.skip() 을 사용 하여 해당 사용 사례 ( function ) 를 건너뜁니다.

 보고서 생성:

 3: Pytest 작동 방식

.dot , 사용 사례가 통과했음을 나타냅니다.
F 실패 를 의미합니다
E 는 사용 사례에 예외 오류 가 있음을 나타냅니다.

4: xml 파일 읽기

xml 파일

 개발 코드 모듈:

데이터 모듈 읽기:

 테스트 코드 모듈:

보고서 생성:

구현 코드:

#xml文件
<ento>
    <add>
        <add1>1</add1>
        <add2>2</add2>
        <denyu>3</denyu>
    </add>
</ento>

#开发代码
class Clac():
    def add(self,a,b):
        return a + b

    def jian(self,a,b):
        return a - b

#读取数据
from xml.dom import minidom

class ReadXml():
    def readxml(self,path,firsthod,secondnode):
        root = minidom.parse(path)
        firsthod = root.getElementsByTagName(firsthod)[0]
        secondnode = firsthod.getElementsByTagName(secondnode)[0].firstChild.data

        return secondnode

#测试代码
from readdata.readxml import ReadXml  #获取数据
from assets.clac import Clac  #引入开发代码
import pytest,allure,os
readxmlclass = ReadXml()
c = Clac()
aa = int(readxmlclass.readxml("../data/test.xml","add","add1"))
bb = int(readxmlclass.readxml("../data/test.xml","add","add2"))
cc = int(readxmlclass.readxml("../data/test.xml","add","denyu"))

class TestClass():

    def test001(self):
        result =  c.add(int(aa),int(bb))
        assert result == int(cc)

4.1 CSV 파일 읽기

 개발 코드 모듈:

데이터 모듈 읽기:

 

 테스트 코드 모듈:

테스트 보고서 생성:

 구현 코드:

#csv文件
10,20,30

#开发代码
class Clac():
    def add(self,a,b):
        return a + b

    def jian(self,a,b):
        return a - b

#读取数据
import csv
class CsvClass():
    def csvclass(self):
        item = []
        c = csv.reader(open("../data/test.csv"))
        for csv_i in c:
            item.append(csv_i)
        return item

r = CsvClass()
print(r.csvclass())

#测试代码
from readdata.redatacsv import CsvClass
from assets.clac import Clac
import pytest
r = CsvClass()
data = r.csvclass()
c = Clac()

class TestCsv():
    def test001(self):
        for item_i in data:
            result = c.add(int(item_i[0]),int(item_i[1]))
            assert result == int(item_i[2])

if __name__ == '__main__':
    pytest.main(["-s","test_02.py","--html=./report123.html"])

 

5:매력

Allure 는 가볍고 매우 유연한 오픈 소스 테스트 보고 프레임워크입니다. TestNG 같은 대부분의 테스트 프레임워크를 지원합니다 .
파이 테스트 , JUint 사용하기 쉽고 통합하기 쉽습니다.
먼저 allure 의 환경 변수를 구성합니다.

allure 가 성공적으로 구성 되었는지 확인

다음으로, allure 를 설치하십시오.

pip install allure-pytest

allure-pytest Pytest 용 플러그인으로 , 이를 통해 Allure 가 테스트 보고서를 생성 하는 데 필요한 데이터 를 생성할 수 있습니다. 

5.1 : Allure 에서 일반적으로 사용하는 몇 가지 기능

@allure.feature # 은 테스트 중인 제품의 요구 사항을 설명하는 데 사용됩니다.
@allure.story # 기능 의 사용자 시나리오 , 즉 테스트 요구 사항 을 설명 하는 데 사용됩니다.
with allure.step (): # 보고서에 출력될 테스트 단계를 설명하는 데 사용됩니다.
allure.attach # 테스트 보고서에 몇 가지 추가 정보를 입력하는 데 사용됩니다. 일반적으로 일부 테스트 데이터, 스크린샷 등 입니다.

5.1.1: allure.feature

@allure.feature # 은 테스트 중인 제품의 요구 사항을 설명하는 데 사용됩니다.

5.1.2:allure.story

@allure.story # 기능 의 사용자 시나리오 , 즉 테스트 요구 사항 을 설명 하는 데 사용됩니다.

사례

사용자 로그인 기능 구현, 시나리오는 로그인 성공 및 로그인 실패입니다.

 파이 테스트 얼루어 효과 전시

xml을 읽어 매력 보고서 생성

 개발 코드:

데이터 읽기:

 보고서 생성:

#xml文件
<ento>
    <add>
        <add1>1</add1>
        <add2>2</add2>
        <denyu>3</denyu>
    </add>
</ento>

#开发代码
class Clac():
    def add(self,a,b):
        return a + b

    def jian(self,a,b):
        return a - b

#读取数据
from xml.dom import minidom

class ReadXml():
    def readxml(self,path,firsthod,secondnode):
        root = minidom.parse(path)
        firsthod = root.getElementsByTagName(firsthod)[0]
        secondnode = firsthod.getElementsByTagName(secondnode)[0].firstChild.data

        return secondnode

#测试代码
from readdata.readxml import ReadXml  #获取数据
from assets.clac import Clac  #引入开发代码
import pytest,allure,os
readxmlclass = ReadXml()
c = Clac()
aa = int(readxmlclass.readxml("../data/test.xml","add","add1"))
bb = int(readxmlclass.readxml("../data/test.xml","add","add2"))
cc = int(readxmlclass.readxml("../data/test.xml","add","denyu"))

class TestClass():
    @allure.feature("加法判断功能") #用于定义被测试的功能,被测产品的需求点
    @allure.story("断言成功")       #用于定义被测功能的用户场景,即子功能点
    def test001(self):
        with allure.step("查看相加结果"):  #用于描述测试步骤,将会输出到报告中
            allure.attach("等于3","1加2")
        result =  c.add(int(aa),int(bb))
        assert result == int(cc)
    @allure.feature("等于判断功能")
    @allure.story("断言失败")
    def test002(self):
        assert 1==2

if __name__ == '__main__':
    pytest.main(['--alluredir', 'report/result', 'test_01.py'])  # 生成json类型的测试报告
    split = 'allure ' + 'generate ' + './report/result ' + '-o ' + './report/html ' + '--clean'  # 将测试报告转为html格式
    os.system(split)  # system函数可以将字符串转化成命令在服务器上运行

추천

출처blog.csdn.net/shitoureng/article/details/124276292