运行方式一:unittest.main()
用unittest.main()全部运行,用例必须是以test开头,结果不会生成报告
importunittestdefadd(a,b):return a+bclassTestAdd(unittest.TestCase):'''测试加法类'''
deftest_add_1normal(self):'''正常测试加法'''result= add(1,2)
self.assertEqual(3,result)deftest_add_2error1(self):'''测试失败'''result= add(1,2)
self.assertEqual(4,result)deftest_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)
报告:
参数化:
importunittestimportHTMLTestRunner_PY3importparameterized #引包classTestAdd(unittest.TestCase):
@parameterized.parameterized.expand([ #二维数组
[1,2,3,'参数化1'],
[-1,2,1,'参数化2'],
[-1,2,2,'参数化3']
]
)deftest_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 importunittest2 from unittest importTestCase3
4 defcalc(a,b):5 c = a//b6 returnc7
8 classMyTest(TestCase):9 @classmethod#类方法
10 def setUpClass(cls):#所有用例执行之前运行它用 如只连接一次数据库
11 print('我是setUpclass')12 @classmethod13 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 deftest_calc2(self):26 #不正常的测试用例
27 res = calc(5, 1)28 print('第二条用例')29 self.assertEqual(5, res)30 deftest_calc3(self):31 #不正常的测试用例
32 res = calc(6, 1)33 print('第三条用例')34 self.assertEqual(6, res)35 unittest.main()
报告样式生成3:
每条测试用例加描述,更漂亮的测试报告写法,BeautifulReport包需要加入环境变量中
1 importHTMLTestRunner2 importBeautifulReport3 importunittest4 from unittest importTestCase5
6 defcalc(a,b):7 c = a//b8 returnc9
10 classMyTest(TestCase):11 @classmethod#类方法
12 def setUpClass(cls):#所有用例执行之前运行它用 如只连接一次数据库
13 print('我是setUpclass')14 @classmethod15 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 deftest_calc2(self):29 #不正常的测试用例
30 '''不正常的测试用例'''
31 res = calc(5, 1)32 print('第二条用例')33 self.assertEqual(2, res)34 deftest_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=''可以指定文件位置