我們做測試的人員們都知道測試完成後,肯定是會生成一個測試報告,那麼當我們做自動化的時候,這個自動化報告也可以自動生成嗎?python當然可以了!
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()
懷着小小的激動去查看了生成的報告,果然沒有令我失望,已經完成展現出來了~~
這一篇安靜主要介紹了unittest如何生成測試報告,如果哪裏有不懂的或者不清楚的可以下方留言,看到後第一時間回覆~~~共同進步,共同學習