pytest学习和使用-HTML报告如何生成?(pytest-html)_from py,赶快收藏备战金九银十

185 阅读4分钟

* 插件版本查看:



C:\Users\Administrator>pip show pytest-html Name: pytest-html Version: 2.0.1 Summary: pytest plugin for generating HTML reports Home-page: github.com/pytest-dev/… Author: Dave Hunt Author-email: dhunt@mozilla.com License: Mozilla Public License 2.0 (MPL 2.0) Location: d:\python37\lib\site-packages Requires: pytest, pytest-metadata Required-by:


### 3 生成报告



#### 3.1 插件执行方式


* 使用如下命令在命令行执行:



pytest --html=report.html


* 执行后,在当前目录下生成一个吗,名为`report.html`的报告:![在这里插入图片描述](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/09e03a18765a4956a467199de84bcd21~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzIxMjA3NDIwNDUy:q75.awebp?rk3s=f64ab15b&x-expires=1771738714&x-signature=NDVT2NZ5wYLKyUiH%2FZw7FLmPNQQ%3D)


#### 3.2 执行效果


![](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/4a20e1c05fcb445d860b5f46b7362e90~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzIxMjA3NDIwNDUy:q75.awebp?rk3s=f64ab15b&x-expires=1771738714&x-signature=b3Q8MNxjTj5FJwRTPXqzNhNdUiI%3D)


在这里插入图片描述


#### 3.3 指定报告生成的路径


* 当前目录下:



pytest --html=report.html


* 指定目录下:



pytest --html=./report/report.html


![](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/03dbec1d5fa642b8ac996df154450f3a~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzIxMjA3NDIwNDUy:q75.awebp?rk3s=f64ab15b&x-expires=1771738714&x-signature=G7f5izh%2Bb1VD5mMoLlFvJVHDKSk%3D)


在这里插入图片描述


* 指定某个用例运行,生成报告保存到指定目录下:



pytest --html=./report/report.html


![](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/681312fe60e3465fb64011532e1329d0~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzIxMjA3NDIwNDUy:q75.awebp?rk3s=f64ab15b&x-expires=1771738714&x-signature=n3VSY45KdTX0iTdlngvpqz2r%2FSc%3D)


在这里插入图片描述


### 4 合并css


* 从生成的报告可以看出,除了`report.html`外,还有个文件`style.css`;
* 这个文件是报告的样式,是独立的,那么我们分享报告的时候,就必须把这个样式也加上,比较麻烦:

 ![](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/2fe151e3f77b40918a9ab172a4f42cf9~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzIxMjA3NDIwNDUy:q75.awebp?rk3s=f64ab15b&x-expires=1771738714&x-signature=I%2B%2FnjZW4%2F1DM4tyIWTnA7fkxhrE%3D)



