HTMLTestRunner生成测试报告时,报告的标题在运行前就已经写死在代码了,假如我现在需要在执行完毕后,根据执行结果,把执行的状态写在标题里面,类似的效果如图:

标题

如果有一条执行错误的,就在后面加ERROR,如果有一条执行失败的,就在后面加FAIL,如果都通过,就在后面加PASS

要达到这个效果,我们就要研究,HTMLTestRunner里面是怎么生成报告的标题的

在HTMLTestRunner类的run()方法里面,有一句self.generateReport(test, result)

def run(self, test):

"Run the given test case or test suite."

result = _TestResult(self.verbosity)

test(result)

self.stopTime = datetime.datetime.now()

self.generateReport(test, result)

print('\nTime Elapsed: %s' % (self.stopTime-self.startTime), file=sys.stderr)

return result

很显然,generateReport是生成测试报告的方法,继续研究这个方法

def generateReport(self, test, result):

report_attrs = self.getReportAttributes(result)

generator = 'HTMLTestRunner %s' % __version__

stylesheet = self._generate_stylesheet()

heading = self._generate_heading(report_attrs)

report = self._generate_report(result)

ending = self._generate_ending()

output = self.HTML_TMPL % dict(

title = saxutils.escape(self.title),

generator = generator,

stylesheet = stylesheet,

heading = heading,

report = report,

ending = ending,

)

self.stream.write(output.encode('utf8'))

我们分别研究这里面的几个self的方法,发现self._generate_heading很可疑

def _generate_heading(self, report_attrs):

a_lines = []

for name, value in report_attrs:

line = self.HEADING_ATTRIBUTE_TMPL % dict(

name = saxutils.escape(name),

value = saxutils.escape(value),

)

a_lines.append(line)

heading = self.HEADING_TMPL % dict(

title = saxutils.escape(self.title),

parameters = ''.join(a_lines),

description = saxutils.escape(self.description),

)

return heading

看源码,这确实是处理报告头部信息的方法,包括标题,描述,测试结果等等,那么就可以改造了。现在我们需要根据测试结果,来重新定义标题,而该方法中没有测试结果相关的内容,所以我们把测试结果当成参数传进来,而在这里面,测试结果都是result,所以这里可以改造为:

def _generate_heading(self, report_attrs, result):

a_lines = []

for name, value in report_attrs:

line = self.HEADING_ATTRIBUTE_TMPL % dict(

name=saxutils.escape(name),

value=saxutils.escape(value),

)

a_lines.append(line)

# 在标题中显示当前测试任务的结果

if result.error_count > 0:

self.title = self.title + ' --[ERROR]'

elif result.failure_count > 0:

self.title = self.title + ' --[FAIL]'

else:

self.title = self.title + ' --[PASS]'

heading = self.HEADING_TMPL % dict(

title=saxutils.escape(self.title),

parameters=''.join(a_lines),

description=saxutils.escape(self.description)

)

return heading

那么相应的generateReport方法中

heading = self._generate_heading(report_attrs)

需要修改为

heading = self._generate_heading(report_attrs, result)

再次执行测试任务,就可以根据测试任务的结果显示标题了

