• <unittest学习3>断言


     在unittest单元测试中也提供了断言的方式,通过断言判断用例有没有成功。

    unittest常用断言

    unittest框架的TestCase类提供以下方法用于测试结果的判断

    方法 检查
    assertEqual(a, b) a ==b
    assertNotEqual(a, b) a !=b
    assertTrue(x) bool(x) is True
    assertFalse(x) Bool(x) is False
    assertIs(a, b) a is b
    assertIsNot(a, b) a is not b
    assertIsNone(x) x is None
    assertIsNotNone(x) x is not None
    assertIn(a, b) a in b
    assertNotIn(a, b) a not in b
    assertIsInstance(a, b) isinstance(a,b)
    assertNotIsInstance(a, b) not isinstance(a,b)

    举例说明

    列举了上面的方法其中3个,然后观察可以看出来其中前2条用例断言是正确的,但是最后一个是断言失败的用例

    复制代码
    # coding:utf-8
    import unittest
    
    class Test(unittest.TestCase):
        def test01(self):
            '''
            判断 a = b
            '''
            a = '111'
            b = '111'
            self.assertEqual(a,b)
    
        def test02(self):
            '''
            a 存在 b 之中
            '''
            a = '安静'
            b = '测试-安静'
            self.assertIn(a,b)
    
        def test03(self):
            '''
            失败用例
            '''
            a = '安静'
            b = '测试-安静'
            self.assertNotIn(a,b)
    
    if __name__ == '__main__':
        unittest.main()
    复制代码

    通过执行后我们看下结果提示2个通过,1个是失败的,失败的原因也打印出来了

     

    有的小伙伴们肯定会说,这个报错看不懂,那么能有更清楚的报错吗?当然了。unittest这里提供了我们自己进行设置报错信息

    自定义报错信息

    我们直接在断言的后面添加想要的报错信息

    复制代码
    def test03(self):
            '''
            失败用例
            '''
            a = '安静'
            b = '测试-安静'
            self.assertNotIn(a,b,msg='报错原因,%s没有包含%s'%(a,b))
    复制代码

    通过执行后,我们在看下报错的信息,这次就很明错了。

    小试牛刀

    通过request+unittest完成我们的简单接口自动化

    接口信息

    接口:https://api.apiopen.top/searchMusic
    
    参数:name:歌曲名称

    按照上面的接口信息,简单的写了几个用例。可能有的小伙伴们就怕执行后报错,那我们就通过try把错误异常捕捉。(这里没有具体的完善代码格式哈)

    这里接口返回的内容可以通过json格式转换,让我们更加清楚的去寻找我们想要的数据

    复制代码
    # coding:utf-8
    import unittest
    import requests
    class   Music(unittest.TestCase):
        def test01(self):
    
            url = 'https://api.apiopen.top/searchMusic'
            data = {
                "name":"断桥残雪"
            }
            r = requests.post(url,data=data)
            b = r.json()['result'][0]['title']
            a = '断桥残雪'
            self.assertEqual(a,b)
            print('第一个用例通过')
    
        def test02(self):
    
            url = 'https://api.apiopen.top/searchMusic'
            data = {
                "name":"说好不哭"
            }
            r = requests.post(url,data=data)
            a = '周杰伦'
            b = r.text
            self.assertIn(a,b)
            print('第二个用例通过')
    
        def test03(self):
    
            url = 'https://api.apiopen.top/searchMusic'
            data = {
                "name":"芒种"
            }
            r = requests.post(url,data=data)
            a = '抖音'
            b = r.text
            try:
                self.assertIn(a,b,msg='
    抖音不存在芒种歌曲信息中')
            except Exception as msg:
                print('错误信息%s'%msg)
            print('第三个用例失败')
    if __name__ == '__main__':
        unittest.main()
    复制代码

    话不多说,我们直接执行。可以看到前面2个已经全部通过了,但是最后一个用例失败了,失败的原因也打印出来了。

    我们会发现上面的代码有很多重复的地方,大家可以尝试解决代码重复性的问题哈,

    声明 欢迎转载,但请保留文章原始出处:) 博客园:https://www.cnblogs.com/chenxiaomeng/ 如出现转载未声明 将追究法律责任~谢谢合作
  • 相关阅读:
    Linux内核网络协议栈优化总纲
    Java实现 蓝桥杯VIP 算法训练 连续正整数的和
    Java实现 蓝桥杯VIP 算法训练 连续正整数的和
    Java实现 蓝桥杯VIP 算法训练 寂寞的数
    Java实现 蓝桥杯VIP 算法训练 寂寞的数
    Java实现 蓝桥杯VIP 算法训练 学做菜
    Java实现 蓝桥杯VIP 算法训练 学做菜
    Java实现 蓝桥杯VIP 算法训练 判断字符位置
    Java实现 蓝桥杯VIP 算法训练 判断字符位置
    Java实现 蓝桥杯VIP 算法训练 链表数据求和操作
  • 原文地址:https://www.cnblogs.com/chenxiaomeng/p/14832527.html
Copyright © 2020-2023  润新知