简介
在测试用例中, 执行完测试用例后, 最后一步是判断测试结果是 pass 还是 fail, 自动化测试脚本里面一般把这种生成测试结果的方法称为断言 (assert). 用 unittest 组件测试用例的时候, 断言的方法还是很多的, 下面介绍几种常用的断
言方法: assertEqual,assertIn,assertTrue. 想了解更多可以点击 传送门 看一下最后的小结有大致介绍.
unittest 断言计划是分上, 中, 下三篇有简单到复杂的给小伙伴们介绍一下, 填补一下这部分的空白.
基本断言方法
基本的断言方法提供了测试结果是 True 还是 False. 所有的断言方法都有一个 msg 参数, 如果指定 msg 参数的值, 则将该信息作为失败的错误信息返回.
序号 | 断言方法 | 断言描述 |
---|---|---|
1 | assertEqual(arg1, arg2, msg=None) | 验证 arg1=arg2,不等则 fail |
2 | assertNotEqual(arg1, arg2, msg=None) | 验证 arg1 != arg2, 相等则 fail |
3 | assertTrue(expr, msg=None) | 验证 expr 是 true,如果为 false,则 fail |
4 | assertFalse(expr,msg=None) | 验证 expr 是 false,如果为 true,则 fail |
5 | assertIs(arg1, arg2, msg=None) | 验证 arg1、arg2 是同一个对象,不是则 fail |
6 | assertIsNot(arg1, arg2, msg=None) | 验证 arg1、arg2 不是同一个对象,是则 fail |
7 | assertIsNone(expr, msg=None) | 验证 expr 是 None,不是则 fail |
8 | assertIsNotNone(expr, msg=None) | 验证 expr 不是 None,是则 fail |
9 | assertIn(arg1, arg2, msg=None) | 验证 arg1 是 arg2 的子串,不是则 fail |
10 | assertNotIn(arg1, arg2, msg=None) | 验证 arg1 不是 arg2 的子串,是则 fail |
11 | assertIsInstance(obj, cls, msg=None) | 验证 obj 是 cls 的实例,不是则 fail |
12 | assertNotIsInstance(obj, cls, msg=None) | 验证 obj 不是 cls 的实例,是则 fail |
简单的 case
1, 实例, 写了四个测试用例, 其中第四个是失败的
2, 运行结果 (python3)
python2
3, 在 python2 中执行的结果, 中文编码不对, 没正常显示中文, 遇到这种情况, 可以自定义异常输出, python3 正常. 有时候也可以根据实际需要采用自定义异常输出, 要灵活掌握.
参考代码
- # coding=utf-8
- #1. 先设置编码, utf-8 可支持中英文, 如上, 一般放在第一行
- #2. 注释: 包括记录创建时间, 创建人, 项目名称.
- '''
- Created on 2019-4-25
- @author: 北京 - 宏哥
- Project: 学习和使用 unittest 框架编写断言
- '''
- #3. 导入 unittest 模块
- import unittest
- #4. 编写测试用例和断言
- class Test(unittest.TestCase):
- def test01(self):
- '''判断 a == b'''
- a = 1
- b = 1
- self.assertEqual(a, b)
- def test02(self):
- '''判断 a in b'''
- a = "hello hongge"
- b = "hello hongge and world!"
- self.assertIn(a, b)
- def test03(self):
- '''判断 a is True'''
- a = True
- self.assertTrue(a)
- def test04(self):
- '''失败案例'''
- a = "北京 - 宏哥"
- b = "hongge"
- self.assertEqual(a, b)
- if __name__ == "__main__":
- unittest.main()
自定义异常输出
1, 以 assertEqual 为例分析, 在 pycharm 中通过 ctrl(command)+左键我们可以定位到方法的位置:
python3
python2
2,python2 翻译: 如果两个对象不能相等, 就返回失败, 相当于 return: first==second
python3 如果你断言的 语句正确 则什么反应都没有, 但是如果你出错之后 就会报出 AssertionError 并且错误可以自己填写.
3, 这里除了相比较的两个参数 first 和 second, 还有第三个参数 msg=None, 这个 msg 参数就是遇到异常后自定义输出信息
4, 参考代码
- # coding=utf-8
- #1. 先设置编码, utf-8 可支持中英文, 如上, 一般放在第一行
- #2. 注释: 包括记录创建时间, 创建人, 项目名称.
- '''
- Created on 2019-4-25
- @author: 北京 - 宏哥
- Project: 学习和使用 unittest 框架编写断言
- '''
- #3. 导入 unittest 模块
- import unittest
- #4. 编写测试用例和断言
- class Test(unittest.TestCase):
- def test01(self):
- '''判断 a == b'''
- a = 1
- b = 1
- self.assertEqual(a, b)
- def test02(self):
- '''判断 a in b'''
- a = "hello hongge"
- b = "hello hongge and world!"
- self.assertIn(a, b)
- def test03(self):
- '''判断 a is True'''
- a = True
- self.assertTrue(a)
- def test04(self):
- '''失败案例'''
- a = "北京 - 宏哥"
- b = "hongge"
- self.assertEqual(a, b,msg='失败原因: %s!=%s'%(a,b))
- if __name__ == "__main__":
- unittest.main()
小结
unittest 断言开篇就介绍这里, 另外大家也不要纠结 python2 或者 python3, 建议小伙伴们使用 python3, 因为 python2 到 2020 年官方就好像不会维护了!!!
来源: https://www.cnblogs.com/du-hong/p/10755859.html