来源:博客园
从测试报告说起
使用过的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。具体来说如下:
具体代码演示。
@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__)
深度定制
以上内容,可以看到Pytest-html v2.1.2版本 提供的全部扩展功能,能够对 title、summary、table 进行内容扩展研发。不过,无法实现本文最前面全中文报告。所以 想要完美 的根据公司、业务需求改造,这里提供一个思路方法可以将 Pytest-html 源码下载下来进行改造。其 整体的实现并不复杂,主要逻辑 在 plugin.py 里面。
其中,整个报告的生成 在 _generate_report 函数中,在本篇中不再深入说明。
本书第1章与第2章介绍软件单元测试的概念和基础知识。
-
第1章简单介绍软件单元测试所包含的概念,包括桩对象和测试驱动函数、测试驱动开发、软件测试贯彻始终、软件测试金字塔、单元测试在传统/敏捷开发模式中的地位、精准测试、单元测试和白盒测试,以及单元测试的FIRST原则和AIR原则。
-
第2章介绍软件单元测试基础知识,包括动态自动化/手工单元测试、静态自动化/手工单元测试。在动态自动化单元测试中介绍了语句覆盖、分支覆盖、条件覆盖、条件/分支覆盖、MC/DC、路径覆盖和控制流覆盖。
第3章到第5章介绍C语言、Java语言和Python语言的单元测试框架。
-
第3章介绍C语言动态自动化单元测试框架,包括在Windows下安装C语言运行环境、在Windows和Linux下安装编译CUnit、查看测试报告、CUnit介绍和案例。
-
第4章介绍Java语言动态自动化单元测试框架,包括在Eclipse中创建Maven项目和配置JUnit与TestNG运行环境、JUnit 4测试框架、JUnit 5测试框架、TestNG测试框架、测试替身、变异测试、利用EvoSuite自动生成测试用例,以及在Jenkins中配置JUnit 4、JUnit 5、TestNG和Allure。
-
第5章介绍Python语言动态自动化单元测试框架,包括unittest、Pytest及Python的模拟对象和变异测试工具mutpy。
第6章与第7章介绍代码覆盖率工具和代码语法规范检查工具。
-
第6章介绍代码覆盖率工具,包括C语言覆盖率工具gcov和lcov、Java语言覆盖率工具JaCoCo,以及Python语言覆盖率工具Coverage和pytest-cov。
-
第7章介绍代码语法规范检查工具,包括Java语言静态分析工具PMD、Python语言静态分析工具flake8和pylint,以及多代码语法规范检查平台SonarQube。
-
第8章通过两个案例详细介绍TDD。
读者可以根据自己的需求对以上内容进行选择性阅读或者全部阅读。另外,为了巩固大家的学习效果,每一章结尾都有相应的习题。
顾翔凡言:人工智能未来的发展瓶颈在于对知识的更新。唯一不变的是变化,知识发生了变化,人工智能软件能否及时跟进变化,可能阻碍人工智能的使用。
原文始发于微信公众号(啄木鸟软件测试):基于Python豆瓣自动化测试
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论