Python DDT数据驱动测试中用例命名异常与字典参数处理的解决方案

纸上星河
纸上星河
发布时间:2026-10-13| 4人浏览过
原创

本文针对Python使用DDT结合HTMLTestRunner生成测试报告时遇到的两个核心问题提供解决方案:一是高版本DDT(1.2.0)导致用例名称后显示“dict() -> new empty dictionary”的Bug,通过降级至1.1.3版本解决;二是DDT默认不支持字典类型测试数据导致用例名无法自定义,通过修改mk_test_name源码逻辑,增加对字典中case_name字段的解析支持,实现清晰的用例命名。

前言

在结合DDT数据驱动框架与HTMLTestRunner生成测试报告的过程中,可能会遇到以下两个典型问题:

1、生成的测试报告中,用例名称后附带了“dict() -> new empty dictionary”字样。

2、使用DDT生成的用例名称无法按照预期进行自定义修改。

问题一:用例名称后出现“dict() -> new empty dictionary”

在生成的测试报告中,可以看到用例名称后面跟着“dict() -> new empty dictionary”,具体表现如图所示:

解决方案:这是DDT高版本(1.2.0)中存在的一个已知Bug。

解决方法如下:首先在命令行中通过pip uninstall ddt命令卸载当前安装的DDT库。

接着,安装一个较低版本的DDT,执行命令pip install ddt==1.1.3。

安装指定版本后重新运行程序,生成的测试报告结果如下图所示。

问题二:使用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处理的数据是一个列表,列表中每个元素均为字典。当DDT遍历该列表时,传给value的值恰好是字典对象。

因此,我得到的测试用例名称仅为:test_login_1、test_login_2、test_login_3,缺乏具体业务含义。

为了使测试报告呈现更加清晰友好,需要对DDT源码进行修改,使其适应我的框架需求。

主要考虑以下两个问题:

1、不同接口的测试用例名称应如何生成?

2、如何让DDT支持对字典类型数据的处理?

解决方案如下:

针对第一个问题:每个测试用例主动提供一个用例名称,说明该用例属于哪个接口的哪个场景。例如:login_success、login_noPasswd、login_wrongPasswd等。

在我的框架中,每个测试用例是一个字典。因此,我在字典中添加了一个键值对:case_name=用例名称。

针对第二个问题:在DDT源码中添加对字典的处理逻辑。如果字典中包含case_name字段,则将该字段对应的值作为测试用例名称中的value部分。

修改后的DDT源码如下(红色粗体部分为新增或修改的内容):

更改代码后再次执行,测试结果如下图所示。

总结

以上介绍了在Python使用DDT过程中遇到的常见问题及其解决方案,希望对大家有所帮助。如有任何疑问,欢迎留言,小编会及时回复。在此感谢大家对本站的支持!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。