基于Python豆瓣自动化测试【2】
—— Pytest基础使用教程【2】
从测试报告说起
承接上一篇中最后的测试结果图,使用过的pytest-html 插件原生态的报告的话。可能会发现 内容样式都有些不同。其实是做了些扩展相关设置所呈现的效果,当然可以定制的更深度一些,更加中文、本地化,又或者根据公司需要进行定向研发。例如就上文中的测试报告进行一些中文定制改造后效果如下图所示。这篇就如何优化、定制pytest-html 测试报告进行些讲解

Pytest-html 扩展
目前最新的 pytest-html版本为2.1.1 。这个版本共提供 5个Hook,分别是:
def pytest_html_report_title(report)
设置测试报告的标题
def pytest_html_results_summary(prefix, summary, postfix)
在Summary部分,添加自定义内容
def pytest_html_results_table_header(cells)
定制 Result 部分,表单的头部
def pytest_html_results_table_row(report, cells)
定制Result部分,每行测试Case的内容
def pytest_html_results_table_html(report, data)
在完成Result渲染后,详情新增写HTMl标记语言内容
测试报告Title
所谓Title指代的是报告图中【豆瓣网自动化测试示例(基于Pytest)】行文字内容。Report 其实是 插件的HTMLReport对象,简单看下源码,相信使用上就能很好的把握理解。关键部分见红框

所以,这个扩展而言只需要 conftest.py 对于扩展hook中设置下report title字段就能够,按需修改标题。
@pytest.hookimpl(optionalhook=True)
def pytest_html_report_title(report):
report.title = "豆瓣网自动化测试示例(基于Pytest)"
扩展Summary部分
Summary扩展设计,允许对于 整个模块进行定制。分为前(prefix)、中(summary)、后(postfix)三个部分进行设置。同样的 看下源码,更好的把握如何来使用。关键部分见红框

其实,就是把 前中后三个部分的html拼接起来,中部(summary) 会有些插件默认的html内容。

所以,扩展使用上就很明晰了,只需要把html设置进去即可。
@pytest.hookimpl(optionalhook=True)
def pytest_html_results_summary(prefix, summary, postfix):
prefix.extend([html.p("测试人: 姜子轩")])
Result 表格的扩展
可以分成两部分,一部分是表头的设置。同样的通过 cells 来生成 Result 表格的头部。

看完上述源码相信,pytest_html_results_table_header 使用上就非常明确了。主要就是对cells进行操作。
@pytest.hookimpl(optionalhook=True)
def pytest_html_results_table_header(cells):
cells.insert(2, html.th('模块'))
cells.insert(3, html.th('描述'))
cells.insert(4, html.th('时间', class_='sortable time', col='time'))
cells.pop()
对于每一行数据进行扩展上,也就是 pytest_html_results_table_row、pytest_html_results_table_html。这两个的使用,同样先看下源码。

