zoukankan      html  css  js  c++  java
  • <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/ 如出现转载未声明 将追究法律责任~谢谢合作
  • 相关阅读:
    [No000037]操作系统Operating Systems操作系统历史与硬件概况History of OS & Summaries!
    [No000036]操作系统Operating Systems系统调用的实现System_Call
    [No000035]操作系统Operating System之OS Interface操作系统接口
    [No000034]知乎-长期接收碎片化知识有什么弊端?
    [No000033]码农网-如何锻炼出最牛程序员的编码套路
    [No000032]程序员的年龄天花板
    [No000031]操作系统 Operating Systems 之Open the OS!
    [No000030]程序员节发点别的:中国教育整个把人脑子搞坏了-易中天
    [No00002F]3步,教你如何分解需求
    [No00002E]关于大数据,你不知道的6个迷思
  • 原文地址:https://www.cnblogs.com/chenxiaomeng/p/14832527.html
Copyright © 2011-2022 走看看