unittest生成测试报告
HTMLTestRunner
HTMLTestRunner是Python标准库的unittest模块的扩展。它生成易于使用的HTML测试报告。
下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html
下载完成后直接放到我们代码文件夹中,也可以放在其他地方,只要我们用的时候,可以直接调用就OK
下载下来后可以先看下其中代码,能否找到一些简单的使用方法。(由于文件过大,这里我只呈现了部分我们需要用到的代码内容)
# 输出到文件 fp = file(\'my_report.html\', \'wb\') runner = HTMLTestRunner.HTMLTestRunner( stream=fp, title=\'My unit test\', description=\'This demonstrates the report output by HTMLTestRunner.\' ) # 使用外部样式表。 # 运行测试 runner.run(my_test_suite)
当然了我们只用这么多就可以生成报告了。
小试牛刀
1、在unittest中编写测试用例
这里我还是直接调用前面写的通用代码了
# coding:utf-8 import unittest import requests class Music(unittest.TestCase): def select(self,name): url = \'https://api.apiopen.top/searchMusic\' data = { "name":name } r = requests.post(url,data=data) b = r.json()[\'result\'][0][\'title\'] return b def test01(self): b = \'断桥残雪\' a = self.select(b) self.assertEqual(b,a) print(\'这个是用例一\') def test02(self): a = \'说好不哭\' b = self.select(a) self.assertEqual(a,b) print(\'这个是用例二\') def test03(self): a = \'芒种\' b = self.select(a) self.assertEqual(a,b) print(\'这个是用例三\') if __name__ == \'__main__\': unittest.main()
2、添加报告路径已经报告内容
通过os模块进行找到当前文件夹,使报告生成当前文件夹中
# 当前文件夹路径 report_path = os.path.dirname(os.path.realpath(__file__)) # 测试报告地址 report_abspath = os.path.join(report_path, "result.html") fp = open(report_abspath, "wb") # 报告详情 runner = HTMLTestRunner_cn.HTMLTestRunner(stream=fp, title=u\'自动化测试报告,测试结果如下:\', description=u\'用例执行情况:\')
3、批量执行用例,导入测试报告内容中
通过unittest中执行用例的方法,来批量执行用例
# 实例化 testunit = unittest.TestSuite() # 加载用例 testunit.addTests(unittest.TestLoader().loadTestsFromTestCase(Music)) # 执行用例 runner.run(testunit)
4、当然是赶快执行查看报告内容啊
通过用例,我们可以看到这里已经完全生成报告了。
4、添加用例注释,增加报告完整性
当然肯定有的小伙伴们会说,这里不能看到通过的用例都是哪些?这个地方可以解决吗? python这么强大,这个肯定可以解决啊。不过需要我们在用例中添加注释。这样的话就会生成了详细内容。全部代码如下(添加注释后)
# coding:utf-8 import unittest import requests import os from case import HTMLTestRunner_cn class Music(unittest.TestCase): def select(self,name): url = \'https://api.apiopen.top/searchMusic\' data = { "name":name } r = requests.post(url,data=data) b = r.json()[\'result\'][0][\'title\'] return b def test01(self): \'\'\' 歌名:断桥残雪 \'\'\' b = \'断桥残雪\' a = self.select(b) self.assertEqual(b,a) print(\'这个是用例一\') def test02(self): \'\'\' 歌名:说好不哭 \'\'\' a = \'说好不哭\' b = self.select(a) self.assertEqual(a,b) print(\'这个是用例二\') def test03(self): \'\'\' 歌名:芒种 \'\'\' a = \'芒种\' b = self.select(a) self.assertEqual(a,b) print(\'这个是用例三\') if __name__ == \'__main__\': # 当前文件夹路径 report_path = os.path.dirname(os.path.realpath(__file__)) # 测试报告地址 report_abspath = os.path.join(report_path, "result.html") fp = open(report_abspath, "wb") # 报告详情 runner = HTMLTestRunner_cn.HTMLTestRunner(stream=fp, title=u\'自动化测试报告,测试结果如下:\', description=u\'用例执行情况:\') # 实例化 testunit = unittest.TestSuite() # 加载用例 testunit .addTests(unittest.TestLoader().loadTestsFromTestCase(Music)) # 执行用例 runner.run(testunit) # 关闭报告 fp.close()
怀着小小的激动去查看了生成的报告,果然没有令我失望,已经完成展现出来了~~