如果你还想从头学起Pytest,可以看看这个系列的文章哦!

https://www.cnblogs.com/poloyy/category/1690628.html

前言

  • 参数化 @pytest.mark.parametrize 的学习:https://www.cnblogs.com/poloyy/p/12675457.html
  • 默认 allure 报告上的测试用例标题不设置默认就是用例名称,这样可读性不高
  • 结合 @pytest.mark.parametrize 参数化完成数据驱动时,如果标题写死,这样可读性也不高
  • 所以我们希望标题可以动态的生成,来看看如何做吧

参数化无标题的栗子

测试代码

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. """
  5. __title__ =
  6. __Time__ = 2020/10/28 15:08
  7. __Author__ = 小菠萝测试笔记
  8. __Blog__ = https://www.cnblogs.com/poloyy/
  9. """
  10. import allure
  11. import pytest
  12.  
  13. @pytest.fixture()
  14. def login(request):
  15. """登录"""
  16. param = request.param
  17. print(f"账号是:{param['username']},密码是:{param['pwd']}")
  18. # 返回
  19. return {"code": 0, "msg": "success!"}
  20.  
  21. datas = [
  22. {"username": "name1", "pwd": "pwd1"},
  23. {"username": "name2", "pwd": "pwd2"},
  24. {"username": "name3", "pwd": "pwd3"}
  25. ]
  26.  
  27. @allure.story('登录功能')
  28. @pytest.mark.parametrize('login', datas, indirect=True)
  29. def test_login1(login):
  30. """
  31. 登录测试用例1
  32. """
  33. assert login['code'] == 0

allure 报告

标题就是方法名+参数化的数据,看着可读性就不咋滴

参数化有标题写死的栗子

测试代码

将上面的测试代码添加一个 @allure.title 就可以了

  1. @allure.story('登录功能')
  2. @allure.title('登录测试用例2')
  3. @pytest.mark.parametrize('login', datas, indirect=True)
  4. def test_login2(login):
  5. """
  6. 登录测试用例2
  7. """
  8. assert login['code'] == 0

allure 报告

因为参数化可以生成三条用例,所以三条用例都用了同一个 title,可读性也不咋滴

参数化使用 ids 的栗子

测试代码

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. """
  5. __title__ =
  6. __Time__ = 2020/10/28 15:08
  7. __Author__ = 小菠萝测试笔记
  8. __Blog__ = https://www.cnblogs.com/poloyy/
  9. """
  10. import allure
  11. import pytest
  12.  
  13. @pytest.fixture()
  14. def login(request):
  15. """登录"""
  16. param = request.param
  17. print(f"账号是:{param['username']},密码是:{param['pwd']}")
  18. # 返回
  19. return {"code": 0, "msg": "success!"}
  20.  
  21. datas = [
  22. {"username": "name1", "pwd": "pwd1"},
  23. {"username": "name2", "pwd": "pwd2"},
  24. {"username": "name3", "pwd": "pwd3"}
  25. ]
  26.  
  27. ids = [
  28. "username is name1,pwd is pwd1",
  29. "username is name2,pwd is pwd2",
  30. "username is name3,pwd is pwd3"
  31. ]
  32.  
  33. @allure.story('登录功能')
  34. @pytest.mark.parametrize('login', datas, ids=ids, indirect=True)
  35. def test_login1(login):
  36. """
  37. 登录测试用例1
  38. """
  39. assert login['code'] == 0

allure 报告

参数化动态生成标题的栗子

测试代码

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. """
  5. __title__ =
  6. __Time__ = 2020/10/28 15:08
  7. __Author__ = 小菠萝测试笔记
  8. __Blog__ = https://www.cnblogs.com/poloyy/
  9. """
  10. import allure
  11. import pytest
  12.  
  13. @pytest.fixture()
  14. def login(request):
  15. """登录"""
  16. param = request.param
  17. print(f"账号是:{param['username']},密码是:{param['pwd']}")
  18. # 返回
  19. return {"code": 0, "msg": "success!"}
  20.  
  21. datas = [
  22. {"username": "name1", "pwd": "pwd1"},
  23. {"username": "name2", "pwd": "pwd2"},
  24. {"username": "name3", "pwd": "pwd3"}
  25. ]
  26.  
  27. data2 = [
  28. ("name1", "123456"),
  29. ("name2", "123456"),
  30. ("name3", "123456")
  31. ]
  32.  
  33. @allure.story('分别传值')
  34. @allure.title('登录测试用例2-账号是:{username}-密码是:{pwd}')
  35. @pytest.mark.parametrize('username,pwd', data2)
  36. def test_login1(username, pwd):
  37. """
  38. 登录测试用例1
  39. """
  40. print(username, pwd)
  41.  
  42. @allure.story('字典参数化')
  43. @allure.title('登录测试用例2-{dict}')
  44. @pytest.mark.parametrize('dict', datas)
  45. def test_login2(dict):
  46. """
  47. 登录测试用例1
  48. """
  49. print(dict['username'], dict['pwd'])
  50.  
  51. @allure.story('传值进fixture')
  52. @allure.title('登录测试用例2{login}')
  53. @pytest.mark.parametrize('login', datas, indirect=True)
  54. def test_login3(login):
  55. """
  56. 登录测试用例2
  57. """
  58. assert login['code'] == 0

