运行方式一:unittest.main()
用unittest.main()全部运行,用例必须是以test开头,结果不会生成报告
import unittest def add(a,b): return a+b class TestAdd(unittest.TestCase): '''测试加法类''' def test_add_1normal(self): '''正常测试加法''' result = add(1,2) self.assertEqual(3,result) def test_add_2error1(self): '''测试失败''' result = add(1,2) self.assertEqual(4,result) def test_add_3error2(self): '''测试失败带信息''' result = add(1,2) self.assertEqual(4,result,'正常整数相加,结果错误') if __name__ == '__main__': # 不产生测试报告 unittest.main()
运行结果:
运行方式二:生成报告
报告样式1生成:
将HTMLTestRunner文件加入环境变量中或项目目录下
引入HTMLTestRunner包
import HTMLTestRunner
运行某些用例:
if __name__ == '__main__': # 运行某一个用例 test_suite = unittest.TestSuite() test_suite.addTest(TestAdd('test_add_1normal'))#运行某一个用例 test_suite.addTest(TestAdd('test_add_2error1')) test_suite.addTest(TestAdd('test_add_3error2')) with open('report.html','wb') as fw: runner = HTMLTestRunner.HTMLTestRunner(stream=fw,title='测试报告',description='接口测试报告',verbosity=3) runner.run(test_suite)
运行所有用例:
if __name__ == '__main__': # 运行类中的所有用例 test_suite = unittest.makeSuite(TestAdd) with open('report.html', 'wb') as fw: runner = HTMLTestRunner_PY3.HTMLTestRunner(stream=fw, title='测试报告', description='接口测试报告', verbosity=3) runner.run(test_suite)
运行结果:
报告:
报告样式2生成:
import HTMLTestRunner_PY3
# 运行类中的所有用例 test_suite = unittest.makeSuite(TestAdd) with open('report.html', 'wb') as fw: runner = HTMLTestRunner_PY3.HTMLTestRunner(stream=fw, title='测试报告', description='接口测试报告', verbosity=3) runner.run(test_suite)
运行某个目录下的所有符合条件的用例:
# 查找某个目录下的所有测试用例 test_suite = unittest.defaultTestLoader.discover('cases','case*.py') with open('report.html', 'wb') as fw: runner = HTMLTestRunner_PY3.HTMLTestRunner(stream=fw, title='测试报告', description='接口测试报告', verbosity=3) runner.run(test_suite)
报告:
参数化:
import unittest import HTMLTestRunner_PY3 import parameterized #引包 class TestAdd(unittest.TestCase): @parameterized.parameterized.expand([ #二维数组 [1,2,3,'参数化1'], [-1,2,1,'参数化2'], [-1,2,2,'参数化3'] ] ) def test_param_add(self,a,b,c,desc): self._testMethodDoc = desc #每个用例描述参数化 result = add(a,b) self.assertEqual(c,result,'预期是%s,实际是%s'%(c,result)) #断言 if __name__ == '__main__': # 运行类中的所有用例 test_suite = unittest.makeSuite(TestAdd) with open('report.html', 'wb') as fw: runner = HTMLTestRunner_PY3.HTMLTestRunner(stream=fw, title='测试报告', description='接口测试报告', verbosity=3) runner.run(test_suite)
setUpClass、tearDownClass、setUp、tearDown:
初始化类方法和类结束时运行的方法(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()
报告样式生成3:
每条测试用例加描述,更漂亮的测试报告写法,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=''可以指定文件位置