• <unittest学习4>跳过用例


    我们在做自动化测试的时候,可能会遇到一些用例中间不用回归,想要进行跳过。直接注释的话,代码量修改过大,显然这个方法不妥,哪还有什么方法?unittest这个自动化框架可以帮助我们完成这个操作

    自动跳过用例

    unittest中提供了一些跳过用例的装饰器方法。我们可以通过这些装饰器来帮我们完成这些操作

    @unittest.skip()

    表示:无条件跳过用例

    复制代码
    def skip(reason):
        """
       无条件地跳过用例
        """
        def decorator(test_item):
            if not isinstance(test_item, type):
                @functools.wraps(test_item)
                def skip_wrapper(*args, **kwargs):
                    raise SkipTest(reason)
                test_item = skip_wrapper
    
            test_item.__unittest_skip__ = True
            test_item.__unittest_skip_why__ = reason
            return test_item
        return decorator
    复制代码

    @unittest.skipIf()

    表示:如果条件为真,则跳过测试。

    复制代码
    def skipIf(condition, reason):
        """
        如果条件为真,则跳过测试。
        """
        if condition:
            return skip(reason)
        return _id
    复制代码

    @unittest.skipUnless()

    表示:除非条件为真,否则跳过测试。

    复制代码
    def skipUnless(condition, reason):
        """
       除非条件为真,否则跳过测试。
        """
        if not condition:
            return skip(reason)
        return _id
    复制代码

    小试牛刀

    闲话少说直接开始实战,这里我们一样使用接口完成我们的测试,当然接口文档,还是我们的查询歌曲接口(简单,免费,还好用)

    复制代码
    # coding:utf-8
    import unittest
    import requests
    
    class   Music(unittest.TestCase):
    
        def select(self,name):
            url = 'https://api.apiopen.top/searchMusic'
            data = {
                 "name":name
            }
            r = requests.post(url,data=data)
            b = r.json()['result'][0]['title']
            return b
    
        @unittest.skip("强制性跳过")
        def test01(self):
            b = '断桥残雪'
            a = self.select(b)
            self.assertEqual(b,a)
            print("用例1跳过")
    
        @unittest.skipIf(True ,'条件为真的时候跳过')
        def test02(self):
            a = '说好不哭'
            b = self.select(a)
            self.assertEqual(a,b)
            print("用例2跳过")
    
        @unittest.skipUnless(False ,'条件为假的时候跳过')
        def test03(self):
            a = '芒种'
            c = '抖音'
            b = self.select(a)
            try:
                self.assertIn(c,b,msg='
    抖音不存在芒种歌曲信息中')
            except Exception as msg:
                print('错误信息%s'%msg)
            print("用例3跳过")
    
        def test04(self):
            a = '像鱼'
            b = self.select(a)
            self.assertEqual(a,b)
            print("用例4不跳过")
    
    if __name__ == '__main__':
        unittest.main(verbosity=2)
    复制代码

    通过代码可以发现我们对用例123进行了跳过,但是每个跳过的条件不同,执行后发现只有用例4没有跳过,当然我们代码中也是只有对用例4没有跳过。

    也可以从执行结果中看到我们一共跳过了3条用例,以及每条都是怎么样进行跳过的

    有小伙伴们要问了,这个只是跳过单个用例,那么我想跳过一个class中的所有用例呢?这还不简单?直接把装饰器放在class上面不就可以了。

    复制代码
    # coding:utf-8
    import unittest
    import requests
    
    @unittest.skip('强制性跳过')
    class   Music(unittest.TestCase):
    
        def select(self,name):
            url = 'https://api.apiopen.top/searchMusic'
            data = {
                 "name":name
            }
            r = requests.post(url,data=data)
            b = r.json()['result'][0]['title']
            return b
    
        def test01(self):
            b = '断桥残雪'
            a = self.select(b)
            self.assertEqual(b,a)
            print("用例1跳过")
    
        def test02(self):
            a = '说好不哭'
            b = self.select(a)
            self.assertEqual(a,b)
            print("用例2跳过")
    
        def test03(self):
            a = '芒种'
            c = '抖音'
            b = self.select(a)
            try:
                self.assertIn(c,b,msg='
    抖音不存在芒种歌曲信息中')
            except Exception as msg:
                print('错误信息%s'%msg)
            print("用例3跳过")
    
        def test04(self):
            a = '像鱼'
            b = self.select(a)
            self.assertEqual(a,b)
            print("用例4不跳过")
    
    if __name__ == '__main__':  
        unittest.main(verbosity=2)
    复制代码

    通过执行结果发现已经把class中的四条用例全部都跳过了。

    声明 欢迎转载,但请保留文章原始出处:) 博客园:https://www.cnblogs.com/chenxiaomeng/ 如出现转载未声明 将追究法律责任~谢谢合作
  • 相关阅读:
    cocos2d-x 获得系统语言繁体
    状态机
    cocos2d-x 混合模式
    cocos2d-x 3.x 橡皮擦功能
    MySQL 库大小、表大小、索引大小查询命令
    MySQL批量杀进程
    多实例MySQL批量添加用户和密码并授权
    删除或清空具有外键约束的表数据报-ERROR 1701 (42000)
    ERROR 1062 (23000): Duplicate entry '0' for key 'PRIMARY'
    MySQL 多实例给root用户创建密码
  • 原文地址:https://www.cnblogs.com/chenxiaomeng/p/14832589.html
Copyright © 2020-2023  润新知