allure 报告

传入的如果是一个字典则显示完整字典值

参数化动态生成标题最优方案的栗子

测试代码

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. """
  5. __title__ =
  6. __Time__ = 2020/10/28 15:08
  7. __Author__ = 小菠萝测试笔记
  8. __Blog__ = https://www.cnblogs.com/poloyy/
  9. """
  10. import allure
  11. import pytest
  12.  
  13. data = [
  14. ("name1", "123456", "name1 登录成功"),
  15. ("name2", "123456", "name2 登录失败"),
  16. ("name3", "123456", "name3 登录成功")
  17. ]
  18.  
  19. @allure.story('分别传值')
  20. @allure.title('登录测试用例-{title}')
  21. @pytest.mark.parametrize('username,pwd,title', data)
  22. def test_login1(username, pwd, title):
  23. """
  24. 登录测试用例1
  25. """
  26. print(username, pwd)

allure 报告

这种做法的优点

  • 可以自定义各式各样的标题
  • 单独一个值去维护标题值
  • 可读性比较好,容易维护

Pytest 系列(28)- 参数化 parametrize + @allure.title() 动态生成标题的更多相关文章

  1. Pytest 系列(29)- 详解 allure.dynamic 动态生成功能

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 @allure.title  ...

  2. Pytest系列(21)- allure的特性,@allure.description()、@allure.title()的详细使用

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 前面介绍了两种allure的 ...

  3. Pytest系列(20)- allure结合pytest,allure.step()、allure.attach的详细使用

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 allure除了支持pyte ...

  4. Pytest系列(22)- allure的特性,@allure.link()、@allure.issue()、@allure.testcase()的详细使用

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 上一篇文章介绍了两种allu ...

  5. Pytest系列(23)- allure打标记,@allure.feature()、@allure.story()、@allure.severity()的详细使用

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 前面几篇文章主要介绍了all ...

  6. Pytest 系列(27)- allure 命令行参数

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 先看看 allure 命令的帮助文 ...

  7. Pytest 系列(24)- allure 环境准备

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html allure 和 pytest 相 ...

  8. pytest文档8-参数化(parametrize)结合allure.title()生成不同标题报告

    参数化parametrize 先看一个简单的pytest参数化案例演示test_a.py # test_a.py import pytest import allure def login(usern ...

  9. C#动态生成html页

    Html生成模块:WriteHtml.cs using System.Collections.Generic; using System.IO; using System.Text; namespac ...

随机推荐

  1. Linux[Manjaro] 小新15笔记本AMD ryzen锐龙4800U,在安装系统后出现的随即死机冻屏问题

    Linux[Manjaro] 小新15AMD ryzen锐龙4800U,在安装系统后出现的随即死机冻屏问题解决办法 年初尝试将manjaro安装在我的笔记本上就存在这个问题,也一度将我劝退.系统安装在 ...

  2. 使用jwt来保护你的接口服务

    以前写过一篇关于接口服务规范的文章,原文在此,里面关于安全性问题重点讲述了通过appid,appkey,timestamp,nonce以及sign来获取token,使用token来保障接口服务的安全. ...

  3. Java面向对象15——内部类

    内部类(了解) 成员内部类  package oop.demon01.demon10; ​ public class Outer { ​     private int id = 10;     pu ...

  4. Http Request Smuggling - Note

    http请求走私漏洞 访问Burp靶场速度感人..都要哭了(如果没有账户的先创建账户) 基础补充 pipeline http1.1有了Pipeline,就不需要等待Server端的响应了.浏览器默认不 ...

  5. 全网最硬核Handler面试题深度解析

    1.简述Handler的实现原理 Android 应用是通过消息驱动运行的,在 Android 中一切皆消息,包括触摸事件,视图的绘制.显示和刷新等等都是消息.Handler 是消息机制的上层接口,平 ...

  6. JavaScript学习05(操作DOM)

    操作DOM DOM(文档对象模型) 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model). HTML DOM 模型被结构化为对象树: 通过这个对象模型,Java ...

  7. Apache网页优化与安全

    目录 一.Apache网页优化 1.1.概述 1.2.gzip介绍 1.3.Apache的压缩模块 二.网页压缩实验 2.1.检查是否安装mod_deflate模块 2.2.重新编译安装Apache添 ...

  8. 尝试通过 JDBC 将 UTF-8 插入 MySQL 时出现“乱码”

    这是我的连接设置方式: Connection conn = DriverManager.getConnection(url + dbName + "?useUnicode=true& ...

  9. 查看linux系统是物理机还是虚拟机

    物理机,返回机器型号 [root@laocalhost ~]# dmidecode -s system-product-name S910-X31E 虚拟机 [root@dev01-188 ~]# d ...

  10. 【微服务技术专题】Netflix动态化配置服务-微服务配置组件变色龙Archaius

    前提介绍 如果要设计开发一套微服务基础架构,参数化配置是一个非常重要的点,而Netflix也开源了一个叫变色龙Archaius的配置中心客户端,而且Archaius可以说是比其他客户端具备更多生产级特 ...