전제 조건:
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 는 한 번만 실행됩니다.
![](https://img-blog.csdnimg.cn/b40d30d8bd3548eba6fc43815bc2862c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5L2g6YGX5oa-5ZCX77yf,size_20,color_FFFFFF,t_70,g_se,x_16)
2: Pytest 는 자체 html 테스트 보고서 를 생성합니다.
전제 조건: pytest-html 모듈 (python 의 내장 테스트 보고서 모듈 ) 을 다운로드해야 합니다.
pip 설치 pytest-html
사례 번호 1
pytest.main("module.py ") [지정된 모듈 실행, 테스트로 시작하는 모든 클래스 및 테스트 케이스 실행]
보고서 생성
사례 2
지정된 모듈 지정 클래스 지정 유스 케이스 실행, 콜론 분할 및 테스트 보고서 생성
![](https://img-blog.csdnimg.cn/8dcb5a2cd5f549d99bb6813c869b87a8.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5L2g6YGX5oa-5ZCX77yf,size_20,color_FFFFFF,t_70,g_se,x_16)
출력 보고서:
사례 3:
pytest.main()
직접 실행 [ 현재 디렉토리 에서 test 로 시작 하는 파일 또는 test로 끝나는 py 파일을
자동으로 찾기
] (pytest_test )
![](https://img-blog.csdnimg.cn/95c39677bb6a419fb24d1805b999cb3a.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5L2g6YGX5oa-5ZCX77yf,size_20,color_FFFFFF,t_70,g_se,x_16)
보고서 생성:
파이테스트 호출문
출력 보고서:
-x 테스트 케이스가 실패하면 테스트를 종료합니다.
-s: 인쇄 내용 표시
확장: 건너뛰기
@pytest.mark.skip() 을
사용
하여 해당 사용 사례
(
function
) 를 건너뜁니다.
![](https://img-blog.csdnimg.cn/98dac90716eb496a883fdb911373d5ae.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5L2g6YGX5oa-5ZCX77yf,size_20,color_FFFFFF,t_70,g_se,x_16)
보고서 생성:
3: Pytest 작동 방식
.dot ,
사용 사례가 통과했음을 나타냅니다.
F
는
실패 를 의미합니다
E 는 사용 사례에
예외
오류 가 있음을 나타냅니다.
4: xml 파일 읽기
xml 파일
![](https://img-blog.csdnimg.cn/f54926de327a40a385fadb5cb637aae7.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5L2g6YGX5oa-5ZCX77yf,size_17,color_FFFFFF,t_70,g_se,x_16)
개발 코드 모듈:
데이터 모듈 읽기:
테스트 코드 모듈:
보고서 생성:
구현 코드:
#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
의 환경 변수를 구성합니다.
![](https://img-blog.csdnimg.cn/35eabb82c799470d849e290749318c29.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5L2g6YGX5oa-5ZCX77yf,size_20,color_FFFFFF,t_70,g_se,x_16)
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函数可以将字符串转化成命令在服务器上运行