其中两个函数的关键点在于 report 参数,cells 与 data用来制定扩展的html标签,而内容上通过 report 来进行透传。所以 这里一般会结合pytest内置的hook来使用,pytest_runtest_makereport。具体来说如下:
{{uploading-image-119142.png(uploading...)}}
具体代码演示。
@pytest.hookimpl(optionalhook=True)
def pytest_html_results_table_row(report, cells):
cells.insert(2, html.td(report.module))
cells.insert(3, html.td(report.description))
cells.insert(4, html.td(datetime.utcnow(), class_='col-time'))
cells.pop()
@pytest.hookimpl(hookwrapper=True)
def pytest_runtest_makereport(item, call):
outcome = yield
report = outcome.get_result()
report.description = str(item.function.__doc__)
report.module = str(item.module.__doc__)
report.nodeid = report.nodeid.encode("utf-8").decode("unicode_escape")
深度定制
以上内容,可以看到Pytest-html v2.1.2版本 提供的全部扩展功能,能够对 title、summary、table 进行内容扩展研发。不过,无法实现本文最前面全中文报告。所以 想要完美 的根据公司、业务需求改造,这里提供一个思路方法可以将 Pytest-html 源码下载下来进行改造。其 整体的实现并不复杂,主要逻辑 在 plugin.py 里面。
{{uploading-image-431444.png(uploading...)}}
其中,整个报告的生成 在 _generate_report 函数 中。在本篇中就不深入来说实现,计划在后续 pytest插件研发、Pytest-html实现中进一步分享
如果对本文 深度定制中文版报告 改造或者 是上文中扩展源码有兴趣的可以关注 公众号私信交流。
基于Python豆瓣自动化测试【2】的更多相关文章
- Jenkins持续集成项目搭建与实践——基于Python Selenium自动化测试(自由风格)
Jenkins简介 Jenkins是Java编写的非常流行的持续集成(CI)服务,起源于Hudson项目.所以Jenkins和Hudson功能相似. Jenkins支持各种版本的控制工具,如CVS.S ...
- 基于Python接口自动化测试框架+数据与代码分离(进阶篇)附源码
引言 在上一篇<基于Python接口自动化测试框架(初级篇)附源码>讲过了接口自动化测试框架的搭建,最核心的模块功能就是测试数据库初始化,再来看看之前的框架结构: 可以看出testcase ...
- Appium基于Python unittest自动化测试 & 自动化测试框架 -- PO并生成html测试报告
基于python单元测试框架unittest完成appium自动化测试,生成基于html可视化测试报告 代码示例: #利用unittest并生成测试报告 class Appium_test(unitt ...
- Appium基于python unittest自动化测试并生成html测试报告
本文基于python单元测试框架unittest完成appium自动化测试,生成基于html可视化测试报告 代码示例: #利用unittest并生成测试报告 class Appium_test(uni ...
- 基于Pytest豆瓣自动化测试【1】
-- Pytest基础使用教程[1] 引言 Pytest 是一个非常实用的自动化测试框架,目前来说资料也是非常多了.最近某友人在学习 Python的一些测试技术,帮其网上搜了下教程:发现大多数文章多是 ...
- 基于python的自动化测试框架搭建
滴~ 今日打卡! 好多天没来打卡了.博主最近一直在把碎片化知识转化为知识体系的过程中挣扎.Python语言.selenium.unittest框架.HTMLTestRunner框架都有所了解,也写 ...
- 基于python的自动化测试简介【十年从业大佬】
一.自动化测试包括以下几个方面: 1. 常用测试工具: (1)QTP:主要用于回归测试和测试同一软件的新版本 (2)Robot Framwork:python编写的功能自动化测试框架,具有良好的可扩展 ...
- 基于Python接口自动化测试框架(初级篇)附源码
引言 很多人都知道,目前市场上很多自动化测试工具,比如:Jmeter,Postman,TestLink等,还有一些自动化测试平台,那为啥还要开发接口自动化测试框架呢?相同之处就不说了,先说一下工具的局 ...
- [转载]Jenkins持续集成项目搭建与实践——基于Python Selenium自动化测试 -2
自己的代码 import unittest # import HTMLTestRunner_cn as HTMLTestRunner import xmlrunner import sys sys.p ...
随机推荐
- celery的定时任务
定时任务 Celery 中启动定时任务有两种方式,(1)在配置文件中指定:(2)在程序中指定. # cele.py import celery app = celery.Celery('cele', ...
- mysql5.7 修改密码,修改权限
1.修改数据库对指定用户和ip权限 a. IP为192.168.0.1的用户jack拥有对数据库datebase的表table的 增删改查权限, ,连接密码为password grant select ...
- linux进程管理相关命令
ps ps aux ps -ef | grep -E "supervisor|PPID" top 可以按一定规则对top的结果进行排序 # 监控单一进程 top -p pid ...
- P1635 跳跃
传送门 观察到\(4x+3=2(2x+1)+1\)以及\(8x+7=2(2(2x+1)+1)+1\) 所以可以把\(xx->2x+12x+1\)当成一个基本变化 则\(xx->4x+3\) ...
- 你离高薪 offer 只差一个Redis入门,我是认真的
说起来,可能有些小伙伴会不相信,我是第一次用 Redis,真的.因为公司小,业务量小,Redis 根本派不上用场.不过,最近打算把系统升级一下,顺带把当下时髦的技术入个门,"与时俱进&quo ...
- blesta运行造成阿里云服务器CPU频繁超载的原因分析
博主在阿里云服务器上安装了主机软件Blesta后,阿里云后台频繁提示CPU超载,打开突发性能模式后,发现CPU负载到了100%.如下图所示: 直接在putty里面reboot整个系统后,负载瞬间降为2 ...
- Linux设备模型之kobject
阿辉原创,转载请注明出处 参考文档:LDD3-ch14.内核文档Documentation/kobject.txt,本文中使用到的代码均摘自Linux-3.4.75 ----------------- ...
- 使用npoi导入Excel - 带合并单元格--附代码
之前我们在使用npoi导入excel表格的时候,往往会遇见那种带有合并单元格的数据在导入的时候出现合并为空的问题, 也就是只有第一条有数据,其余均为空白.在网上翻了半天也没有找到合适的解决方案,最后还 ...
- Luogu P3846 BSGS算法
https://www.luogu.com.cn/problem/P3846 BSGS这个东西是用来干啥的? 形如下面这个式子: \[a^b = c\;(mod\;p) \] 其中:p是一个质数.\( ...
- SpringData表关系:多对多
一.编写实体类配置关联关系: 1.多对多使用注解@ManyToMany配置:a. 在实体中添加一个集合属性 b.在属性上添加ManyToMany注解 c.@JoinTable 注解配置关联关系(nam ...