引入第三方模塊HTMLTestRunner,可以展示一份優美的html格式的測試報告。
下面我們就來介紹下HTMLTestRunner模塊
HTMLTestRunner模塊不能通過pip安裝,必須先下載下來下載地址:http://tungwaiyip.info/software/HTMLTestRunner.html
【百度網盤下載鏈接】
鏈接:https://pan.baidu.com/s/1P9CDkXOAEgGIxaesFQw0vQ
提取碼:btf6
直接右鍵另存為就行了,下載完成后放到python安裝目錄下的../Python36\Lib
因為HTMLTestRunner模塊是基於Python2開發的,目前停止更新了,在Python3上運行會報錯。為了使其支持Python3環境,需要對其中的部分內容進行修改:
第94行,將import StringIO修改成import io
第539行,將self.outputBuffer = StringIO.StringIO()修改成self.outputBuffer= io.StringIO()
第631行,將print >> sys.stderr, ‘\nTime Elapsed: %s‘ %(self.stopTime-self.startTime)修改成print(sys.stderr, ‘\nTimeElapsed: %s‘ % (self.stopTime-self.startTime))
第642行,將if not rmap.has_key(cls):修改成if notcls in rmap:
第766行,將uo = o.decode(‘latin-1‘)修改成uo = e
第775行,將ue = e.decode(‘latin-1‘)修改成ue = e
修改完成后保存。
現在我們就可以生成一份優美的測試報告了
代碼:
import unittest
import os
import HTMLTestRunner
import time
'''
python2一定要加如下代碼,不然在有中文出現的時候,會出現enicode error的錯誤信息
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
'''
def allTests():
suite = unittest.TestLoader().discover(
start_dir=os.path.dirname(__file__),#測試用例得路徑
pattern= 'test_*.py',#執行以什么開頭的測試用例
top_level_dir=None)
return suite
def getNowTime():#獲取當前時間
return time.strftime("%Y-%m-%d %H_%M_%S",time.localtime(time.time()))
def run():
#unittest.TextTestRunner(verbosity=2).run(allTests())#批量執行測試用例
'''
1.新建文件夾report,
2. os.path.join(os.path.dirname(__file__),'report'找到report文件夾
3.getNowTime()+'testRort.html'當前時間和測試報告的名稱
'''
fp = os.path.join(os.path.dirname(__file__),'report',getNowTime()+'testRort.html')
HTMLTestRunner.HTMLTestRunner(
#打開report文件夾,將測試報告寫入html里面
stream=open(fp,'wb'),
#測試報告的名稱
title=u'自動化測試報告',
#測試報告描述
description=u'自動化測試報告詳細信息'
).run(allTests())
if __name__ == '__main__':
run()
注解:見如上是完善后的 allTests.py 文件,導入了 sys,HTMLTestRunner 庫,getNowTime方法是獲取當前時間,每一次生成測試報告如果文件名稱一致,就無法確定哪個測試報告是最新的,加上最新時間后可以根據文件名稱來得到最新的測試報告,
run 方法是執行測試套件中的測試用例和生成測試報告。