30-unittest生成测试报告(HTMLTestRunner插件)

批量执行完测试用例后,为了更好的展示测试报告,最好是生成HTML格式的。本文使用第三方HTMLTestRunner插件生成测试报告。

一、导入HTMLTestRunner模块

这个模块下载不能通过pip安装,只能下载后手动导入,下载地址是:http://tungwaiyip.info/software/HTMLTestRunner.html。

Download下的HTMLTestRunner.py文件就是我们需要下载的包,下载后将其手动放到python安装文件的lib目录下。

二、生成测试报告

这里使用前一篇文章中的加载测试用例相关代码:29-unittest批量执行案例-CSDN博客。

HTMLTestRunner主要有三个参数:

  • stream:测试报告写入文件的存储位置。
  • title:测试报告的标题。
  • description:测试报告的描述。
python 复制代码
import unittest
import os
import HTMLTestRunner

# 1.指定测试用例所在的目录
case_path = os.path.join(os.getcwd(), 'case')

# 2.指定测试报告存放的位置
report_path = os.path.join(os.getcwd(), 'report')

# 3.通过discover加载测试用例
def get_all_case():
    discover = unittest.defaultTestLoader.discover(case_path, pattern='test*.py')
    return discover

if __name__ == '__main__':
    # 4.html测试报告文件的路径
    report_abspath = os.path.join(report_path, 'result.html')

    # 5.执行测试用例,并生成测试报告
    fp = open(report_abspath, 'wb')
    runner = HTMLTestRunner.HTMLTestRunner(stream=fp, 
                                           title='我的自动化测试报告', 
                                           description='V1.0')
    runner.run(get_all_case())
    fp.close()

三、No module named 'StringIO'报错

1)原因分析

执行上述代码后,会报错:No module named 'StringIO'。

原因:我用的是Python 3.X版本,而下载的HTMLTestRunner适用于Python2.X。

2)解决办法

修改HTMLTestRunner.py文件源码,使得HTMLTestRunner可以在Python 3.X版本中正常使用。

  1. 第94行,将import StringIO修改成import io。
  2. 第539行,将self.outputBuffer = StringIO.StringIO()修改成self.outputBuffer = io.StringIO()
  3. 第631行,将print >>sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime)修改成print(sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime))
  4. 第642行,将if not rmap.has_key(cls): 修改成if not cls in rmap:
  5. 第766行,将uo = o.decode('latin-1')修改成uo = e
  6. 第772行,将ue = e.decode('latin-1')修改成ue = e

将HTMLTestRunner源码以上内容修改后,重新运行脚本发现一切正常并在相应路径下生成了测试报告,如图所示:

四、测试报告详情

找到测试报告文件,用浏览器打开,点开View列中的Detail可以查看详细描述。

在测试报告中,为了让测试用例带有中文描述,可以在测试方法中添加注释,比如:在baidu.test_01.py脚本添加如下注释,重新运行后查看测试报告。

python 复制代码
import unittest

class Test(unittest.TestCase):
    def test01(self):
        '''测试用例test01,账号:XXX,密码:YYY'''
        print('执行测试用例:test_01.test01')

    def test02(self):
        print('执行测试用例:test_01.test02')

    def test03(self):
        '''测试用例test03,关键词:ZZZ'''
        print('执行测试用例:test_01.test03')

if __name__ == '__main__':
    unittest.main()
相关推荐
快乐の番薯9 小时前
卷王问卷考试系统自动化功能测试
运维·功能测试·自动化
KIZIFLOW北泽五金10 小时前
气缸动作卡顿故障原因与快速排查方法
自动化·新媒体运营·产品运营·用户运营·内容运营
天远Date Lab13 小时前
零信任架构实战:基于天远名下车辆车牌查询A构建自动化社区车位摇号核验网关
运维·人工智能·架构·自动化
代码方舟14 小时前
零信任架构实战:基于天远名下车辆车牌查询A构建自动化机动车辆资产清查网关
大数据·人工智能·架构·自动化
你的秋裤穿反了14 小时前
十. SCL 生成随机数
自动化
redfred16 小时前
HyperFrames 部署教程:5.6 万 Star 开源「写 HTML 出视频」框架,Windows 从零上手(CLI 三条命令 + 7 个避坑)
ffmpeg·开源·自动化·html·音视频
考研保研资料分享18 小时前
自动化与机器人保研经验:四校夏令营笔面试、英语考核及复习规划(2025)
面试·机器人·自动化
H_unique1 天前
Chat2Excel:接口自动化测试
python·测试工具·自动化
Chengbei111 天前
拒绝无效洞!蚂蚁Src榜一Clown 2.0 SRC SKill 第二代带状态闭环的白盒 & 黑盒审计 Skill
网络·人工智能·安全·web安全·网络安全·自动化·安全架构
熊猫钓鱼>_>2 天前
从闲置平板到家里的“控制大脑“:鸿蒙智慧中控面板完整实战
运维·人工智能·华为·自动化·电脑·ai编程·harmonyos