咱們作測試的人員們都知道測試完成後,確定是會生成一個測試報告,那麼當咱們作自動化的時候,這個自動化報告也能夠自動生成嗎?python固然能夠了!html
HTMLTestRunner是Python標準庫的unittest模塊的擴展。它生成易於使用的HTML測試報告。python
下載地址:http://tungwaiyip.info/software/HTMLTestRunner.htmljson
下載完成後直接放到咱們代碼文件夾中,也能夠放在其餘地方,只要咱們用的時候,能夠直接調用就OKapi
下載下來後能夠先看下其中代碼,可否找到一些簡單的使用方法。(因爲文件過大,這裏我只呈現了部分咱們須要用到的代碼內容)post
# 輸出到文件 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)
固然了咱們只用這麼多就能夠生成報告了。學習
話很少說,直接就是幹,不過寫以前咱們先理下思路:測試
這裏我仍是直接調用前面寫的通用代碼了ui
# 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()
經過os模塊進行找到當前文件夾,使報告生成當前文件夾中url
# 當前文件夾路徑 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'用例執行狀況:')
經過unittest中執行用例的方法,來批量執行用例spa
# 實例化 testunit = unittest.TestSuite() # 加載用例 testunit .addTests(unittest.TestLoader().loadTestsFromTestCase(Music)) # 執行用例 runner.run(testunit)
經過用例,咱們能夠看到這裏已經徹底生成報告了。
固然確定有的小夥伴們會說,這裏不能看到經過的用例都是哪些?這個地方能夠解決嗎? 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()
懷着小小的激動去查看了生成的報告,果真沒有令我失望,已經完成展示出來了~~
這一篇安靜主要介紹了unittest如何生成測試報告,若是哪裏有不懂的或者不清楚的能夠下方留言,看到後第一時間回覆~~~共同進步,共同窗習