标题
python pytest 测试实战(二)
大纲
-
数据驱动
-
Fixture 高级用法
-
pytest 插件应用
-
pytest hook 插件
-
Allure 生成测试报告
时长
90分钟
PPT
https://pdf.ceshiren.com/jy1/pytest2
数据驱动
fixture 的用法
pytest 第三方插件
pytest hook
# hook 函数 收集所有的用例并修改
# 在收集阶段去改变它的编码格式,默认的自动执行
def pytest_collection_modifyitems(session, config, items:list):
# print(items)
for item in items:
item.name = item.name.encode('utf-8').decode('unicode-escape')
item._nodeid = item.nodeid.encode('utf-8').decode('unicode-escape')
代码地址
课后作业
课后反馈
from test_pytest.pythoncode.calculator import Calculator
import logging
import pytest
import yaml
import allure
'''
课后作业:
1、改造 计算器 测试用例,使用 fixture 函数获取计算器的实例
2、计算之前打印开始计算,计算之后打印结束计算
3、添加用例日志,并将日志保存到日志文件目录下
4、生成测试报告,展示测试用例的标题,用例步骤,与测试日志,截图附到课程贴下
'''
def get_datas():
with open('../datas/calc.yml') as f:
datas = yaml.safe_load(f)
return datas
@allure.feature("计算器")
class TestCalc:
@allure.story("相加,正常的情况")
@pytest.mark.parametrize('a, b, expect', get_datas()['add']['datas'], ids= get_datas()['add']['ids'])
def test_add_normal(self, a, b, get_calc_object, expect):
#等号右侧是实际结果,左侧是预期结果
assert expect == get_calc_object.add(a, b)
@allure.story("相加,浮点数的情况")
def test_add_float(self, get_calc_object):
#浮点数
result = get_calc_object.add(0.1, 0.2)
assert 0.3 == round(result, 4)
@allure.story("相加,异常情况")
def test_add_error(self, get_calc_object):
#异常情况,预期异常,只有抛出异常,才是正常情况
with pytest.raises(TypeError):
result = get_calc_object.add('a', 1)
@allure.story("除法,正常的情况")
@pytest.mark.parametrize('a, b, expect', get_datas()['div']['datas'], ids = get_datas()['div']['ids'])
def test_div_normal(self, a, b, get_calc_object, expect):
#等号右侧是实际结果,左侧是预期结果
assert expect ==get_calc_object.div(a, b)
@allure.story("除法,浮点数的情况")
def test_div_float(self, get_calc_object):
#浮点数
result = get_calc_object.div(10, 3)
assert 3.333 == round(result, 3)
@allure.story("除法,异常情况")
def test_div_error(self, get_calc_object):
#异常情况,预期异常,只有抛出异常,才是正常情况
with pytest.raises(ZeroDivisionError):
result = get_calc_object.div(1, 0)