Python-单元测试 unittest & HTMLTestRunner模块产生的测试报告
1、单元测试:
——开发程序的人测已经已经写好的代码。
-
unittest框架,执行的顺序是按照方法名的字母来排序的
-
setUpClass方法是最开始执行的,只会执行一次
-
tearDownClass是最后执行的,只会执行一次
-
setUp方法是在每个测试用例执行前会执行
-
tearDown方法是在每个用例执行后会执行
import unittest def add(a, b): return a + b # 运行的顺序是按照函数名的字母排序的 class AddTest(unittest.TestCase): # 继承unittest def setUp(self): #每条用例运行之前都会执行它 print('我是set up方法') def tearDown(self): # 每条用例运行完之后都会执行它 print('我是tearDown方法') @classmethod def setUpClass(cls): # 最先开始执行的,如:大多数用例需要统一执行操作时、操作时先备份下数据 print('我是setupclass方法') @classmethod def tearDownClass(cls): # 最后执行的 print('我是tearDownclass方法') def test_add_normal(self): print('add_normal') result = add(1, 4) self.assertEqual(5, result) # 预期结果,实际结果 def test_add_error(self): print('add_error') result = add(1, 1) yq = 1 self.assertEqual(yq, result, 'add测试结果不通过,预计结果为%s,实际结果为%s' % (yq, result)) def test_a(self): print('a') def test_b(self): print('b') unittest.main() # 运行当前python文件中的所用用例;如果要当作正常的函数方法来执行,需要加上unittest.main()
assert表达式
——断言,正确就会通过,错误了就会报错AssertionError
- 返回值是正确的
def add(a,b): return a+b result = add(2,3) assert result==5 #正确的结果:不返回任何值,直接通过
- 返回值是错误的
def add(a,b): return a+b result = add(2,3) assert result==5 # 也可以这样写assert 'a' in result #结果: Traceback (most recent call last): File "E:/xb_python/day5/单元测试.py", line 5, in <module> assert result==6 AssertionError
2、产生测试报告
2.1 HTMLTestRunner
下载HTMLTestRunner.py放到python的环境变量里
import unittest import HTMLTestRunner import nnreport class TestLogin(unittest.TestCase): def test_login_normal(self): '''正常登录''' self.assertEqual(1,1) def test_login_black_list(self): '''黑名单登录''' self.assertTrue(False,'黑名单登录运行失败') def test_login_exit(self): '''注销用户登录''' self.assertNotIn(1,[1,2,3],'这个是notin的') def test_login_max_count(self): '''达到最大错误次数登录''' self.assertNotEqual(1,2,'这个是不相等的') # suite = unittest.TestSuite()#测试集合,手动一个个的把测试用例加入到测试集合中 # suite.addTest(TestLogin('test_login_normal'))#加一个测试用例 suite = unittest.makeSuite(TestLogin)#将整个测试用例都放进集合中 #HTMLTestRunner f = open('测试报告.html','wb') runner = HTMLTestRunner.HTMLTestRunner(f,title='登录接口测试报告',description='这个是登录接口的测试报告') #test_suite= unittest.makeSuite(AddTest) #使用makeSuite就是把自动把AddTest类里面遍历全都加到test_suite里面 runner.run(suite) #传一个测试集合进来,来运行所有的测试集合 f.close()
* 执行时,不要以unittest方式来执行,直接以运行普通模块的方式来运行;写了unittest.main(),需要注释掉,要不然不会产生报告
测试报告如何打开:
1.选中文件--右键--Copy Path...--拷贝路径--放到浏览器中打开
2.双击测试报告--在测试报告的html脚本中移动鼠标--会弹出浏览器的选项--选择对应的浏览器打开
执行的测试报告如图所示:
2.2 nnreport
pip install nnreport
import unittest import HTMLTestRunner import nnreport class TestLogin(unittest.TestCase): def test_login_normal(self): '''正常登录''' #加上这个注释,产生的测试报告【描述】栏就会显示,不注释就会显示null self.assertEqual(1,1) def test_login_black_list(self): '''黑名单登录''' self.assertTrue(False,'黑名单登录运行失败') def test_login_exit(self): '''注销用户登录''' self.assertNotIn(1,[1,2,3],'这个是notin的') def test_login_max_count(self): '''达到最大错误次数登录''' self.assertNotEqual(1,2,'这个是不相等的') # suite = unittest.TestSuite()#测试集合,手动一个个的把测试用例加入到测试集合中 # suite.addTest(TestLogin('test_login_normal'))#加一个测试用例 suite = unittest.makeSuite(TestLogin)#将整个测试用例都放进集合中 #BeautifulReport runner = nnreport.BeautifulReport(suite) runner.report(description='登录接口测试报告8.15', filename='login_report.html') #不写后缀:html也可以,也会直接加上 #log_path='D:\\')#描述,文件名,指定路径
测试报告如图所示:
注意:
-
在运行时,如若选择如下图运行,会正常执行,但是不会产生测试报告——单独测试一个用例可使用
-
想要产生测试报告,如图选择就可以了
-
测试用例的函数名字必须要以test开头,否则不认为是一个测试用例
def test_add_error(self): print("add_error")
PyCharm中导入HTMLTestRunner模块教程
1、先下载HTMLTestRunner.py文件
2、导入HTMLTestRunner.py文件到本地
将HTMLTestRunner.py拷贝到python安装目录的Lib\site-packages下,这里需要说明一下我使用的python3的环境,比如我的python安装目录为:D:\python,那么应该拷贝到D:\python\Lib\site-packages目录下,注意不要搞错位置了
3、重新启动PyCharm
在需要用到的py文件中,使用import HTMLTestRunner语句即可将HTMLTestRunner模块导入到PyCharm开发环境中
本文来自博客园,作者:他还在坚持嘛,转载请注明原文链接:他还在坚持嘛 https://www.cnblogs.com/brf-test/p/11918982.html