zoukankan      html  css  js  c++  java
  • pytest文档20-pytest-html报告优化(添加Description)

    前言

    pytest-html测试报告默认是不展示用例描述Description内容,之前用unittest生成的报告是可以展示用例的描述,也就是test开头的用例下三个引号里面的注释(docstring)内容。
    pytest-html框架是可以修改生成的报告内容的,可以自己添加和删除html报告的table内容。

    修改报告

    pytest-html官方文档地址【https://pypi.org/project/pytest-html/】
    l可以通过为标题行实现自定义钩子来修改列,下面的示例在conftest.py脚本中使用测试函数docstring添加描述(Description)列,添加可排序时间(Time)列,并删除链接(Link)列:

    from datetime import datetime
    from py.xml import html
    import pytest
    
    @pytest.mark.optionalhook
    def pytest_html_results_table_header(cells):
        cells.insert(2, html.th('Description'))
        cells.insert(1, html.th('Time', class_='sortable time', col='time'))
        cells.pop()
    
    @pytest.mark.optionalhook
    def pytest_html_results_table_row(report, cells):
        cells.insert(2, html.td(report.description))
        cells.insert(1, html.td(datetime.utcnow(), class_='col-time'))
        cells.pop()
    
    @pytest.mark.hookwrapper
    def pytest_runtest_makereport(item, call):
        outcome = yield
        report = outcome.get_result()
        report.description = str(item.function.__doc__)
    

    还可以通过pytest_html_results_table_row 挂钩删除所有单元格来删除结果。下面的示例从报表中删除所有测试通过的结果:

    import pytest
    
    @pytest.mark.optionalhook
    def pytest_html_results_table_row(report, cells):
        if report.passed:
          del cells[:]
    

    日志输出和附加HTML可以通过pytest_html_results_table_html挂钩来修改。下面的示例清空测试通过的日志输出:

    import pytest
    
    @pytest.mark.optionalhook
    def pytest_html_results_table_html(report, data):
        if report.passed:
            del data[:]
            data.append(html.div('No log output captured.', class_='empty log'))
    

    添加Description

    通过上面的官方文档,可以自己修改下测试报告,在报告里面添加一列的内容,添加到第二列,于是修改如下,红色代码全部注释掉

    第三个@pytest.mark.hookwrapper,这个在之前测试报告里面添加截图时候,已经写过了,只需在最后加一句代码即可

    report.description = str(item.function.doc)

    代码参考

    from datetime import datetime
    from py.xml import html
    import pytest
    
    @pytest.mark.hookwrapper
    def pytest_runtest_makereport(item):
        """
        当测试失败的时候,自动截图,展示到html报告中
        :param item:
        """
        pytest_html = item.config.pluginmanager.getplugin('html')
        outcome = yield
        report = outcome.get_result()
        extra = getattr(report, 'extra', [])
    
        if report.when == 'call' or report.when == "setup":
            xfail = hasattr(report, 'wasxfail')
            if (report.skipped and xfail) or (report.failed and not xfail):
                file_name = report.nodeid.replace("::", "_")+".png"
                screen_img = _capture_screenshot()
                if file_name:
                    html = '<div><img src="data:image/png;base64,%s" alt="screenshot" style="600px;height:300px;" ' 
                           'onclick="window.open(this.src)" align="right"/></div>' % screen_img
                    extra.append(pytest_html.extras.html(html))
            report.extra = extra
            report.description = str(item.function.__doc__)
    
    @pytest.mark.optionalhook
    def pytest_html_results_table_header(cells):
        cells.insert(1, html.th('Description'))
    
    @pytest.mark.optionalhook
    def pytest_html_results_table_row(report, cells):
        cells.insert(1, html.td(report.description))
    

    效果展示

    修改完之后cmd运行

    pytest --html=report.html --self-contained-html

    ---------------------------------pytest结合selenium自动化完整版-------------------------

    全书购买地址 https://yuedu.baidu.com/ebook/902224ab27fff705cc1755270722192e4536582b

    作者:上海-悠悠 QQ交流群:874033608

    也可以关注下我的个人公众号:yoyoketang

  • 相关阅读:
    读书小记--<态度>
    frp 使用基础笔记
    ACM ICPC 2018 青岛赛区 部分金牌题题解(K,L,I,G)
    简单粗暴!解决锐捷强制关闭VMware NAT Service的问题(图文教程)
    杜教筛使用心得
    在阿里云的轻量级服务器上装桌面
    2018多校第三场 hdu6331 M :Walking Plan
    数论题集合
    hihoCoder挑战赛34 B题(快速求第k轮冒泡排序的结果)
    一阶微分边缘检测算子
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/9748718.html
Copyright © 2011-2022 走看看