- TestCase
- TestSuite
- TextTestRunner
- Fixture
学测试先了解断言把
概念:让程序代替人为判断测试程序执行结果是否符合预期结果的过程
断言分类
布尔型断言
比较断言
复杂断言
import 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: 就是显示报错的描述
import 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 文件, 这个文件用来执行其它文件的测试用例
看代码:
import unittest
# 直接导入刚才写好的测试类
from test_unittest import TestAdd
"""
使用run文件执行unittest 文件时, 可以直接导入
这时 unittest 会自动查找导入问价中类去执行
但是文件的开头以test 文件的类和函数也必须以test开头
"""
if __name__ == '__main__':
unittest.main()
才疏学浅, 感谢观看
个人博客
import unittest
from test_unittest import TestAdd
"""
使用run文件执行unittest 文件时, 可以直接导入
这时 unittest 会自动查找导入问价中类去执行
但是文件的开头以test 文件的类和函数也必须以test开头
"""
if __name__ == '__main__':
"""
TestSuite 可以把这个方法看成一个测试集合
"""
# 先创建一个 TestSuite 的实例化对象
suite = unittest.TestSuite()
# 然后在使用 addTest方法把写好的测试用例放到这个对象里
# suite.addTest(测试类名("方法名")) # 单个添加
# suite.addTests([测试类名("方法名"),测试类名("方法名"),...]) # 批量添加
suite.addTest(TestAdd("test_add"))
"""
TextTestRunner 有创建测试集合的方法,肯定就有执行测试集合的方法
TextTestRunner 就是用来执行测试集合的
"""
# 先实例化一个执行集合的 TextTestRunner对象
runner = unittest.TextTestRunner()
# 然后执行: 执行对象.run(测试集对象)
runner.run(suite)
import unittest
"""
使用run文件执行unittest 文件时, 可以直接导入
这时 unittest 会自动查找导入问价中类去执行
但是文件的开头以test 文件的类和函数也必须以test开头
"""
if __name__ == '__main__':
"""
defaultTestLoader
使用unittest.defaultTestLoader()类, 这个类的作用就是,调用这个类的discover()方法, 搜索指定目录下指定开头的.py文件,
并将搜索到的测试用例组装成一个测试集合, 听上去是不是和 TestSuite 的作用差不多
"""
# 先确定一个要搜索的路径
test_dir = "./"
# 然后创建集合对象
dis = unittest.defaultTestLoader.discover(test_dir, pattern='test_*.py')
# 然后使用 TextTestRunner 运行这个测试集合
runner = unittest.TextTestRunner()
runner.run(dis)
才疏学浅, 感谢观看
个人博客