
pytest文档39-参数化(parametrize)结合allure.title()生成不同标题报告
发布日期:2021-05-09 09:02:52
浏览次数:12
分类:博客文章
本文共 4256 字,大约阅读时间需要 14 分钟。
前言
pytest的参数化(parametrize)可以实现只需维护测试数据,就能生成不同的测试用例目的。可以在参数化的时候加 ids 参数对每个用例说明使用场景。
最终我们希望在 allure 报告上能详细的展示出每个用例的标题描述,这样才能更直观的知道每个用例是干什么的。参数化parametrize
先看一个简单的pytest参数化案例演示test_a.py
# test_a.pyimport pytestimport allure# 作者:上海-悠悠 QQ交流群:779429633def login(username, password): '''登录''' print("输入账号:%s" % username) print("输入密码:%s" % password) # 返回 return {"code": 0, "msg": "success!"}# 测试数据test_datas = [ ({"username": "yoyo1", "password": "123456"}, "success!"), ({"username": "yoyo2", "password": "123456"}, "failed!"), ({"username": "yoyo3", "password": "123456"}, "success!"),]@allure.story("登录用例")@pytest.mark.parametrize("test_input,expected", test_datas )def test_login(test_input, expected): '''测试登录用例''' # 获取函数返回结果 result = login(test_input["username"], test_input["password"]) # 断言 assert result["msg"] == expected
cmd命令行运行用例
> pytest --alluredir ./report test_a.py> allure serve ./report
生成报告
这样生成的报告在用例列表里面并不能很友好的展示出每个用例的执行场景,只知道哪个用例报错了。
于是需要对每个用例加上描述,加一个 ids 参数ids 参数使用
在上面用例部分代码里面加个 ids 参数,用于描述每个用例的运行场景。
# 作者:上海-悠悠 QQ交流群:779429633@allure.story("登录用例")@pytest.mark.parametrize("test_input,expected", test_datas, ids=[ "输入正确账号,密码,登录成功", "输入错误账号,密码,登录失败", "输入正确账号,密码,登录成功", ] )def test_login(test_input, expected): '''测试登录用例''' # 获取函数返回结果 result = login(test_input["username"], test_input["password"]) # 断言 assert result["msg"] == expected
cmd命令行运行用例
> pytest --alluredir ./report test_a.py> allure serve ./report
生成报告
allure.title描述用例
上面是通过在 parametrize 里面添加 ids 参数解决,接下来再讲一个用 allure.title("用例描述") 添加用例描述的方式解决。
使用 @allure.title("用例描述") 时,可以加上传入的参数,如传入的参数"test_input,expected"
,需拼接test_input参数的值,可以这样写 @allure.title("用例描述,测试输入:{test_input}")
在 allure_pytest/utils.py 源码里面可以找到对应的代码
# allure_pytest/utils.pydef allure_name(item, parameters): name = escape_name(item.name) title = allure_title(item) return title.format(**parameters) if title else name
当没有加allure.title()时候,用例的描述就是 item.name 值(也就是上面的 ids 用例的名称),
如果加了allure.title(),那么用例的描述就是添加的title值,这两个地方取其中的一个。import pytestimport allure# 作者:上海-悠悠 QQ交流群:779429633def login(username, password): '''登录''' print("输入账号:%s" % username) print("输入密码:%s" % password) # 返回 return {"code": 0, "msg": "success!"}# 测试数据test_datas = [ ({"username": "yoyo1", "password": "123456"}, "success!"), ({"username": "yoyo2", "password": "123456"}, "failed!"), ({"username": "yoyo3", "password": "123456"}, "success!"),]@allure.story("登录用例")@allure.title("用例描述,测试输入:{test_input}")@pytest.mark.parametrize("test_input,expected", test_datas, ids=[ "输入正确账号,密码,登录成功", "输入错误账号,密码,登录失败", "输入正确账号,密码,登录成功", ] )def test_login(test_input, expected): '''测试登录用例''' # 获取函数返回结果 result = login(test_input["username"], test_input["password"]) # 断言 assert result["msg"] == expected
cmd命令行运行用例
> pytest --alluredir ./report test_a.py> allure serve ./report
生成报告
优化用例title
结合上面两种实现方式,把用例描述当成一个测试输入的参数,继续优化后如下
需注意的是 parametrize 里面三个参数test_input,expected,title
跟 test_login(test_input, expected, title) 里面三个参数保持一致 import pytestimport allure# 作者:上海-悠悠 QQ交流群:779429633def login(username, password): '''登录''' print("输入账号:%s" % username) print("输入密码:%s" % password) # 返回 return {"code": 0, "msg": "success!"}# 测试数据test_datas = [ ({"username": "yoyo1", "password": "123456"}, "success!", "输入正确账号,密码,登录成功"), ({"username": "yoyo2", "password": "123456"}, "failed!", "输入错误账号,密码,登录失败"), ({"username": "yoyo3", "password": "123456"}, "success!", "输入正确账号,密码,登录成功"),]@allure.story("登录用例")@allure.title("{title}")@pytest.mark.parametrize("test_input,expected,title", test_datas )def test_login(test_input, expected, title): '''测试登录用例''' # 获取函数返回结果 result = login(test_input["username"], test_input["password"]) # 断言 assert result["msg"] == expected
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月07日 18时14分20秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
mybatis源码配置文件解析之五:解析mappers标签(解析class属性)
2021-05-09
json-lib的使用《二》
2021-05-09
LeetCode52题,别再问我N皇后问题了
2021-05-09
Swagger常用注解
2021-05-09
简单实用算法——字节位序反转
2021-05-09
webpack之带有可自动打开浏览器及热重载的基本配置
2021-05-09
前端的批量接口如何快速响应?有没有通用解决方案?
2021-05-09
Shader 入门笔记(一) 如何学习shader
2021-05-09
Huffman树及其编解码
2021-05-09
分布式、高并发、高性能场景(抢购、秒杀、抢票、限时竞答)数据一致性解决方案
2021-05-09
淘宝镜像
2021-05-09
微信小程序引用外部字体或者图标
2021-05-09
PLSQL数据导入导出问题解决(空表、大字段表、表空间错误等)
2021-05-09
解决eclipse导出javadoc时的“错误: 编码GBK的不可映射字符”问题
2021-05-09
Python算法_盛最多水的容器(04)
2021-05-09
20.波利亚过程
2021-05-09
04_Mysql配置文件(重要参数)
2021-05-09
Egret Engine(白鹭引擎)介绍及windows下安装
2021-05-09