编写了html怎么测试,如何将测试结果写入HTMLTestRunner生成的报告标题中相关推荐

  1. 怎样编写测试类测试分支_测试技巧–不编写测试

    怎样编写测试类测试分支 对此没有太多疑问,测试代码的方式是一个有争议的问题. 不同的测试技术由于各种原因(包括企业文化,经验和总体心理观点)而受到不同开发人员的青睐. 例如,您可能更喜欢编写经典的单元 ...

  2. 使用python构造大量测试数据_python实例编写(6)--引入unittest测试框架,构造测试集批量测试(以微信统一管理平台为例)...

    ---恢复内容开始--- 一.python单元测试实例介绍 unittest框架又叫PyUnit框架,是python的单元测试框架. 先介绍一个普通的单元测试(不用unittest框架)的实例: 首先 ...

  3. /*按要求编写一个Java应用程序程序:(1)定义一个接口CanFly,描述会飞的方法public void fly();(2)分别定义类飞机和鸟,实现CanFly接口。(3)定义一个测试类,测试飞机

    /* 按要求编写一个Java应用程序程序: (1)定义一个接口CanFly,描述会飞的方法public void fly(); (2)分别定义类飞机和鸟,实现CanFly接口. (3)定义一个测试类, ...

  4. 编写测试用例基本要求、非功能性测试和状态迁移法介绍

    编写测试用例基本要求 1.项目测试流程 (1)需求评审 (2)编写测试计划与测试方案 (3)测试用例设计与评审 (4)测试执行与BUG跟踪 (5)编写测试报告 2.测试用例需求来源 (1)需求说明书, ...

  5. 使用 Android Studio 进行测试 (二) UI 测试

    目录 单元测试 UI 测试 原文链接: Unit and UI Testing in Android Studio 2. UI 测试 配置 编码 测试 2.1 配置 2.1.1 IDE 配置 Buil ...

  6. 【星云测试】开发者测试-采用精准测试工具对Spring Boot应用进行测试

    2019独角兽企业重金招聘Python工程师标准>>> 简介:本文主要介绍把现今主流的springboot框架项目和精准测试工具进行结合和应用,通过精准测试的数据穿透.数据采集.测试 ...

  7. 利用 Rize 来进行 UI 测试或 E2E 测试

    之前我曾经在<Rize - 一个可以让你简单.优雅地使用 puppeteer 的 Node.js 库>一文简单介绍过 Rize 这个库.当时仅仅是介绍这个库本身,关于如何使用,我没有给太多 ...

  8. 【Java单元测试】如何进行单元测试、异常测试、参数化测试、超时测试、测试多线程

    Junit单元测试的步骤 (1)新建一个单元测试 (2)选择位置 (3)选择需要测试的方法 (4)是否将Junit 4添加到ClassPath中 (5)自动生成的测试类 (6) 然后就可以编写单元测试 ...

  9. CETK测试原理/测试方法/测试结果分析以及常见WinCE Test Kit运行问题的排查

    小弟这两天学习和分析了CETK,并总结了一份文档,粘贴出来,希望对各位有用. 因为文章有26页,没有办法在一篇帖子中罗列出来,我分好几个帖子进行罗列. CONTENT 一.CETK概述... 1 1. ...

最新文章

  1. IETester-IE兼容性测试工具
  2. 栈应用之 括号匹配问题(Python 版)
  3. Acwing第 25 场周赛【完结】
  4. CTF-压缩包密码CRC爆解工具安装
  5. Linux tar将分割的小文件进行合并
  6. ubuntu下命令行启动vmware某个虚拟机
  7. mysql+rownumber的用法_mysql中如何实现row_number
  8. 指数函数中x的取值范围_谨记!高考数学中容易出错的几个地方
  9. html 生成image java makenoise,[图形学] 柏林噪声 (perlin noise)
  10. Js 正则表达式截取html内容,如何从JavaScript中的字符串中剥离HTML(仅提取文本内容)...
  11. 【java】的传值方式
  12. 【滤波器】基于matlab GUI低通+带通+高通FIR与IIR滤波器设计【含Matlab源码 360期】
  13. linux 终止作业任务命令,linux-尝试终止进程时出错—“ kill:pid:参数必须是进程或作业ID”...
  14. 【POJ 3276】【开关问题】Face The Right Way【暑期 No.4】
  15. 深圳最新10区地图划分JSON
  16. 直播APP开发如何得到用户青睐?
  17. 联想笔记本电脑BIOS中英文对照
  18. Python替换月份为英文缩写
  19. CVPR 2019 论文汇总(按方向划分,0506 更新中)
  20. Java正则表达式简单入门

热门文章

  1. python多线程操作字典_在Python中使用带有线程的全局字典
  2. mybatis使用truncate清除表数据
  3. PLSQL 查询结果只显示年月日不显示时分秒的解决方法
  4. vue-cli多环境配置
  5. (需求实战_终章) SpringBoot2.x 整合RabbitMQ
  6. JFinalOA导出Excel
  7. Centos7 Docker容器操作_入门试炼03
  8. 解决Git Log在IDEA中乱码的问题
  9. window下远程监控linux下tomcat的jvm
  10. 工作簿长时间空闲时自动关闭