UnitTest 框架
作者:互联网
一、要素
TestCase:测试用例 TestSuite:测试套件(多条测试用例集合在一起) TestRunner:执行测试用例和测试套件 TestLoader:用来加载 TestCase 到 TestSuite 中,即加载满足条件的测试用例,并把测试用例封装成测试套件。 Fixture:对一个测试用例环境的初始化和销毁就是一个Fixture二、使用过程
定义测试用例:
1、导包:import unittest;
2、定义测试类:新建测试类必须继承 unittest.TestCase;
3、定义测试方法:测试方法名称命名必须以 test 开头;
4、调用 unittest.main() 执行测试用例 ;
集合测试用例:
1、实例化: suite = unittest.TestSuite()
(suite:为 TestSuite 实例化的名称)
2、添加用例:
方法1:suite.addTest(ClassName("MethodName"))
(ClassName:为类名;MethodName:为方法名)
方法2:suite.addTest(unittest.makeSuite(ClassName))
(搜索指定 ClassName 内 test 开头的方法并添加到测试套件中) 。
执行测试用例和测试套件:
1、实例化: runner = unittest.TextTestRunner()
2、执行: runner.run(suite) # suite:为测试套件名称
a.py
# 导包 import unittest # 定义测试类 class my_test01(unittest.TestCase): # 定义测试方法 def test_01(self): print("my_test01 的 test01") def test_02(self): print("my_test01 的 test02")
b.py
# 导包 import unittest # 定义测试类 class my_test02(unittest.TestCase): def test_01(self): print("my_test02 的 test01") def test_02(self): print("my_test02 的 test02")
c.py
import unittest import a import b # TestSuite实例化 suite = unittest.TestSuite() # 添加用例 # suite.addTest(ClassName("MethodName")) # 添加 my_test01 类中的test02方法 suite.addTest(a.my_test01("test_02")) # suite.addTest(unittest.makeSuite(ClassName)) # 添加 my_test02 类中所有 test 开头的方法 suite.addTest(unittest.makeSuite(b.my_test02)) # TextTestRunner实例化 runner = unittest.TextTestRunner() # 执行 runner.run(suite)
TestLoader:
用法:suite = unittest.TestLoader().discover(test_dir, pattern='test*.py')
test_dir: 为指定的测试用例的目录;
pattern:为查找的.py 文件的格式;
TestSuite与TestLoader区别:
1、TestSuite 需要手动添加测试用例(可以添加测试类,也可以添加测试类中某个测试方法); 2、TestLoader 搜索指定目录下指定开头.py 文件,并添加测试类中的所有的测试方法,不能指定添加测试方法;
三、Fixture
Fixture 是一个概述,对一个测试用例环境的初始化和销毁就是一个 Fixture 。
1、方法级别
初始化(前置处理): def setUp(self) --> 首先自动执行;
销毁(后置处理): def tearDown(self) --> 最后自动执行;
运行于测试方法的始末,即运行一次测试方法就会运行一次 setUp 和 tearDown
2、类级别
初始化(前置处理): @classmethod def setUpClass(cls): --> 首先自动执行
销毁(后置处理): @classmethod def tearDownClass(cls): --> 最后自动执行
运行于测试类的始末,即每个测试类只会运行一次 setUpClass 和tearDownClass
3、模块级别
初始化(前置处理): def setUpModule() --> 首先自动执行
销毁(后置处理): def tearDownModule() --> 最后自动执行
运行于整个模块的始末,即整个模块只会运行一次 setUpModule 和tearDownModule
四、断言
五、参数化
导包:from parameterized import parameterized;
使用@parameterized.expand 装饰器可以为测试函数的参数进行参数化;
方法一:
import unittest from parameterized import parameterized def my_sum(a, b): return a + b class my_test(unittest.TestCase): @parameterized.expand([(1, 2 ,3), (2, 3, 5), (2, 4, 6)]) def test_01(self, x, y, z): r = my_sum(x, y) self.assertEqual(r, z)
方法二:
import unittest from parameterized import parameterized def my_sum(a, b): return a + b # 构建测试数据 data = [(1, 1, 2), (1, 0, 1), (0, 0, 0)] class my_test(unittest.TestCase): @parameterized.expand(data) def test_01(self, x, y, z): r = my_sum(x, y) self.assertEqual(r, z)
方法三:
import unittest from parameterized import parameterized def my_sum(a, b): return a + b # 构建测试数据 def build_data(): return [(1, 2 ,3), (2, 3, 5), (2, 4, 6)] class my_test(unittest.TestCase): @parameterized.expand(build_data) def test_01(self, x, y, z): r = my_sum(x, y) self.assertEqual(r, z)
六、跳过
# 直接将测试函数标记成跳过 @unittest.skip('代码未完成') # 根据条件判断测试函数是否跳过 @unittest.skipIf(condition, reason)
七、生成HTML测试报告
1、TextTestRunner
1、导入unittest包;
2、生成测试套件 suite = unittest.TestLoader().discover("./", "test*.py") ;
3 、以只写方式打开测试报告文件f = open("test01.txt", "w",encoding="utf-8");
4、实例化 HTMLTestRunner 对象:runner = unittest.TextTestRunner(stream=f,verbosity=2)
参数说明:stream 为 open 函数打开的文件流;verbosity 为不同模板编号
5、执行:runner.run(suite);
6、关闭文件;
import unittest suite = unittest.TestLoader().discover("./", "test*.py") f = open("test01.txt", "w", encoding="utf-8") runner = unittest.TextTestRunner(stream=f, verbosity=2) runner.run(suite) f.close()
2、HTMLTestRunner
1、复制 HTMLTestRunner.py 文件到项目文件夹;
2、导入 HTMLTestRunner、unittest 包;
3、生成测试套件 suite = unittest.TestLoader().discover("./", "test*.py") ;
4、以只写方式打开测试报告文件 f = open("test01.html", "wb") ;
5、实例化 HTMLTestRunner 对象: runner = HTMLTestRunner(stream=f, title="自动化测试报告", description="Chrome 浏览器")
参数说明:stream:open 函数打开的文件流;title:[可选参数],为报告标题;description:[可选参数],为报告描述信息;比如操作系统、浏览器等版本;
6、执行:runner.run(suite);
7、关闭文件;
import unittest from HTMLTestRunner import HTMLTestRunner suite = unittest.TestLoader().discover("./", "test*.py") f = open("test01.html", "wb") runner = HTMLTestRunner(stream=f, title="自动化测试报告", description="Chrome 浏览器") runner.run(suite) f.close()
标签:框架,UnitTest,import,test,suite,my,unittest,def 来源: https://www.cnblogs.com/mtoy/p/16389908.html