unittestreport之unittest用例失败重运行机制

前言

很多小伙伴一直在诟病unittest,说unittest相对pytest来说太鸡肋了,pytest中提供了很多高级功能unittest中都没有。在这里还是想为unittest打抱不平一下,unittest是一个官方库,是由python官方维护的,官方库都是比较轻量级的,本身只实现核心的一些功能,肯定不会像pytest这些第三库一样根据需求,去开发一些定制的功能。其实unittest也有自己的优势,学习成本低,使用起来简单也易上手。目前还是有很多测试的小伙伴在使用的,于是前段时间小编想了想,决定在unittest的基础上扩展开发第三方库unittestreport,为unittest开发一些常用的扩展功能,来弥补unittest的不足。目前准备实现的功能有:多种风格HTML测试报告生成、多线程运行、用例失败重跑、数据驱动、命令行启动执行测试等功能(ps:大家可以可以留言提需求哦)

前段开发出来unittestreport的第一个版本,解决unittest多线程运行用例,以及unittest生成HTML测试报告这两个功能。小伙伴们如果想使用unittest生成测试报告,以及多线程去执行unittest的测试用例可以参考之前发布的关于unittestreport使用的文章。

最近这几天又优化了unittestreport的一个版本,实现了unittest用例失败重运行的机制,那么接下来就给大家介绍一下如何使用,以及实现的原理

 

一、unittest用例重运行

关于unittest重运行机制,unittestreport中提供了两种方式,第一种局部生效的,可以自己去标记失败需要重运行的测试用例,第二种是全局的,所有的测试用例,只要运行失败都会重运行。那么接下来一个一个给大家介绍。

单个用例重运行

  • 如果像标记单个测试用例失败重运行,库用直接使用unittestreport中的rerun来标记测试用例,rerun接收两个参数count,和interval。

    • count:用来指定用例失败重运行的次数

    • interval:指定每次重运行的时间间隔

  • 下面有三个测试用例,其中有一个test_case_01使用了rerun进行了标记,设置的失败重运行次数为4次,每次间隔的时间2秒。

import unittest
from unittestreport import rerun
​
class TestClass(unittest.TestCase):
    @rerun(count=4, interval=2)
    def test_case_01(self):
        a = 100
        b = 99
        assert a == b
        
    def test_case_02(self):
        a = 100
        b = 100
        assert a == b
        
    def test_case_03(self):
        a = 100
        b = 101
        assert a == b
  • 运行上述用例

    import unittest
    from unittestreport import TestRunner
    from testcase import TestClass  # 导入上面写的测试用例类
    # 加载测试套件
    suite = unittest.defaultTestLoader.loadTestsFromTestCase(TestClass)
    # 执行测试用例
    runner = TestRunner(suite=suite)
    runner.run()
  • 生成测试报告如下图,库用看到第一条测试用例运行了三次:

 

全部用例失败重跑机制

  • 关于所有的测试用例失败重跑,unittestreport中提供了一个更为简单的使用入口,直接使用unittestreport中TestRunner对象的rerun_run方法即可实现所有的用例失败重运行,rerun_run同样有两个参数,count和interval。

    • count:用来指定用例失败重运行的次数

    • interval:指定每次重运行的时间间隔

  • 测试用例如下:

    import unittest
    from unittestreport import rerun
    ​
    class TestClass(unittest.TestCase):
        def test_case_01(self):
            a = 100
            b = 99
            assert a == b 
            
        def test_case_02(self):
            a = 100
            b = 100
            assert a == b
  • 使用unittestreport的重运行机制,运行上述用例

    import unittest
    from unittestreport import TestRunner
    from testcase import TestClass  # 导入测试用例类
    # 测试套件
    suite = unittest.defaultTestLoader.loadTestsFromTestCase(TestClass)
    # 创建执行对象
    runner = TestRunner(suite=suite)
    # 执行测试用例,失败重运行设置为3次,间隔时间为2秒
    runner.rerun_run(count=3, interval=2)
  • 执行测试报告如下图,可以看到两个失败的用例,都重复运行了三次:

     

 

 

 

 

 

 

 

 

 

 

 

 

原文地址:https://www.cnblogs.com/nmb-musen/p/13597181.html