zoukankan      html  css  js  c++  java
  • 基于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。具体来说如下:

    具体代码演示。

    @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 函数 中。在本篇中就不深入来说实现,计划在后续 pytest插件研发、Pytest-html实现中进一步分享

    如果对本文 深度定制中文版报告 改造或者 是上文中扩展源码有兴趣的可以关注 公众号私信交流。

  • 相关阅读:
    Hash碰撞 & 拒绝服务漏洞
    Java: 在不同windows主题下,JFrame窗口设置最佳高度的解决方案
    java: 关于从jar中读取资源遇到的问题getClass().getResource(...)
    Windows 服务程序、窗口界面、桌面交互、与远程桌面
    MySQL用户与权限管理
    Linux 用户与用户组
    书单整理
    2013年个人工作与学习总结
    Raphaël.js学习笔记
    Ant学习笔记(2) 在Eclipse中使用Ant
  • 原文地址:https://www.cnblogs.com/jzhlin/p/12989263.html
Copyright © 2011-2022 走看看