引入第三方模块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 方法是执行测试套件中的测试用例和生成测试报告。