UnitTestreport之UnitTest用例失败重运行机制

前言

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

  • unittestreport的安装:pip install unittestreport

前段时间实现了第一个版本,unittest生成HTML测试报告,以及unittest用例多线程运行机制,最近这几天又优化了unittestreport的一个版本(1.0.9版本),实现了unittest用例失败重运行的机制,那么接下来就给大家介绍一下如何使用unittest用例失败重运行机制。

一、unittest用例重运行

关于unittest重运行机制,我unittestreport中提供了两种方式,第一种选择单个测试用例实现重运行,可以自己去标记失败需要重运行的测试用例,第二种是针对运行的所有的测试用例,只要运行失败的用例就会重运行改用例。那么接下来分别给大家介绍这两个功能的使用。

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

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

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

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

 

importunittestfromunittestreportimportrerun
classTestClass(unittest.TestCase):@rerun(count=4,interval=2)deftest_case_01(self):a=100b=99asserta==b  
deftest_case_02(self):a=100b=100asserta==b  
deftest_case_03(self):a=100b=101asserta==b
  • 运行上述用例

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

 

全部用例失败重跑机制

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

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

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

测试用例如下:

importunittestfromunittestreportimportrerun
classTestClass(unittest.TestCase):deftest_case_01(self):a=100b=99asserta==b
deftest_case_02(self):a=100b=100asserta==b
  • 使用unittestreport的重运行机制,运行上述用例

    importunittestfromunittestreportimportTestRunnerfromtestcaseimportTestClass# 导入测试用例类
    # 测试套件suite=unittest.defaultTestLoader.loadTestsFromTestCase(TestClass)# 创建执行对象runner=TestRunner(suite=suite)# 执行测试用例,失败重运行设置为3次,间隔时间为2秒runner.rerun_run(count=3,interval=2)

  • 执行测试报告如下图,可以看到两个失败的用例,都重复运行了三次:

  • 关于unittestreport重运行用例,就给大家介绍到这里。

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

 

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

 

  • 21
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在编写测试用例时,有时候我们会遇到一些无法执行的情况,比如某些测试用例需要依赖于外部环境或者数据,而这些依赖项可能并不是每次都可用。这时候,我们可以使用 `@unittest.skip(reason)` 或 `@unittest.skipIf(condition, reason)` 或 `@unittest.skipUnless(condition, reason)` 装饰器来跳过这些测试用例。 - `@unittest.skip(reason)`:无条件跳过该测试用例; - `@unittest.skipIf(condition, reason)`:当 `condition` 为 `True` 时跳过该测试用例; - `@unittest.skipUnless(condition, reason)`:当 `condition` 为 `False` 时跳过该测试用例。 其中,`reason` 参数是可选的,表示跳过测试用例的原因,会在测试报告中显示。下面是一个示例: ```python import unittest class MyTestCase(unittest.TestCase): def test_something(self): # 这个测试用例会被跳过,原因是不依赖于某些必要的外部条件 self.skipTest("Not implemented yet") @unittest.skip("demonstrating skipping") def test_nothing(self): # 这个测试用例会被无条件跳过 self.fail("shouldn't happen") @unittest.skipIf(True, "skipping due to condition") def test_skip_if(self): # 当条件为 True 时,这个测试用例会被跳过 self.assertEqual(1 + 1, 3) @unittest.skipUnless(False, "skipping unless condition is False") def test_skip_unless(self): # 当条件为 False 时,这个测试用例会被跳过 self.assertEqual(2 * 2, 5) ``` 在上面的例子中,`test_something` 测试用例使用了 `self.skipTest` 方法来无条件跳过该测试用例;`test_nothing` 测试用例使用了 `@unittest.skip` 装饰器来无条件跳过该测试用例;`test_skip_if` 测试用例使用了 `@unittest.skipIf` 装饰器,当条件为 `True` 时跳过该测试用例;`test_skip_unless` 测试用例使用了 `@unittest.skipUnless` 装饰器,当条件为 `False` 时跳过该测试用例

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值