基于Python豆瓣自动化测试【2】

—— Pytest基础使用教程【2】

从测试讲述提及

承接上一篇中最后的测试效果图,使用过的pytest-html 插件原生态的讲述的话。可能会发现 内容样式都有些差别。实在是做了些扩展相关设置所出现的效果,固然可以定制的更深度一些,加倍中文、本地化,又或者凭据公司需要举行定向研发。例如就上文中的测试讲述举行一些中文定制革新后效果如下图所示。这篇就若何优化、定制pytest-html 测试讲述举行些解说
基于Python豆瓣自动化测试【2】

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工具,简朴看下源码,信赖使用上就能很好的掌握明白。要害部门见红框
基于Python豆瓣自动化测试【2】

【图机器学习】cs224w Lecture 13 & 14 – 影响力最大化 & 爆发检测

以是,这个扩展而言只需要 conftest.py 对于扩展hook中设置下report title字段就能够,按需修改题目。

@pytest.hookimpl(optionalhook=True)
def pytest_html_report_title(report):
	report.title = "豆瓣网自动化测试示例(基于Pytest)"

扩展Summary部门

Summary扩展设计,允许对于 整个模块举行定制。分为前(prefix)、中(summary)、后(postfix)三个部门举行设置。同样的 看下源码,更好的掌握若何来使用。要害部门见红框
基于Python豆瓣自动化测试【2】

实在,就是把 前中后三个部门的html拼接起来,中部(summary) 会有些插件默认的html内容。
基于Python豆瓣自动化测试【2】

以是,扩展使用上就很明晰了,只需要把html设置进去即可。

@pytest.hookimpl(optionalhook=True)
def pytest_html_results_summary(prefix, summary, postfix):
     prefix.extend([html.p("测试人: 姜子轩")])

Result 表格的扩展

可以分成两部门,一部门是表头的设置。同样的通过 cells 来天生 Result 表格的头部。
基于Python豆瓣自动化测试【2】

看完上述源码信赖,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。这两个的使用,同样先看下源码。
基于Python豆瓣自动化测试【2】

其中两个函数的要害点在于 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实现中进一步分享

若是对本文 深度定制中文版讲述 革新或者 是上文中扩展源码有兴趣的可以关注 民众号私信交流。

原创文章,作者:28qn新闻网,如若转载,请注明出处:http://www.28qn.com/archives/12878.html