python单元测试unittest

复杂运行

导入unittest模块中的TestCase方法

 
  

写好一个方法

 
  

写好一个类来运行测试用例 self.assertEqual(预期结果,实际结果,实际和预期对不上时默认提示可省)

 
  

实例化类

 
  

运行

eg:
 1 from unittest import TestCase
 2 
 3 def calc(a,b):
 4     c = a//b
 5     return c
 6 
 7 class MyTest(TestCase):
 8     def calc1(self):
 9         #正常的测试用例
10         res = calc(4,2)
11         self.assertEqual(2,res,'预期结果和实际结果不符合 预期结果是 2 实际结果是%s'%res)#断言
12 
13     def calc2(self):
14             # 不正常的测试用例
15         res = calc(5, 1)
16         self.assertEqual(1, res)
17 
18 m = MyTest()
19 m.calc1()
20 m.calc2()

用unittest.main()全部运行,用例必须是以test开头

 1 import unittest
 2 from unittest import TestCase
 3 
 4 def calc(a,b):
 5     c = a//b
 6     return c
 7 
 8 class MyTest(TestCase):
 9     def test_calc1(self):
10         #正常的测试用例
11         res = calc(4,2)
12         self.assertEqual(2,res,'预期结果和实际结果不符合 预期结果是 2 实际结果是%s'%res)#断言
13 
14     def test_calc2(self):
15             # 不正常的测试用例
16         res = calc(5, 1)
17         self.assertEqual(1, res)
18 unittest.main()

运行结果:

/Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6 /Users/ihealth-qa/PycharmProjects/untitled/test.py
.F
======================================================================
FAIL: test_calc2 (__main__.MyTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/ihealth-qa/PycharmProjects/untitled/test.py", line 17, in test_calc2
self.assertEqual(1, res)
AssertionError: 1 != 5

----------------------------------------------------------------------
Ran 2 tests in 0.000s

FAILED (failures=1)

Process finished with exit code 1

 

 初始化类方法和类结束时运行的方法(setUpClass、tearDownClass),每个用例执行时会运行两个方法(setUp、tearDown)

用例的执行顺序是按照函数名的ASCII表顺序

 1 import unittest
 2 from unittest import TestCase
 3 
 4 def calc(a,b):
 5     c = a//b
 6     return c
 7 
 8 class MyTest(TestCase):
 9     @classmethod#类方法
10     def setUpClass(cls):#所有用例执行之前运行它用 如只连接一次数据库
11         print('我是setUpclass')
12     @classmethod
13     def tearDownClass(cls):#类中所有用例执行完后运行 如运行完后关闭数据库
14         print('我是tearDownClass')
15 
16     def setUp(self):#每条用例执行之前都会运行它  当注册时可以判断用户名是否已存在,若存在先删除
17         print('setUp 什么时候运行我呢')
18     def tearDown(self):#每条用例执行之后都会运行它
19         print('tearDown 什么时候运行我呢')
20     def test_calc1(self):#用例运行顺序是根据函数名的字母顺序决定的
21         #正常的测试用例
22         res = calc(4,2)
23         print('第一条用例')
24         self.assertEqual(2,res,'预期结果和实际结果不符合 预期结果是 2 实际结果是%s'%res)#断言
25     def test_calc2(self):
26             # 不正常的测试用例
27         res = calc(5, 1)
28         print('第二条用例')
29         self.assertEqual(5, res)
30     def test_calc3(self):
31             # 不正常的测试用例
32         res = calc(6, 1)
33         print('第三条用例')
34         self.assertEqual(6, res)
35 unittest.main()

生成报告

1.将HTMLTestRunner文件加入环境变量中

2.引入HTMLTestRunner包

 1 import HTMLTestRunner
 2 import unittest
 3 from unittest import TestCase
 4 
 5 def calc(a,b):
 6     c = a//b
 7     return c 8 9 class MyTest(TestCase): 10 @classmethod#类方法 11 def setUpClass(cls):#所有用例执行之前运行它用 如只连接一次数据库 12 print('我是setUpclass') 13  @classmethod 14 def tearDownClass(cls):#类中所有用例执行完后运行 如运行完后关闭数据库 15 print('我是tearDownClass') 16 17 def setUp(self):#每条用例执行之前都会运行它 当注册时可以判断用户名是否已存在,若存在先删除 18 print('setUp 什么时候运行我呢') 19 def tearDown(self):#每条用例执行之后都会运行它 20 print('tearDown 什么时候运行我呢') 21 def test_calc1(self):#用例运行顺序是根据函数名的字母顺序决定的 22 #正常的测试用例 23 res = calc(4,2) 24 print('第一条用例') 25 self.assertEqual(2,res,'预期结果和实际结果不符合 预期结果是 2 实际结果是%s'%res)#断言 26 def test_calc2(self): 27 # 不正常的测试用例 28 res = calc(5, 1) 29 print('第二条用例') 30 self.assertEqual(5, res) 31 def test_calc3(self): 32 # 不正常的测试用例 33 res = calc(6, 1) 34 print('第三条用例') 35 self.assertEqual(6, res) 36 # unittest.main()#它可以帮你运行当前python文件里面的所有用例 37 test_suite = unittest.TestSuite()#定义一个测试集合 38 # test_suite.addTests(MyTest('test_calc3'))#只加入某一个测试用例 39 test_suite.addTest(unittest.makeSuite(MyTest))#把类里所有的测试用例都加入集合 40 # test_suite.addTest() 41 f = open('report.html','wb') 42 43 runner = HTMLTestRunner.HTMLTestRunner(stream=f, 44 title='测试报告', 45 description='这个是zhou的测试') 46 runner.run(test_suite)#运行哪个测试用例集 47 f.close()

用浏览器打开report.html文件 

每条测试用例加描述,更漂亮的测试报告写法,BeautifulReport包需要加入环境变量中

 1 import HTMLTestRunner
 2 import BeautifulReport
 3 import unittest
 4 from unittest import TestCase
 5 
 6 def calc(a,b):
 7     c = a//b
 8     return c
 9 
10 class MyTest(TestCase):
11     @classmethod#类方法
12     def setUpClass(cls):#所有用例执行之前运行它用 如只连接一次数据库
13         print('我是setUpclass')
14     @classmethod
15     def tearDownClass(cls):#类中所有用例执行完后运行 如运行完后关闭数据库
16         print('我是tearDownClass')
17 
18     def setUp(self):#每条用例执行之前都会运行它  当注册时可以判断用户名是否已存在,若存在先删除
19         print('setUp 什么时候运行我呢')
20     def tearDown(self):#每条用例执行之后都会运行它
21         print('tearDown 什么时候运行我呢')
22     def test_calc1(self):#用例运行顺序是根据函数名的字母顺序决定的
23         #正常的测试用例
24         '''正常的测试用例'''
25         res = calc(4,2)
26         print('第一条用例')
27         self.assertEqual(2,res,'预期结果和实际结果不符合 预期结果是 2 实际结果是%s'%res)#断言
28     def test_calc2(self):
29             # 不正常的测试用例
30         '''不正常的测试用例'''
31         res = calc(5, 1)
32         print('第二条用例')
33         self.assertEqual(2, res)
34     def test_calc3(self):
35             # 不正常的测试用例
36         '''描述一下'''
37         res = calc(6, 1)
38         print('第三条用例')
39         self.assertEqual(6, res)
40 # unittest.main()#它可以帮你运行当前python文件里面的所有用例
41 test_suite = unittest.TestSuite()#定义一个测试集合
42 # test_suite.addTests(MyTest('test_calc3'))#只加入某一个测试用例
43 test_suite.addTest(unittest.makeSuite(MyTest))#把类里所有的测试用例都加入集合
44 # test_suite.addTest()
45 #下面是漂亮的测试报告
46 report = BeautifulReport.BeautifulReport(test_suite)
47 report.report(description='周的测试',filename='report2.html',log_path='/Users/ihealth-qa/PycharmProjects/untitled/practice')#不用打开文件,直接生成文件,默认在当前,log_path=''可以指定文件位置

 

 

转载于:https://www.cnblogs.com/Mezhou/p/10053821.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值