unittest框架
Posted lctest
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unittest框架相关的知识,希望对你有一定的参考价值。
unittest框架
1、写用例:TestCase 类
2、加载用例:TestSuite 类 TestLoader 类
3、对比结果(执行结果/期望结果):assert函数
4、执行并出结果:TextTestRunner 类
5、报告:HtmlTestReport 类
1)首先建一个math_method.py文件,用来存在被测试函数
1 # 被测类函数 2 class MathMethod(): 3 4 def add(self, a, b): 5 return a + b 6 7 def sub(self, a, b): 8 return a - b
2)新建一个test_case1.py文件,用来存放测试用例代码
1 # from unittest.case import TestCase #在文件unittest文件下面case文件中存在TestCase模块 2 # class TestAdd(TestCase): 3 4 import unittest 5 from test_unittest.math_method import MathMethod # 导入被测试类 6 7 8 class TestAdd(unittest.TestCase): # 测试类 专门测试加法类 9 # 写用例 每一条用例都是一个类函数 10 # 用例 def test_后缀(self) :用例函数必须test开头 11 12 def setUp(self): # 测试环境的搭建 13 print("我要开始测试咯") 14 self.t = MathMethod() 15 16 def tearDown(self): # 测试环境的销毁 17 print("我测试完成咯") 18 19 def test_add_two_zero(self): # 测试两个零相加的用例 20 # t = MathMethod() # 创建实例 21 # res = t.add(0, 0) 22 23 res = self.t.add(0, 0) 24 # 断言函数的调用,注意:为啥用self,因为调用父类的方法 25 self.assertEqual(1, res) 26 print("测试的结果是:{0}".format(res)) 27 28 def test_add_two_positive(self): # 测试两个整数相加的用例 29 # t = MathMethod() # 创建实例 30 # res = t.add(4, 5) 31 32 res = self.t.add(4, 5) 33 print("测试的结果是:{0}".format(res)) 34 35 def test_add_two_negative(self): # 测试两个负数相加的用例 36 # t = MathMethod() # 创建实例 37 # res = t.add(-4, -5) 38 39 res = self.t.add(-4, -5) 40 print("测试的结果是:{0}".format(res)) 41 42 43 class TestSub(unittest.TestCase): # 测试类 专门测试减法 44 # 写用例 每一条用例都是一个类函数 45 # 用例 def test_后缀(self) :用例函数必须test开头 46 47 def test_sub_two_zero(self): # 测试两个零相减的用例 48 t = MathMethod() # 创建实例 49 res = t.sub(0, 0) 50 print("测试的结果是:{0}".format(res)) 51 52 def test_sub_two_positive(self): # 测试两个整数相减的用例 53 t = MathMethod() # 创建实例 54 res = t.sub(4, 5) 55 print("测试的结果是:{0}".format(res)) 56 57 def test_sub_two_negative(self): # 测试两个负数相减的用例 58 t = MathMethod() # 创建实例 59 res = t.sub(-4, -5) 60 print("测试的结果是:{0}".format(res)) 61 62 63 if __name__ == ‘__main__‘: 64 unittest.main()
3)新建一个test_suite.py文件,用来存放加载用例,执行用例,生成报告的代码
1 import unittest 2 from test_unittest.test_case1 import TestAdd # 测试类 3 from test_unittest.test_case1 import TestSub # 测试类 4 from test_unittest import test_case1 # 测试模块 5 import htmlTestRunnerNew # 生成html文件测试报告,这个文件放在lib文件里面 6 from test_unittest.test_case2 import TestAdd # 测试类 7 from test_unittest import test_case2 # 测试模块 8 from test_unittest.read_config import ReadConfig # 配置文件 9 10 from test_unittest.do_excel import DoExcel 11 12 # 加载测试用例 13 # suite:测试套件/测试用例的容器,这边suite是一个实例 14 suite = unittest.TestSuite() 15 16 # 怎么把测试用例放到测试套件suite里面去,以实例的形式添加进去 17 18 # # 方法一 19 # # suite.addTest()是suite实例调用父类的addTest的方法 20 # suite.addTest(TestAdd(-4, -5, 0, "test_add")) 21 # suite.addTest(TestAdd(‘test_add_two_positive‘)) #test_add_two_positive必须要加因为是父类的初始化参数 22 23 ## 优化测试数据,方法1:参数化-测试数据列出来 24 # test_data = [[0, 0, 0, ‘两个0相加‘], 25 # [1, 2, 3, ‘两个正数相加‘], 26 # [-1, -4, -5, ‘两个负数相加‘], 27 # [1, 0, 1, ‘一正一0相加‘], 28 # [-1, 0, -1, ‘一负一0相加‘]] 29 # for item in test_data: 30 # suite.addTest(TestAdd(item[0], item[1], item[2], item[3], ‘test_add‘)) 31 32 33 # # 优化测试数据,方法2:调用测试数据,列表嵌套列表形式 34 # test_data=DoExcel().do_excel() 35 # for item in test_data: 36 # suite.addTest(TestAdd(item[2], item[3], item[4], item[1], ‘test_add‘)) 37 38 39 # # 优化测试数据,方法3:调用测试数据,列表嵌套字典形式 40 # test_data=DoExcel().do_excel() 41 # for item in test_data: 42 # suite.addTest(TestAdd(item[‘Param_a‘], item[‘Param_b‘], item[‘ExceptedResult‘], item[‘title‘], ‘test_add‘)) 43 44 # # 优化测试数据,方法4:调用测试数据,列表嵌套字典形式,但是要写回测试结果 45 # test_data=DoExcel().do_excel() 46 # for item in test_data: 47 # suite.addTest(TestAdd(item[‘Param_a‘], item[‘Param_b‘], item[‘ExpectedResult‘], item[‘title‘], item[‘id‘] ,‘test_add‘)) 48 49 50 # # 优化测试数据,方法5:结合配置文件,执行测试用例 51 # test_data = DoExcel().do_excel() 52 # 53 # # 实例化,获取mode和case_id_list 54 # mode = ReadConfig().read_config("case.config", "FLAG", "mode") 55 # case_id_list = eval(ReadConfig().read_config("case.config", "FLAG", "case_id_list")) 56 # 57 # if mode == "on": 58 # final_data = test_data 59 # else: 60 # final_data = [] 61 # for item in test_data: 62 # if item[‘id‘] in case_id_list: 63 # final_data.append(item) 64 # 65 # for item in final_data: 66 # suite.addTest( 67 # TestAdd(item[‘Param_a‘], item[‘Param_b‘], item[‘ExpectedResult‘], item[‘title‘], item[‘id‘], ‘test_add‘)) 68 69 70 # 优化测试数据,方法6:结合配置文件,执行测试用例,判断放在读取文件中do_excel 71 # 实例化,获取mode和case_id_list 72 mode = ReadConfig().read_config("case.config", "FLAG", "mode") 73 case_id_list = eval(ReadConfig().read_config("case.config", "FLAG", "case_id_list")) 74 75 test_data = DoExcel().do_excel(mode, case_id_list) 76 77 for item in test_data: 78 suite.addTest( 79 TestAdd(item[‘Param_a‘], item[‘Param_b‘], item[‘ExpectedResult‘], item[‘title‘], item[‘id‘], ‘test_add‘)) 80 81 # 方法二 82 # loader = unittest.TestLoader() 83 # 直接加载某个测试类里面的所有用例 84 # suite.addTest(loader.loadTestsFromTestCase(TestAdd)) 85 # suite.addTest(loader.loadTestsFromTestCase(TestSub)) 86 87 # 直接加载某个测试模块里面的用例 88 # suite.addTest(loader.loadTestsFromModule(test_case2)) 89 90 # # 执行用例TextTestRunner 类 专门来执行suite测试套件里面的用例 91 # runner = unittest.TextTestRunner() # 实例化 92 # # 使用实例化的run方法 93 # runner.run(suite) 94 95 96 # # 使用TextTestRunner可执行用例并且返回结果,优化生成txt格式报告 97 # with open("test_result.txt", ‘w+‘, encoding="utf-8") as f: 98 # runer = unittest.TextTestRunner(f, verbosity=2) 99 # runer.run(suite) 100 101 102 # 使用HTMLTestRunnerNew生成html格式的测试报告 103 # 优化生成html格式报告 使用二进制形式写入,不支持utf-8格式,故不需要写 104 with open(‘test_result.html‘, "wb+") as f: 105 runer = HTMLTestRunnerNew.HTMLTestRunner(f, verbosity=2, title="测试报告", description=None, tester="xxx") 106 runer.run(suite)
备注:
执行结果,如果鼠标放在某一个测试用例函数后面则只执行这个用例;若放在最后一行测试用例的下面则执行所有测试用例
执行结果顺序按照函数名ASCII码排序A-Z,0-9 test_add_two_negative test_add_two_positive test_add_two_zero
使用main函数则也是执行整个所有用例
以上是关于unittest框架的主要内容,如果未能解决你的问题,请参考以下文章