1. 程式人生 > >python利用unitest生成的報告如何輸出為html

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方法去執行。