python利用unitest生成的報告如何輸出為html
這段時間開始研究unittest框架,眾所周知它是一個單元測試框架。由於個人對視覺化特別感興趣,所以先關注一下如何輸出生成的報告頁面。
1、環境linux,python2.7
2、實現步驟:
(1)匯入import HTMLTestRunner
(2)新增內容:
report_path = os.path.join(os.getcwd(),"report.html")
fp=file(report_path,"w+")
runner=HTMLTestRunner.HTMLTestRunner(stream=fp,title="hello",description="用例測試情況")
但是提示沒有此模組,所以需要下載HTMLTestRunner.py,下載地址,並放在/usr/lib/python2.7/site-packages/目錄下
(3)再次執行提示:UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 4835: ordinal not in range(128)
解決辦法:在/usr/lib/python2.7/site-packages/目錄下,新建sitecustomize.py,
內容為:
import sys
sys.setdefaultencoding('utf-8')
下面是我的檔案內容:
#coding=utf-8
import unittest
import HTMLTestRunner
import os
# 用例路徑
case_path = os.path.join(os.getcwd())
def all_case():
discover = unittest.defaultTestLoader.discover(case_path, pattern="test*.py",top_level_dir=None)
print(discover)
return discover
if __name__ == "__main__":
#報告存放位置以及名稱
report_path = os.path.join(os.getcwd(),"report.html")
fp=file(report_path,"w+")
runner=HTMLTestRunner.HTMLTestRunner(stream=fp,title="hello",description="用例測試情況")
runner.run(all_case())
下面是生成的頁面:
拓展:上面提到了discover
disvocer用於載入測試用例
1.此方法裡面有三個引數:
(1)case_dir:這個是待執行用例的目錄。
(2)pattern:這個是匹配指令碼名稱的規則,test*.py意思是匹配test開頭的所有指令碼。
(3)top_level_dir:這個是頂層目錄的名稱,一般預設等於None就行了。
2.用discover載入到的用例返回一個一個list集合,需要重新寫入到一個list物件testcase裡,這樣就可以用run方法去執行。