python使用笔记28--unittest单元测试框架

单元测试:开发程序的人自己测试自己的代码

unittest自动化测试框架

1、单元测试

unittest框架,执行的顺序是按照方法名的字母来排序的

setUpClass方法是最开始执行的

tearDownClass是最后执行的

setUp方法是在每个方法执行前执行的

tearDown方法是在每个方法执行后执行的

 1 import unittest
 2 def add(a,b):
 3     return a+b
 4 
 5 #运行的顺序是按照方法名的字母排序的
 6 class AddTest(unittest.TestCase):#继承unittest
 7     def setUp(self):#在每个方法前执行
 8         print('我是set up方法')
 9 
10     def tearDown(self):#在每个方法后执行
11         print('我是tearDown方法')
12 
13     @classmethod
14     def setUpClass(cls):#最先开始执行的
15         print('我是setupclass方法')
16 
17     @classmethod
18     def tearDownClass(cls):#最后执行的
19         print('我是tearDownclass方法')
20 
21     def test_add_normal(self):
22         print('add_normal')
23         result = add(1,4)
24         self.assertEqual(5,result)#预期结果,实际结果
25 
26     def test_add_error(self):
27         print('add_error')
28         result = add(1,1)
29         yq=1
30         self.assertEqual(yq,result,'add测试结果不通过,预计结果为%s,实际结果为%s'%(yq,result))
31 
32     def test_a(self):
33         print('a')
34 
35     def test_b(self):
36         print('b')
37 
38 unittest.main()#运行当前python文件中的所用用例

2、产生测试报告

2.1 HTMLTestRunner

下载HTMLTestRunner.py放到python的环境变量里

 1 import unittest
 2 import HTMLTestRunner
 3 import nnreport
 4 
 5 class TestLogin(unittest.TestCase):
 6     def test_login_normal(self):
 7         '''正常登录'''
 8         self.assertEqual(1,1)
 9     def test_login_black_list(self):
10         '''黑名单用户登录'''
11         self.assertTrue(False,'黑名单登录运行失败')
12     def test_login_exit(self):
13         '''注销用户登录'''
14         self.assertNotIn(1,[1,2,3],'这是not in 的')
15 
16     def test_login_max_count(self):
17         '''超过最大错误次数登录'''
18         self.assertNotEqual(1,2,'这是不相等的')
19 
20 
21 # suite = unittest.TestSuite()#测试集合,手动一个个的把测试用例加入到测试集合中
22 # suite.addTest(TestLogin('test_login_normal'))#加一个测试用例
23 suite = unittest.makeSuite(TestLogin)#将整个测试用例都放进集合中
24 
25 #HTMLTestRunner
26 f = open('测试报告.html','wb')
27 runner = HTMLTestRunner.HTMLTestRunner(f,title='登录接口测试报告',description='这个是登录接口的测试报告')
28 runner.run(suite)
29 f.close()

测试报告如何打开:

1.选中文件--右键--Copy Path...--拷贝路径--放到浏览器中打开

2.双击测试报告--在测试报告的html脚本中移动鼠标--会弹出浏览器的选项--选择对应的浏览器打开

执行的测试报告如图所示:

2.2 nnreport

pip install nnreport

 1 import unittest
 2 import HTMLTestRunner
 3 import nnreport
 4 
 5 class TestLogin(unittest.TestCase):
 6     def test_login_normal(self):
 7         '''正常登录'''
 8         self.assertEqual(1,1)
 9     def test_login_black_list(self):
10         '''黑名单用户登录'''
11         self.assertTrue(False,'黑名单登录运行失败')
12     def test_login_exit(self):
13         '''注销用户登录'''
14         self.assertNotIn(1,[1,2,3],'这是not in 的')
15 
16     def test_login_max_count(self):
17         '''超过最大错误次数登录'''
18         self.assertNotEqual(1,2,'这是不相等的')
19 
20 
21 # suite = unittest.TestSuite()#测试集合,手动一个个的把测试用例加入到测试集合中
22 # suite.addTest(TestLogin('test_login_normal'))#加一个测试用例
23 suite = unittest.makeSuite(TestLogin)#将整个测试用例都放进集合中
24 
25 #BeautifulReport
26 runner = nnreport.BeautifulReport(suite)
27 runner.report(description='登录接口测试报告',filename='login_report.html',log_path='D:\\')#描述,文件名,指定路径

测试报告如图所示:

 

 

2.3 查找测试报告

一个文件夹下有多个测试的python文件

1 import unittest
2 import nnreport
3 
4 #在当前路径下,写名字
5 #不在当前路径下,写绝对路径
6 #test*.py制定一个查找规则,只找test开头的python文件,默认是test开头的python文件
7 suite = unittest.defaultTestLoader.discover('cases','test*.py')
8 report = nnreport.BeautifulReport(suite)
9 report.report(description='查找测试用例的测试报告',filename='查找测试用例的测试报告.html')

执行结果如图:

3、参数化

代码驱动:用例都是代码写的

数据驱动:用例是根据数据来执行的

关键字驱动:UI自动化的时候会用到

pip install parameterized

3.1 固定参数

 1 class stuInfoTest(unittest.TestCase):
 2     url = 'http://api.nnzhp.cn/api/user/stu_info'
 3 
 4     @parameterized.parameterized.expand([
 5         ['王月',18],
 6         ['小黑',11],
 7         ['小白',13],
 8         ['小慧',29],
 9         ['小兰',98]
10     ])
11     def test_single1(self,name,age):
12         data = {'stu_name':name,'age':age}
13         r = requests.get(self.url,data)
14         print(r.json())

3.2 文件参数

 1 import unittest
 2 import requests
 3 import parameterized
 4 import os
 5 
 6 class Get_Data:
 7     @staticmethod
 8     def read_data_to_file(file_name):
 9         datas = []
10         if os.path.exists(file_name):
11             with open(file_name,'r',encoding='utf-8') as fr:
12                 for line in fr:
13                     d1 = line.strip().split(',')
14                     datas.append(d1)
15         else:
16             raise FileNotFoundError('参数化文件找不到')
17 
18         return datas
19 
20     @staticmethod
21     def read_data_to_excel(file_name):
22         pass
23 
24     @staticmethod
25     def read_data_to_redis():
26         pass
27 
28 # result = read_data('stu_info.txt')
29 # print(result)
30 # quit()
31 
32 
33 class stuInfoTest(unittest.TestCase):
34     url = 'http://api.nnzhp.cn/api/user/stu_info'
37     #有多少条数据,就执行多少次
38     @parameterized.parameterized.expand(Get_Data.read_data_to_file('stu_info.txt'))
39     def test_single(self,name,age):
40         print(name)
41         data = {'stu_name':name,'age':age}
42         r = requests.get(self.url,data)
43         print(r.json())

 

posted @ 2020-06-28 21:53  cjxxl1213  阅读(176)  评论(0编辑  收藏  举报