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
View Code

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()
View Code

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)
View Code

 

备注:

执行结果,如果鼠标放在某一个测试用例函数后面则只执行这个用例;若放在最后一行测试用例的下面则执行所有测试用例
执行结果顺序按照函数名ASCII码排序A-Z,0-9 test_add_two_negative test_add_two_positive test_add_two_zero
使用main函数则也是执行整个所有用例

以上是关于unittest框架的主要内容,如果未能解决你的问题,请参考以下文章

Python接口测试之unittest框架

python 单元测试,unittest 测试框架

unittest单元测试框架

单元测试框架之unittest

单元测试框架之unittest

python unittest框架装饰器