Unittest 框架
- 首先要知道这个框架是Python自带的, 不需要安装
- 这个框架最重要的4 个核心
- TestCase
- TestSuite
- TextTestRunner
- Fixture
TestCase
- 个人总结一下, 这个就是用测试用例继承的, 直接往下看吧
学测试先了解断言把
断言
概念:让程序代替人为判断测试程序执行结果是否符合预期结果的过程
断言分类
布尔型断言
比较断言
复杂断言
- 看完概念再看一下代码吧好了解一点
- 先写一个简单测试用例,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24import unittest
class TestAdd(unittest.TestCase):
def test_add(self):
a = 12
print("-------- test_add 测试用例-------")
b = 5
# assertEqual 这个方法验证arg1=arg2,不相等则fail(报错)
self.assertEqual(a+b, 17, msg="两个数相加,如果不相同会报错")
def test_sub(self):
print("-------- test_sub 测试用例-------")
a = 12
b = 5
# assertNotEqual 这个方法验证arg1=arg2,相等则fail(报错)
self.assertNotEqual(a+b, 17, msg="两个数相加, 如果等于17会报错")
"""
如果执行的时候,没有写main函数, 直接右键执行的时候记得把,鼠标的光标放到函数的外面,
如果是放到某个函数里只会执行光标所在的那个测试函数
"""
注意点: ==必须继承unittest.TestCase类, 测试用例的方法必须以 test 开头, 这点很重要==
还有一点就是执行的时候注意:
==如果执行的时候,没有写main函数, 直接右键执行的时候记得把,鼠标的光标放到函数的外面,
如果是放到某个函数里只会执行光标所在的那个测试函数==
- 这个测试用例只使用了两个布尔型断言,下面列出其他的布尔型断言,使用方法大致一样
断言方法 | 断言描述 |
---|---|
assertEqual(arg1, arg2, msg=None) | 验证arg1=arg2,不等则fail |
assertNotEqual(arg1, arg2, msg=None) | 验证arg1 != arg2, 相等则fail |
assertTrue(expr, msg=None) | 验证expr是true,如果为false,则fail |
assertFalse(expr,msg=None) | 验证expr是false,如果为true,则fail |
assertIsNone(expr, msg=None) | 验证expr是None,不是则fail |
assertIsNotNone(expr, msg=None) | 验证expr不是None,是则fail |
assertIn(arg1, arg2, msg=None) | 验证arg1是arg2的子串,不是则fail |
mag: 就是显示报错的描述
Fixture
- 这就是一个概述,对一个测试用例环境的搭建和销毁就是一个Fixture
- 不是很理解是吧, 直接看代码(个人觉得没必要理解这个名词,知道是干什么的就行)
- 把下面代码写入到 test_unittest.py文件下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40import unittest
class TestAdd(unittest.TestCase):
def setUp(self):
"""
方法名固定,在每个测试函数执行前,执行一次,多个测试函数,执行多次
一般做初始化工作, 比如: 实例化一个浏览器、浏览器最大化、隐式等待设置等需要提前的操作
:return:
"""
print("测试函数前执行")
def tearDown(self):
"""
方法名固定,在每个测试函数执行后,执行一次
一般做结束工作: 比如: 推出浏览器、关闭浏览器
:return:
"""
print("测试函数执行后 teardown")
def test_add(self):
a = 12
print("-------- test_add 测试用例-------")
b = 5
self.assertEqual(a+b, 17, msg="两个数相加,如果不相同会报错")
def test_sub(self):
print("-------- test_sub 测试用例-------")
a = 12
b = 5
self.assertNotEqual(a+b, 17, msg="两个数相加, 如果等于17会报错")
"""
使用主函数,调用unittest.main()方法直接执行改文件下的所有测试用例
"""
if __name__ == '__main__':
unittest.main()看到代码, 是不是多啦两个方法setUp(self) ,tearDown(self)
setUp、tearDown就是一个Fixture
下面讲述第三种执行的方法: 使用run文件执行
创建一个run_unittest.py 文件, 这个文件用来执行其它文件的测试用例
看代码:
1 | import unittest |
TestSuite 和 TextTestRunner
- 我是使用run 文件 写的, 创建一个执行文件, 话不多说, 直接看代码, 注释就是解释
1 | import unittest |
defaultTestLoader 使用
- 先说一下, 我的测试用例 和 执行文件是在一个目录下的, 直接看代码
1 |
|