python单元测试unittest_python单元测试unittest

本文详细介绍了如何使用Python的unittest模块进行单元测试,包括unittest.main()全局运行方式,以及生成HTML测试报告的两种方法。涵盖了用例编写、特定用例选择、参数化测试和测试套件管理,以及如何使用BeautifulReport美化测试报告。
摘要由CSDN通过智能技术生成

运行方式一: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()

运行结果:

f181e5a30ca9261b66fd30cfd9dd2bbd.png

运行方式二:生成报告

报告样式1生成:

将HTMLTestRunner文件加入环境变量中或项目目录下

4f0ff2d195a860e5caf5850d6752da59.png

引入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)

运行结果:

9334b2939484ed573c0dae8fad6f8739.png

报告:

2108bf01d6bdb51610f468fe824a5a37.png

报告样式2生成:

4f6a3575255cb8fab3f4c964672fb018.png

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)

报告:

8b115d5d40d6d3ace7aa5b81889c05de.png

参数化:

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=''可以指定文件位置

33aa2175b69fe8aa2ff9614690d73457.png

075cf3f4ef717b7c4dde21309fc26042.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值