生成HTML测试报告

HTMLTestRunner是Python标准库unittest单元测试框架的一个扩展,可以生成易于使用的HTML测试报告,这个扩展很简单,只有一个HTMLTestRunner.py,下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html。

下载该文件,然后把它放到Python3的lib目录下,我的为:D:\Python35\Lib。

1.修改HTMLTestRunner

HTMLTestRunner.py是基于Python2开发的,如果是Python3环境,需要修改HTMLTestRunner.py文件。

1 import StringIO修改为import io
2 self.outputBuffer = StringIO.StringIO()修改为self.outputBuffer = io.StringIO()
3 print >>sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime)修改为print(sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime))
4 if not rmap.has_key(cls):修改为if not cls in rmap:
5 uo = o.decode('latin-1')修改为uo = e
6 ue = e.decode('latin-1')修改为ue = e

在Python交互模式下引入HTMLTestRunner模块,没有报错,则说明添加成功:

1 C:\Users>python3
2 Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)] on win32
3 Type "help", "copyright", "credits" or "license" for more information.
4 >>> import HTMLTestRunner
5 >>>

2.生成HTML测试报告

 1 # coding:utf-8
 2 import unittest
 3 from selenium import webdriver
 4 import time
 5 from HTMLTestRunner import HTMLTestRunner
 6 
 7 
 8 class TestBaidu(unittest.TestCase):
 9 
10     def setUp(self):
11         self.driver = webdriver.Firefox()
12         self.driver.maximize_window()
13         self.driver.implicitly_wait(10)
14         self.base_url = "http://www.baidu.com"
15 
16     def tearDown(self):
17         self.driver.quit()
18 
19     def test_baidu(self):
20         driver = self.driver
21         driver.get(self.base_url)
22         driver.find_element_by_id("kw").send_keys("selenium")
23         driver.find_element_by_id("su").click()
24         time.sleep(3)
25         self.assertEqual(driver.title, "selenium_百度搜索")
26 
27 
28 if __name__ == '__main__':
29     suite = unittest.TestSuite()
30     suite.addTest(TestBaidu("test_baidu"))
31     file = open("./resultReport.html", "wb")
32     runner = HTMLTestRunner(stream=file, title="百度搜索测试报告",description="用例执行情况:")
33     runner.run(suite)
34     file.close()

在当前目录打开resultReport.html:

 3.优化测试报告

HTMLTestRunner可以读取doc string类型的注释,因此,只需要在测试类或者测试方法下添加doc string类型的注释即可显示测试类和测试方法的注释。

 1 # coding:utf-8
 2 import unittest
 3 from selenium import webdriver
 4 import time
 5 from HTMLTestRunner import HTMLTestRunner
 6 
 7 
 8 class TestBaidu(unittest.TestCase):
 9     """测试百度搜索"""
10     def setUp(self):
11         self.driver = webdriver.Firefox()
12         self.driver.maximize_window()
13         self.driver.implicitly_wait(10)
14         self.base_url = "http://www.baidu.com"
15 
16     def tearDown(self):
17         self.driver.quit()
18 
19     def test_baidu(self):
20         """搜索关键词selenium"""
21         driver = self.driver
22         driver.get(self.base_url)
23         driver.find_element_by_id("kw").send_keys("selenium")
24         driver.find_element_by_id("su").click()
25         time.sleep(3)
26         self.assertEqual(driver.title, "selenium_百度搜索")
27 
28 
29 if __name__ == '__main__':
30     suite = unittest.TestSuite()
31     suite.addTest(TestBaidu("test_baidu"))
32     file = open("./resultReport.html", "wb")
33     runner = HTMLTestRunner(stream=file, title="百度搜索测试报告",description="用例执行情况:")
34     runner.run(suite)
35     file.close()

运行脚本,然后在当前目录下打开resultReport.html文件:

4.修改测试报告名称

在测试之前,如果不修改测试报告文件名,则运行结束后,之前的测试报告会被覆盖,为了避免这种情况,我们可以在文件命中添加时间。

Python的time模块为我们提供了很多操作时间的方法:

 1 # coding:utf-8
 2 import time
 3 
 4 print(time.time())  # 返回当前时间(以秒为单位),自1970-01-01 00:00:00以来的秒数
 5 
 6 print(time.localtime())  # 将1970-01-01 00:00:00以来的秒转换为本地时间的元组
 7 
 8 print(time.ctime())  # 将1970-01-01 00:00:00以来的以秒为单位的时间转换为本地时间的字符串
 9 
10 
11 print(time.strftime(("%Y-%m-%d %H_%M_%S")))  # 根据设置的格式将时间元组转换为字符串
12 """
13     %Y  带世纪部分的十进制年份,2019
14     %m  十进制表示的月份, [01,12].
15     %d  十进制表示每月的第几天 [01,31].
16     %H  24小时制十进制的小时 [00,23].
17     %M  十进制表示的分钟数 [00,59].
18     %S  十进制的秒数 
19     %z  时区名称
20     %a  星期的简称 ,Sun
21     %A  星期的全称 ,Sunday
22     %b  月份的简称,Mar
23     %B  月份的全称,March
24     %I  12小时制的小时 [01,12].
25     %p  本地的AM或PM的等价显示 
26 """

修改测试脚本:

1 if __name__ == '__main__':
2     suite = unittest.TestSuite()
3     suite.addTest(TestBaidu("test_baidu"))
4     now_time = time.strftime("%Y-%m-%d %H_%M_%S")
5     file_name = "./"+now_time+"result.html"
6     file = open(file_name, "wb")
7     runner = HTMLTestRunner(stream=file, title="百度搜索测试报告",description="用例执行情况:")
8     runner.run(suite)
9     file.close()

然后运行测试脚本,即可生成不同名称的测试报告。

4.输出项目集成测试报告

修改runnertest.py文件,使其可以生成项目集成测试报告。

 1 # coding:utf-8
 2 import unittest
 3 from HTMLTestRunner import HTMLTestRunner
 4 import time
 5 
 6 discover = unittest.defaultTestLoader.discover("./testpro/testcase/", "test*.py")
 7 if __name__ == '__main__':
 8 
 9     now_time = time.strftime("%Y-%m-%d %H-%M-%S")
10     file_name = "./testpro/testresult/"+now_time+"result.html"
11     file = open(file_name, "wb")
12     runner = HTMLTestRunner(stream=file, title="测试报告", description="测试用例执行情况")
13     runner.run(discover)

执行测试脚本,查看生成的测试报告:

 

posted @ 2019-03-10 09:41  博小园  阅读(1863)  评论(0编辑  收藏  举报
回到顶部