复杂运行
导入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=''可以指定文件位置