生成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)

執行測試腳本,查看生成的測試報告:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM