断言

 在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条用例断言是正确的,但是最后一个是断言失败的用例

<unittest学习3>断言
# 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()
<unittest学习3>断言

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

<unittest学习3>断言 

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

自定义报错信息

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

<unittest学习3>断言
def test03(self):
        '''
        失败用例
        '''
        a = '安静'
        b = '测试-安静'
        self.assertNotIn(a,b,msg='报错原因,%s没有包含%s'%(a,b))
<unittest学习3>断言

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

<unittest学习3>断言

小试牛刀

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

接口信息

接口:https://api.apiopen.top/searchMusic

参数:name:歌曲名称

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

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

<unittest学习3>断言
# 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='\n抖音不存在芒种歌曲信息中')
        except Exception as msg:
            print('错误信息%s'%msg)
        print('第三个用例失败')
if __name__ == '__main__':
    unittest.main()
<unittest学习3>断言

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

<unittest学习3>断言

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

 

上一篇:PyCharm 执行unittest不生成测试结果问题解决


下一篇:unittest的封装方法