用例失败自动重新运行一直困扰着诸多测试人员,在网上找寻了半天一直也没有找到一个能够完美解决的方案,普遍都存在最后一个用例失败后会再次重新运行整个suite并在报告中显示多个相同的失败用例的情况。笔者为了解决该问题兼职煞费苦心,终于,黄天不负有心人,通过不懈努力和不断的调试终于在此基础上完美解决了该问题,并整合两次运行结果将最贴近的结果整合到报告中,现将代码贴出与大家分享,若有不完善之处还多体谅。 ### Python + Unittest 失败重试解决方案 在软件测试领域,尤其是自动化测试过程中,测试用例偶尔会遇到失败的情况。对于这种情况,一种常见的需求是让失败的测试用例能够自动重新运行一次或多次,以确保测试结果的准确性。然而,在实际操作中,这种失败重试机制往往会导致一些额外的问题,比如重复运行整个测试套件(test suite),或者在测试报告中出现多个相同的失败用例等。本文旨在分享一种改进的方法,用于解决Python + unittest框架下的失败重试问题,并提供代码示例。 #### 问题背景 在进行自动化测试时,可能会遇到以下问题: - 当某个测试用例失败时,需要能够自动重新运行这个失败的用例。 - 期望避免整个测试套件的重复运行,以提高测试效率。 - 需要在最终的测试报告中只保留最后一次的运行结果,即使进行了多次重试。 #### 解决方案概述 为了解决上述问题,本方案采用了以下策略: 1. 在unittest的`run`方法中加入逻辑,用于控制失败重试。 2. 设置失败重试标志、重试次数以及重试之间的间隔时间。 3. 修改原有的`run`方法实现,使其能够在测试用例失败时自动触发重试机制。 4. 在重试过程中,如果用例仍然失败,则根据预设的最大重试次数决定是否继续重试。 5. 整合两次运行的结果,仅保留最新的测试结果用于生成测试报告。 #### 具体实现细节 以下是具体的实现步骤: **步骤一:修改unittest的run方法** 我们需要定位到unittest的`run`方法,并对其进行修改。这里主要是在`suite.py`文件中的`run`方法内添加新的逻辑来支持失败重试功能。关键代码如下所示: ```python # 是否开启失败重跑 FAILURE_REPEAT_RUN_FLAG = True # 失败重跑尝试次数 FAILURE_REPEAT_RUN_NUM = 1 # 设置重跑时间间隔 REPEAT_TIME_INTERVAL = 4 def run(self, result, debug=False): failcount = self.FAILURE_REPEAT_RUN_NUM # 失败重新运行次数 class_num = 1 res = None topLevel = False if getattr(result, '_testRunEntered', False) is False: result._testRunEntered = topLevel = True for test in self: cass_num = 1 if result.shouldStop: break success_flag = True while success_flag: if _isnotsuite(test): self._tearDownPreviousClass(test, result) self._handleModuleFixture(test, result) self._handleClassSetUp(test, result) result._previousTestClass = test.__class__ if (getattr(test.__class__, '_classSetupFailed', False) or getattr(result, '_moduleSetUpFailed', False)): if class_num > failcount: success_flag = False else: time.sleep(self.REPEAT_TIME_INTERVAL) result._previousTestClass = None print(f'类{test.__class__}第{class_num}次重新初始化执行') class_num += 1 continue if not debug: test(result) else: test.debug() skipped = [error[0] for error in result.skipped] try: code = result.result[-1][0] if code != 0 and self.FAILURE_REPEAT_RUN_FLAG: # 结果为fail ``` **步骤二:处理失败重试** 接下来,需要在上述代码的基础上处理失败重试的过程。这包括检查是否达到最大重试次数、设置重试间隔时间等。例如,如果某个测试用例首次运行失败,那么将会根据设置的参数进行重试。如果重试次数达到上限后仍未能成功,则不再继续重试。 **步骤三:报告整合** 最后一步是整合两次运行的结果。这意味着,即使测试用例被重试了多次,最终的测试报告中也只会展示最后一次的运行结果。这是通过调整`result`对象的处理方式来实现的,确保报告中只包含最新的测试结果。 #### 总结 通过上述方法,我们成功地实现了Python + unittest框架下的失败重试机制,并解决了常见的重复运行和测试报告冗余问题。这种方法不仅提高了自动化测试的效率,还提升了测试结果的准确性。当然,针对不同的项目需求,可能还需要对以上代码进行适当的调整和优化。希望这篇文档能为正在面临类似挑战的测试人员提供帮助。

































- 粉丝: 141
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 单片机信号发生器设计及仿真.doc
- 电子商务专业自评分析报告(专业刨析材料).doc
- 软件工程考试题含答案.doc
- 高中数学-第四章-导数及其应用-4.2-导数的运算-4.2.3-导数的运算法则-湘教版选修2.ppt
- 计算机软件中的插件技术及应用.docx
- 虚拟技术在计算机实验机房建设中的应用.docx
- 关于网络环境下信息技术课堂教学模式的探究.docx
- 计算机网络实验报告.doc
- 职称计算机考试基础知识章节试题及答案.doc
- PLC简单应用(1).doc
- 堆栈队列字符串匹配相关算法实现.doc
- JAVAME大学本科方案设计书天气预报.doc
- PLC在机器人喷涂生产线控制中的应用.doc
- 论社会保险基金财务会计的信息化.docx
- Access2010数据库-模块与VBA程序设计(详解)演示文稿.pptx
- JSP网上拍卖系统设计方案与实现.doc


