Python unittest: 失败用例自动重跑与报告整合
需积分: 50 36 浏览量
更新于2024-09-06
4
收藏 41KB DOCX 举报
"Python+unittest框架在自动化测试中遇到的一个常见问题是,当测试用例失败时,如何自动重新运行这些失败的用例,而避免重复运行整个测试套件。这个问题通常会导致报告中出现多个相同的失败用例记录。作者经过深入研究和不断尝试,找到了一种解决方案,实现了失败用例的重新运行,并且能够有效地整合两次运行的结果,提供了一个更精确的测试报告。此解决方案涉及到对unittest框架源码的二次重构,特别是修改了`suite.py`中的`run`方法,以支持失败重试功能并覆盖原有报告。"
在unittest框架中,`run`方法是执行测试的核心部分。默认情况下,当一个测试失败,unittest并不会自动重试失败的用例。为了实现这个功能,我们需要自定义`run`方法,添加一个判断来检查是否开启失败重试(`FAILURE_REPEAT_RUN_FLAG`)。如果开启,那么在遇到失败的用例时,不应立即停止,而是应该记录下这个失败,然后继续执行其他用例。当所有用例执行完毕后,回溯并重新运行那些失败的用例。
以下是可能的重构代码示例:
```python
def run(self, result, debug=False):
topLevel = False
if getattr(result, '_testRunEntered', False) is False:
result._testRunEntered = topLevel = True
failed_tests = []
for index, test in enumerate(self):
if result.shouldStop:
break
# ... (省略其他代码)
if not debug:
try:
test(result)
except Exception as e:
failed_tests.append((test, e))
if FAILURE_REPEAT_RUN_FLAG:
continue
else:
raise e
# ... (省略其他代码)
# 如果开启失败重试,重新运行失败的用例
if FAILURE_REPEAT_RUN_FLAG and failed_tests:
for test, exception in failed_tests:
test(result)
# ... (省略其他代码)
```
在这个修改后的`run`方法中,我们首先存储了失败用例的信息,然后在所有用例执行完毕后,对失败用例进行重试。同时,为了防止报告中出现重复的失败记录,我们需要在重新运行失败用例时,正确地更新和整合测试结果。这可能涉及到对结果对象`result`的处理,例如覆盖原有的错误和失败信息,或者在报告中明确区分第一次和第二次运行的结果。
在整合报告方面,可以创建一个新的报告类,用于合并原始结果和重试后的结果,确保报告既包含了完整的测试覆盖,又突出了最新的测试状态。这可能涉及到对unittest的`TestResult`类进行扩展,添加新的方法和属性来处理失败重试的特殊情况。
这个解决方案不仅解决了unittest框架内单个失败用例的重试问题,而且通过定制化报告,提高了测试报告的准确性和可读性。对于进行自动化测试的开发人员和测试工程师来说,这是一个非常实用的功能增强。
2020-12-25 上传
2023-05-16 上传
2023-06-09 上传
2023-05-18 上传
2023-05-18 上传
2023-06-24 上传
2023-03-30 上传
孩儿她们爹
- 粉丝: 138
- 资源: 5
最新资源
- 毕业设计&课设--扶贫助农管理系统-毕业设计.zip
- 3d-nii-visualizer:使用VTK和Qt5的NIfTI(nii.gz)3D可视化工具
- GoogleIntegratedSystemConky:适用于Linux用户的带有Google Keep,Google日历,系统信息和Lua时钟的Conky配置
- Qaccidentmap
- Excel模板企业付款申请单支付申请单模板.zip
- snake-test
- 毕业设计&课设--东北大学本科毕业设计 论文latex模板 .zip
- custom_timechart
- weather_app:天气应用程序,它使用openweathermap.org中的数据提供基于城市或美国邮政编码的天气状况和天气预报
- Reviewable:支持可审核
- 毕业设计&课设--大四毕业设计做的基于树莓派的人脸识别系统(调用百度云api).zip
- takimApp
- Excel模板创意进销存.zip
- bemaker:WELL项目建设者
- 编码教程:来自我的Twitch流和YouTube视频的一系列编码教程
- Operating-Systems-One:操作系统