基于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 ...
随机推荐
- spark是怎么从RDD升级到DataFrame的?
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是spark专题的第五篇,我们来看看DataFrame. 用过Python做过机器学习的同学对Python当中pandas当中的Data ...
- 一文教你快速修改ubuntu终端显示的主机名和用户名
为了让终端的显示更加简洁,清爽,改掉显示的用户名和主机名,改成你喜欢的名字. 创作不易,如果本文帮到了您: 如果本文帮到了您,请帮忙点个赞
- DoNet:浅淡对delegate的理解
1 前言 C#的相关文档,MSDN上其实已经很详细了,关于delegate的使用可以参 考MSDN上的文档https://msdn.microsoft.com/zh-cn/library/900fyy ...
- 局域网ip地址扫描_v1版本
局域网ip地址扫描 工作中,我们有时需要对局域网中ip地址使用情况进行统计.可以使用shell脚本进行扫. 脚本功能: 在线使用IP写入list_online.txt文件 未在线IP写入list_of ...
- SEO策略之关键词选择的原则
策略就是指为了实现某一个目标而预先制定的能够实施的方案.在制定SEO策略的时候,我们需要了解网站所有的基本情况,同时又要对网站所处的行业的竞争对手有一个准确的数据分析.SEO策略有几个比较突出的属性: ...
- 放大镜功能 JS原生写法
********** 希望对大家帮助 我会继续努力的 如果有不对的地方请大家帮忙指出****** 1 [JS 代码] <script> var oBox = document.getEle ...
- shell脚本命令 运行python文件&python命令行运行python代码
单独的python文件运行的时候 报错: 在shell脚本中,运行shell脚本命令:在Python命令行中,运行Python代码.然而,“python hello.py”是一个脚本命令,不是pyth ...
- cpu 风扇的影响
公司电脑前段时间莫名死机,跳电,看了一下,电源是杂牌货.功率也只有200w 出头点,我一开始怀疑是电源问题,后来看了一下温度,傻眼了. 正好有图存着,贴出来. cpu 使用率高的时候,温度能有90多度 ...
- 旧版flexbox局部填坑
本来昨晚要写一篇react的小笔记,恰好同学小聚的时候附近有个ios维修,把我的4s拿去修好,早上用我还是ios5.1系统的4s打开自己的页面,发现flexbox布局的部分是乱的,眼前一黑. what ...
- JSP中System.out.println()与out.println()区别
1.out.println()输出到客户端. 在out.println()中,out是response的实例,是以response为对象进行流输出的,即将内容输出到客户端. 如果在JSP页面中使用Sy ...