基于Python豆瓣自动化测试

发表于:2020-6-11 11:34

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:姜子轩    来源:博客园

  从测试报告说起
  承接上一篇中最后的测试结果图,使用过的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 函数 中。在本篇中就不深入来说实现

      本文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号