python pytest单元测试
python pytest+allure
1.准备工作
pip install pystest
如果使用pytest-html生成html报告的话,还需要下载
pip install pytest-html
2. pytest的命名规则
- pytest单元测试中的类名和方法名必须是以test开头,执行中只能找到test开头的类和方法,比unittest更加严谨。
- pytest的模块命名必须以test_开头或者结尾,否则不能找到该模块的测试用例。
3. pytest与unittest的相同点
- unittest :Setup>> setupclass , teardown >> teardownclass
- Pytest: setup, setup_class和teardown, teardown_class函数(和unittest执行效果一样)
- 运行于测试方法的始末,即:运行一次测试函数会运行一次setup和teardown
- 运行于测试方法的始末,但是不管有多少测试函数都只执行一次setup_class和 teardown_class
4. pytest利用自带的pytest-html生成报告。
pytest.main(["--html=./report.html","模块.py"])
5. allure 的使用
-
Allure 是一款轻量级并且非常灵活的开源测试报告框架。它支持绝大多数测试框架。
-
使用步骤:
1.首先配置allure的环境变量。 命令行窗口输入allure查看是否安装成功。
2.其次要安装allure
pip install allure-pytest
allure-pytest是Pytest的一个插件,通过它我们可以生成Allure所需要的用于生成测试报告的数据
6.案例演示
题目描述:测试开发的两个方法,一个相加,一个相减,数据分别存储在.csv和.xml文件中,结合使用pytest和
allure展示测试报告,(在@allure .story分别实现相加减)
# 文件夹解释
datas:存放数据文件
demos:存放开发写的文档文件
pytest01:存放测试代码,此案例只使用test_03.py
readdatas:读取数据的代码文件夹
代码如下:
# datas/data.xml
<?xml version="1.0" encoding="UTF-8" ?>
<note>
<add>
<add1>2</add1>
<add2>5</add2>
<add3>7</add3>
</add>
<reduce>
<reduce1>8</reduce1>
<reduce2>5</reduce2>
<reduce3>3</reduce3>
</reduce>
</note>
# datas/data.csv
2,5,7
#demos/classes.py
class BaseClass(object):
def add(self, a, b):
c = a + b
return c
def reduce(self, a, b):
c = a - b
return c
#readdatas/readdatacsv.py
import csv # 导入csv模块
class ReadCsv():
def read_csv(self):
item = [] # 定义一个空列表
c = csv.reader(open("../datas/datas.csv", "r")) # 得到csv文件对象
for csv_i in c:
item.append(csv_i) # 将获取的数据添加到列表中
return item
r = ReadCsv()
print(r.read_csv())
#readdatas/readdataxml.py
from xml.dom import minidom
class Readxml():
def read_xml(self, filename, onename, twoname):
root = minidom.parse(filename)
firstnode = root.getElementsByTagName(onename)[0]
secondnode = firstnode.getElementsByTagName(twoname)[0].firstChild.data
return secondnode
# readxml = Readxml()
# a = readxml.read_xml("../datas/data.xml", "add", "add1")
# print(a)
# pytest01/test_03.py
import pytest, os, allure
from demos.classes import BaseClass
from readdatas.readdatacsv import ReadCsv
from readdatas.readdataxml import Readxml
base = BaseClass() # 导入开发的模块
csv = ReadCsv()
datac = csv.read_csv() # 拿到csv数据 利用csv拿到两数相加的数据
xml = Readxml()
class TestClass():
@allure.story("两数相加")
def test001(self):
# 两数相加测试 利用csv拿数据
for i in datac:
c = base.add(int(i[0]), int(i[1]))
assert c == int(i[2])
@allure.story("两数相减")
def test002(self):
# 两数相减测试,利用xml拿数据
zz = int(xml.read_xml("../datas/data.xml", "reduce", "reduce1")) # 拿到xml数据, 利用xml拿到两数相减的数据
xx = int(xml.read_xml("../datas/data.xml", "reduce", "reduce2"))
yy = int(xml.read_xml("../datas/data.xml", "reduce", "reduce3"))
rr = base.reduce(zz, xx)
assert rr == yy
if __name__ == '__main__':
pytest.main(['--alluredir', 'report/result', 'test_03.py']) # 生成json类型的测试报告
split = 'allure ' + 'generate ' + './report/result ' + '-o ' + './report/html ' + '--clean' # 将测试报告转为html格式
os.system(split) # system函数可以将字符串转化成命令在服务器上运行
然后点击运行。找到report/html下的.html文件打开查看报告。