python使用ddt过程中遇到的问题及解决方案【推荐】


Posted in Python onOctober 29, 2018

前言:

在使用DDT数据驱动+HTMLTestRunner输出测试报告时遇到过2个问题:

1、生成的测试报告中,用例名称后有dict() -> new empty dictionary

2、使用ddt生成的用例名称无法更改

python使用ddt过程中遇到的问题及解决方案【推荐】

1、用例名称后有dict() -> new empty dictionary

报告中用例名称后有dict() -> new empty dictionary,如图所示:

python使用ddt过程中遇到的问题及解决方案【推荐】

解决方案:这是ddt高版本1.2.0的bug

1、cmd先通过pip uninstall ddt 卸载ddt,

2、然后再安装一个低版本的ddt,命令pip install ddt==1.1.3

python使用ddt过程中遇到的问题及解决方案【推荐】

安装后再运行程序,结果如下

python使用ddt过程中遇到的问题及解决方案【推荐】

2、使用ddt生成的用例名称无法更改

如上图所示测试用例名称都是test_api_index,运行结果无法看出用例执行的是哪条数据,翻阅网上的资料找到一个比较好的方法,讲解比较详细,这段内容来自链接https://www.cnblogs.com/Simple-Small/p/9230382.html

ddt源码中有个函数用来生成用例名称, mk_test_name

它接收两个参数:name 和 value.

name:为测试用例的名字。即test_api.

value:为测试数据,ddt是处理一组测试数据。而这个value就是这一组数据中的每一个测试数据。

对value的值是有限制的:要么就是单值变量,要么就是元组或者列表并且要求元组和列表中的数据都是单值变量。如("name","port") 、["name","port"]

如果传进来的测试数据,不符合value的要求,那么测试用例名字为:name_index。

如果传进来的测试数据,符合value的要求,那么测试用例名字为:name_index_value。如果value为列表或者元组,那么将列表/元组的每个数据依次追加在末尾。

比如传进来的name值为test_login,value值为["name","port"]。那最终的测试用例名字是:test_login_01_name_port。

如果传进来的name值为test_login,value值为{"userName":"18500384561", "password":"123456"},那最终的测试用例名字为:test_login_1。 因为它不支持对字典类型的数据处理 。

而我的接口自动化框架中,ddt处理的数据是一列表:列表当中每个数据都为字典。ddt一遍历整个列表,那传给value的值刚好是字典。。

所以我得到的测试用例名称就是:test_login_1,test_login_2,test_login_3

python使用ddt过程中遇到的问题及解决方案【推荐】

为了让我的测试报告,呈现的更好。那就改改ddt源码,让它能够适应我的框架。

考虑两个问题:

1、不同接口的测试用例名字如何来??

2、如何让ddt支持对字典的处理??

解决方案:

第一个问题:每一个测试用例主动提供一个用例名字,说明你是什么接口的什么场景用例。比如:接口名_场景名。login_success、login_noPasswd、login_wrongPasswd等。

在我的框架当中,每一个测试用例是一个字典。那么我就在字典中添加一个键值对,case_name=用例名称

第二个问题:在ddt中添加对字典的处理,如果字典中有case_name字段,则将字典中键名为case_name的值作为测试用例名称中的value值。

修改后的ddt源码为(红色粗体部分为修改的内容):

python使用ddt过程中遇到的问题及解决方案【推荐】

更改代码后再执行,结果如下:

python使用ddt过程中遇到的问题及解决方案【推荐】

总结

以上所述是小编给大家介绍的python使用ddt过程中遇到的问题及解决方案,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python实现根据图标提取分类应用程序实例
Sep 28 Python
Python使用Paramiko模块编写脚本进行远程服务器操作
May 05 Python
Python实现excel转sqlite的方法
Jul 17 Python
python爬虫基本知识
Mar 05 Python
Python使用reportlab模块生成PDF格式的文档
Mar 11 Python
浅析Python 实现一个自动化翻译和替换的工具
Apr 14 Python
python3转换code128条形码的方法
Apr 17 Python
python中的colorlog库使用详解
Jul 05 Python
python字典的遍历3种方法详解
Aug 10 Python
pygame实现打字游戏
Feb 19 Python
PIL包中Image模块的convert()函数的具体使用
Feb 26 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
Nov 25 Python
Python 利用scrapy爬虫通过短短50行代码下载整站短视频
Oct 29 #Python
PyCharm设置护眼背景色的方法
Oct 29 #Python
pycharm恢复默认设置或者是替换pycharm的解释器实例
Oct 29 #Python
对Python subprocess.Popen子进程管道阻塞详解
Oct 29 #Python
[原创]Python入门教程1. 基本运算【四则运算、变量、math模块等】
Oct 28 #Python
pycharm 配置远程解释器的方法
Oct 28 #Python
解决每次打开pycharm直接进入项目的问题
Oct 28 #Python
You might like
php中计算时间差的几种方法
2009/12/31 PHP
php中计算程序运行时间的类代码
2012/11/03 PHP
php Xdebug的安装与使用详解
2013/06/20 PHP
PHP判断表单复选框选中状态完整例子
2014/06/24 PHP
PHP判断一个gif图片是否为动态图片的方法
2014/11/19 PHP
php中mysql操作buffer用法详解
2015/03/19 PHP
php提取微信账单的有效信息
2018/10/01 PHP
七种PHP开发环境搭建工具
2020/06/28 PHP
使用时间戳解决ie缓存的问题
2014/08/20 Javascript
JavaScript极简入门教程(三):数组
2014/10/25 Javascript
javascript实现点击按钮让DIV层弹性移动的方法
2015/02/24 Javascript
JavaScript对象属性检查、增加、删除、访问操作实例
2015/07/08 Javascript
JS 在数组指定位置插入/删除数据的方法
2017/01/12 Javascript
JavaScript函数节流的两种写法
2017/04/07 Javascript
详解Vue路由开启keep-alive时的注意点
2017/06/20 Javascript
详解a++和++a的区别
2017/08/30 Javascript
vue的toast弹窗组件实例详解
2018/05/14 Javascript
基于layui的下拉列表的数据回显方法
2019/09/24 Javascript
ElementUI多个子组件表单的校验管理实现
2019/11/07 Javascript
JS实现简单省市二级联动
2019/11/27 Javascript
在Python的Django框架中创建语言文件
2015/07/27 Python
Python聚类算法之凝聚层次聚类实例分析
2015/11/20 Python
python实现发送和获取手机短信验证码
2016/01/15 Python
Python使用defaultdict读取文件各列的方法
2017/05/11 Python
PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例
2019/02/13 Python
画pytorch模型图,以及参数计算的方法
2019/08/17 Python
小白教你PyCharm从下载到安装再到科学使用PyCharm2020最新激活码
2020/09/25 Python
基于Python爬取素材网站音频文件
2020/10/21 Python
Django celery异步任务实现代码示例
2020/11/26 Python
大韩航空官方网站:Korean Air
2017/10/25 全球购物
物业保安员岗位职责
2014/03/14 职场文书
学术会议主持词
2014/03/17 职场文书
员工安全承诺书
2014/05/22 职场文书
关于工作时间玩手机的检讨书
2014/09/18 职场文书
建议书格式
2015/02/04 职场文书
六年级作文之自救
2019/12/19 职场文书