前言

至于什么是ddt这个可以参考我之前写的博客内容,使用ddt框架的时候,有个问题困扰我很久了,一直没得到解决(也有很大小伙伴问过我,没解决抱歉了!)

这个问题就是:如何使用ddt框架时,生成的html报告里面注释能对每个用例传入不同的说明?默认是固定写死的内容。

最近刚好看到关于python的docstring【python笔记30-docstring注释添加变量】(https://www.cnblogs.com/yoyoketang/p/9719147.html)相关知识,ddt源码也读了几次,也思考了很多办法去给docstring传入变量内容,甚至使用装饰器(decorator)都未能成功。一次偶然机会,代码删了一半,运行成功了,算是机缘巧合吧,然后灵光一闪打通了任督二脉!

遇到问题

首先说下之前使用ddt框架遗留的老问题

  • 第一个问题是当测试用例数量大于10的时候,排序会是test_1,test_10, test_11,test_12, test_2, test_3, test_4这种

    这个问题最近的ddt版本已经解决了
  • 第二个问题是使用最新版本(Version: 1.2.0)生成html报告的时候出现dict() -> new empty dictionary dict(mapping)

    这个问题是最新版的一个bug,解决办法安装1.1.2版本即可【python笔记31-使用ddt报告出现dict() -> new empty dictionary dict(mapping) 问题解决】
  • 第三个问题是生成的html报告的注释内容是写死的,不能根据用例动态传入

我们希望每个用例能动态传入一个参数到html报告里

报告注释传变量

给docstring传一个变量进去,代码很简单,但是不容易想到,格式参考:"""上海-悠悠:{0}"""

注意是三个双引号,变量用{0}表示参数内容

  1. import unittest
  2. import ddt
  3. # 测试数据
  4. datas = [ {"user": "admin", "psw": "123", "result": "true"},
  5. {"user": "admin1", "psw": "1234", "result": "true"},
  6. {"user": "admin2", "psw": "1234", "result": "true"},
  7. {"user": "admin3", "psw": "1234", "result": "true"},
  8. {"user": "admin4", "psw": "1234", "result": "true"},
  9. {"user": "admin5", "psw": "1234", "result": "true"},
  10. {"user": "admin6", "psw": "1234", "result": "true"},
  11. {"user": "admin7", "psw": "1234", "result": "true"},
  12. {"user": "admin8", "psw": "1234", "result": "true"},
  13. {"user": "admin9", "psw": "1234", "result": "true"},
  14. {"user": "admin10", "psw": "1234", "result": "true"},
  15. {"user": "admin11", "psw": "1234", "result": "true"}]
  16. @ddt.ddt
  17. class Test(unittest.TestCase):
  18. @ddt.data(*datas)
  19. def test_(self, d):
  20. """上海-悠悠:{0}"""
  21. print("测试数据:%s" % d)
  22. if __name__ == "__main__":
  23. unittest.main()

这样就能把测试数据传入过来了

用例多个参数

上面那个案例是把测试数据放到字典里,用例里面穿一个d参数,需要的数据从字典里面去取

实际上也可以给用例传多个参数,每组数据写到一个元祖里,用装饰器@ddt.upack解析出来

  1. import unittest
  2. import ddt
  3. # 测试数据
  4. # datas = [ {"user": "admin", "psw": "123", "result": "true"},
  5. # {"user": "admin1", "psw": "1234", "result": "true"},
  6. # {"user": "admin2", "psw": "1234", "result": "true"},
  7. # {"user": "admin3", "psw": "1234", "result": "true"},
  8. # {"user": "admin4", "psw": "1234", "result": "true"},
  9. # {"user": "admin5", "psw": "1234", "result": "true"},
  10. # {"user": "admin6", "psw": "1234", "result": "true"},
  11. # {"user": "admin7", "psw": "1234", "result": "true"},
  12. # {"user": "admin8", "psw": "1234", "result": "true"},
  13. # {"user": "admin9", "psw": "1234", "result": "true"},
  14. # {"user": "admin10", "psw": "1234", "result": "true"},
  15. # {"user": "admin11", "psw": "1234", "result": "true"}]
  16. datas =[("admin", "123", "true", "用例1描述"),
  17. ("admin1", "123", "true", "用例2描述"),
  18. ("admin2", "123", "true", "用例3描述"),
  19. ("admin3", "123", "true", "用例4描述"),
  20. ("admin4", "123", "true", "用例5描述"),
  21. ("admin5", "123", "true", "用例6描述"),
  22. ]
  23. @ddt.ddt
  24. class Test(unittest.TestCase):
  25. @ddt.data(*datas)
  26. @ddt.unpack
  27. def test_(self, d1, d2, d3, d4):
  28. """上海-悠悠:{3}"""
  29. print("测试数据:%s" % d1)
  30. print("测试数据:%s" % d2)
  31. print("测试数据:%s" % d3)
  32. print("测试数据:%s" % d4)
  33. if __name__ == "__main__":
  34. unittest.main()

备注:使用unpack的时候,报告里面的备注会自动带上参数:_admin____123____true____用例1描述 ,这点比较蛋疼了,还是建议用上面那个方法,参数放字典吧

转载注明出处,谢谢各位了!作者:上海-悠悠,python自动化交流 QQ群:779429633

python笔记32-ddt框架优化(生成html报告注释内容传变量)的更多相关文章

  1. ddt框架优化(生成html报告注释内容传变量)

    https://blog.csdn.net/weixin_33923148/article/details/86017742 按要求修改后发现  注释只传值第一个变量 这是因为 ddt数据驱动生成ht ...

  2. 22.python笔记之web框架

    一.web框架本质 1.基于socket,自己处理请求 #!/usr/bin/env python3 #coding:utf8 import socket def handle_request(cli ...

  3. python笔记40-环境迁移freeze生成requirements.txt

    前言 我们用python在本地电脑上开发完成一个python自动化项目用例,或者开发完成一个django项目. 需要部署到另外一台电脑或者服务器上的时候,需要导入python相关的依赖包,可以用fre ...

  4. python笔记(三)---文件读写、修改文件内容、处理json、函数

    文件读写(一) #r 只读,打开文件不存在的话,会报错 #w 只写,会清空原来文件的内容 #a 追加写,不会请求,打开的文件不存在的话,也会帮你新建的一个文件 print(f.read()) #获取到 ...

  5. [java学习笔记]java语言基础概述之标识符&关键字&注释&常量和变量

    一.标识符 在程序中自定义的一些名称 由26个英文字母的大小写,数字,_$组成 定义合法标识符的规则: 不能以数字开头 不能使用关键字 java严格区分大小写 注意:在起名字时,为了提高阅读性,必须得 ...

  6. Selenium 4 Python的最佳测试框架

    随着Python语言的使用越来越流行,基于Python的测试自动化框架也越来越流行.在项目选择最佳框架时,开发人员和测试人员会有些无法下手.做出选择是应该判断很多事情,框架的脚本质量,测试用例的简单性 ...

  7. python笔记41-虚拟环境virtualenv

    前言 如果你是一个python初学者,我是不建议你搞python虚拟环境的,我看到很多python的初学者同学,使用最新版的pycharm,新建一个工程时候默认就是venu虚拟环境. 然后在使用cmd ...

  8. python+requests+excel+unittest+ddt接口自动化数据驱动并生成html报告

    1.环境准备: python3.6 requests xlrd openpyxl HTMLTestRunner_api 2.目前实现的功能: 封装requests请求方法 在excel填写接口请求参数 ...

  9. python+requests+excel+unittest+ddt接口自动化数据驱动并生成html报告(二)

    可以参考 python+requests接口自动化完整项目设计源码(一)https://www.cnblogs.com/111testing/p/9612671.html 原文地址https://ww ...

随机推荐

  1. html-注册邮箱

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. QT STUDY

  3. 洛谷P3265 [JLOI2015]装备购买 [线性基]

    题目传送门 装备购买 格式难调,题面就不放了. 分析: 一句话,有$n$件物品,每件物品有$m$个属性和一个花费值,如果一个装备的属性值可以由其他装备的属性值改变系数后组合得到那就不买,求购买最多装备 ...

  4. Bazel

    Using Bazel on Windows Google软件构建工具Bazel FAQ

  5. Bzoj1018/洛谷P4246 [SHOI2008]堵塞的交通(线段树分治+并查集)

    题面 Bzoj 洛谷 题解 考虑用并查集维护图的连通性,接着用线段树分治对每个修改进行分治. 具体来说,就是用一个时间轴表示图的状态,用线段树维护,对于一条边,我们判断如果他的存在时间正好在这个区间内 ...

  6. (三)宏 __cplusplus C/C++混合编程

    前面一些篇目的内容作为一个在校生,很少用到,可能工作的人会见得多一点,但是第一次整体性的学习还是不希望有落下的东西,虽然不常用但至少要有个印象 那么就进入第三篇<宏 __cplusplus> ...

  7. [leetcode greedy]455. Assign Cookies

    Assume you are an awesome parent and want to give your children some cookies. But, you should give e ...

  8. 【Codeforces 498B】 B. Name That Tune (概率DP)

    B. Name That Tune time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  9. 最短网络Agri-Net

    [问题描述] 农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场.当然,他需要你的帮助.约翰已经给他的农场安排了一条高速的网络线路,他想把这条线路共享给其他农场. ...

  10. BZOJ 4213 贪吃蛇 上下界费用流 网络流

    https://darkbzoj.cf/problem/4213 https://www.cnblogs.com/DaD3zZ-Beyonder/p/5733326.html 题目描述 dbzoj又崩 ...