body { font-family: Helvetica, Arial, sans-serif; font-size: 12px; /* do not increase min-width as some may use split screens */ min-width: 800px; color: #999; }

h1 { font-size: 24px; color: black; }

h2 { font-size: 16px; color: black; }

p { color: black; }

a { color: #999; }

table { border-collapse: collapse; }

/******************************

  • SUMMARY INFORMATION ******************************/

#environment td { padding: 5px; border: 1px solid #E6E6E6; }

#environment tr:nth-child(odd) { background-color: #f6f6f6; }

/******************************

  • TEST RESULT COLORS ******************************/ span.passed, .passed .col-result { color: green; } span.skipped, span.xfailed, span.rerun, .skipped .col-result, .xfailed .col-result, .rerun .col-result { color: orange; } span.error, span.failed, span.xpassed, .error .col-result, .failed .col-result, .xpassed .col-result { color: red; }

/******************************

  • RESULTS TABLE
    1. Table Layout
    1. Extra
    1. Sorting items

******************************/

/*------------------

    1. Table Layout ------------------/

#results-table { border: 1px solid #e6e6e6; color: #999; font-size: 12px; width: 100% }

#results-table th, #results-table td { padding: 5px; border: 1px solid #E6E6E6; text-align: left } #results-table th { font-weight: bold }

/*------------------

  • 2. Extra ------------------/

.log:only-child { height: inherit } .log { background-color: #e6e6e6; border: 1px solid #e6e6e6; color: black; display: block; font-family: "Courier New", Courier, monospace; height: 230px; overflow-y: scroll; padding: 5px; white-space: pre-wrap } div.image { border: 1px solid #e6e6e6; float: right; height: 240px; margin-left: 5px; overflow: hidden; width: 320px } div.image img { width: 320px } .collapsed { display: none; } .expander::after { content: " (show details)"; color: #BBB; font-style: italic; cursor: pointer; } .collapser::after { content: " (hide details)"; color: #BBB; font-style: italic; cursor: pointer; }

/*------------------

  • 3. Sorting items ------------------/ .sortable { cursor: pointer; }

.sort-icon { font-size: 0px; float: left; margin-right: 5px; margin-top: 5px; /triangle/ width: 0; height: 0; border-left: 8px solid transparent; border-right: 8px solid transparent; }

.inactive .sort-icon { /finish triangle/ border-top: 8px solid #E6E6E6; }

.asc.active .sort-icon { /finish triangle/ border-bottom: 8px solid #999; }

.desc.active .sort-icon { /finish triangle/ border-top: 8px solid #999; }


* 所以为了方便,我们把这个`css`样式合并到`html`里,命令如下:



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


* 再次运行报告查看下,此时只有`report.html`文件,且样式已经合并进来了:

 ![](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/48dc9a50034a42858f0d090d1da76760~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzIxMjA3NDIwNDUy:q75.awebp?rk3s=f64ab15b&x-expires=1771738714&x-signature=AcQ42f3NkkM8ACb%2FJytSrALi4nA%3D)


### 5 报告中的行显示设置


* 默认生成功的报告中的所有行都是被展开的,如图:

 ![](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/5b0bd229c7ab4411b387c2e11d2864e9~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzIxMjA3NDIwNDUy:q75.awebp?rk3s=f64ab15b&x-expires=1771738714&x-signature=%2FcjlG78SXX7jKqGl0HM9L%2BOLsyI%3D)
* 我们可以自定义显示的样式:



?collapsed=Passed,XFailed,Skipped


### 6 报告增强


详细参考官网文档:https://github.com/pytest-dev/pytest-html


#### 6.1 自定义css


* 可以使用`--CSS`选项在命令行上传递自定义`CSS`

$ pytest --html=report.html --css=highcontrast.css --css=accessible.css


#### 6.2 报告标题


* 默认情况下,报告标题将是报告的文件名;
* 您可以使用`pytest_html_report_title`钩子对其进行编辑:



def pytest_html_report_title(report): report.title = "My very own title!"


#### 6.3 环境


* `Environment`部分由`pytest-metadata`插件提供;
* 可以通过`pytest_configure``pytest_sessionfinish`钩子访问;
* 要在运行测试之前修改`Environment`部分,请使用`pytest_configure`

def pytest_configure(config): config._metadata["foo"] = "bar"


* 要在测试运行后修改`Environment`部分,请使用`pytest_sessionfinish`

import pytest

@pytest.hookimpl(tryfirst=True) def pytest_sessionfinish(session, exitstatus): session.config._metadata["foo"] = "bar"




> 

> 请注意,在上面的示例中,@pytest.hookimpl(tryfirst=True)非常重要,因为这可以确保在任何其他插件(包括pytest-html和pytest-metadata)运行之前尽最大努力运行pytest\_sessionfinish。如果省略了这一行,那么Environment表将不会更新,因为插件的pytest\_sessionfinish将首先执行,因此不会接受您的更改。

> 

> 

> 





> 

> 除非元数据是集合.OrderedDict,否则生成的表将按字母顺序排序。

> 

> 

> 





> 

> 可以从环境表中编辑变量。重做的变量将显示其名称,但其值将灰显。这可以通过在INI配置文件(例如:pytest.INI)中设置environment\_table\_redact\_list来实现。environment\_table\_redact\_list是正则表达式的行列表。与此列表中的正则表达式匹配的任何环境表变量都会对其值进行编校。

> 

> 

> 





> 

> 例如,以下命令将对与正则表达式^foo$、.\*redact.\*或bar匹配的所有环境表变量进行编校:

> 

> 

> 




[pytest] environment_table_redact_list = ^foo$ .redact. bar


#### 6.4 其他摘要信息


* 可以使用`pytest_html_results_Summary`挂钩编辑`Summary`部分:



from py.xml import html

def pytest_html_results_summary(prefix, summary, postfix): prefix.extend([html.p("foo: bar")])


#### 6.5 Extra内容


* 可以通过在报告对象上创建“`extra`”列表来向`HTML`报告添加详细信息;
* 以下是可以添加的`extra` 内容类型:




| Type | Example |
| --- | --- |
| Raw HTML | `extra.html('<div>Additional HTML</div>')` |
| JSON | `extra.json({'name': 'pytest'})` |
| Plain text | `extra.text('Add some simple Text')` |
| URL | `extra.url('http://www.example.com/')` |
| Image | `extra.image(image, mime_type='image/gif', extension='gif')` |
| Image | `extra.image('/path/to/file.png')` |
| Image | `extra.image('http://some_image.png')` |


![img](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/2c3fc676b8fe4e1e9714c095383e5415~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzIxMjA3NDIwNDUy:q75.awebp?rk3s=f64ab15b&x-expires=1771738714&x-signature=PAGTI%2F6arPYTzxUTJJf1WdTMhXA%3D)
![img](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/f6ee5e41215341f69276cf3ab63a9d37~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzIxMjA3NDIwNDUy:q75.awebp?rk3s=f64ab15b&x-expires=1771738714&x-signature=z%2FGxDY%2FmSmf4vagt7%2BKCnIaRhg4%3D)
![img](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/2c9227db6f3b4f38bc833348bc3b223a~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzIxMjA3NDIwNDUy:q75.awebp?rk3s=f64ab15b&x-expires=1771738714&x-signature=2eykahLuIic46ahpu6TsZL3sYHg%3D)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!**

**开源项目:docs.qq.com/doc/DSlVlZExWQ0FRSE9H**