相关文章推荐
行走的豆芽  ·  python ...·  1 年前    · 
兴奋的地瓜  ·  JSON.parse(JSON.string ...·  1 年前    · 

pytest之测试报告插件(pytest-html)

前言

我们在测试完成之后需要查看测试用例的执行结果,pytest-html就可以帮助我们在测试完成后生成html格式的测试报告,pytest-html是一个插件,pytest可以使用pytest-html来生成html测试报告。

pytest-html插件安装

pip install pytest-html

执行命令

pytest --html=report.html

pytest之测试报告插件(pytest-html)  || pytest-html测试报告的优化(测试报告标题修改、Environment修改、Summary修改)_html

执行上述命令之后,会在当前目录下生成一个report.html的报告文件,展示效果如下:

pytest之测试报告插件(pytest-html)  || pytest-html测试报告的优化(测试报告标题修改、Environment修改、Summary修改)_html_02

指定报告的生成路径

直接执行:pytest --html=report.html  命令生成的报告会在当前目录下;

如果需要指定报告的存放路径,例如报告存放在当前目录下的report文件夹下,可以执行下面的命令:

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

报告独立展示

上面的方法生成的pytest-html测试报告,css是独立的;

但是如果将该pytest-html测试报告分享给他人,那么此测试报告的css样式就会丢失;

为了能更好的分享发邮件展示报告,可以 将css样式合并到html中 ,执行以下命令:

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

pytest-html官方文档

pytest-html官方文档和源码地址:​ ​https://github.com/pytest-dev/pytest-html​

pytest-html测试报告的优化(报告标题修改、Environment修改、Summary修改、pytest执行失败发送邮件)

一、pytest-html标题更改

①查看原始pytest-html报告:

pytest之测试报告插件(pytest-html)  || pytest-html测试报告的优化(测试报告标题修改、Environment修改、Summary修改)_测试用例_03

②修改项目根目录的 conftest.py

③通过pytest的hook功能,新添加一个 pytest_html_report_title

def pytest_html_report_title(report):
report.title = "pytest示例项目测试报告"

pytest之测试报告插件(pytest-html)  || pytest-html测试报告的优化(测试报告标题修改、Environment修改、Summary修改)_测试用例_04

④重新运行测试用例,查看测试报告:可以看到此时pytest-html测试报告的标题已经修改成功。

pytest之测试报告插件(pytest-html)  || pytest-html测试报告的优化(测试报告标题修改、Environment修改、Summary修改)_测试报告_05

二、pytest-html Environment更改

①在报告中有一个Environment环境变量选项,如图所示:

pytest之测试报告插件(pytest-html)  || pytest-html测试报告的优化(测试报告标题修改、Environment修改、Summary修改)_html_06

②通过下图可以看到Environment显示的信息为当前项目运行的环境【 metadata 关键字对应的值信息】,可以修改Environment信息使其显示更贴近我们的项目。

pytest之测试报告插件(pytest-html)  || pytest-html测试报告的优化(测试报告标题修改、Environment修改、Summary修改)_测试用例_07

③在 conftest.py

def pytest_configure(config):
config._metadata.clear()
config._metadata['测试项目'] = "测试示例项目"
config._metadata['测试地址'] = "www.project.com"

pytest之测试报告插件(pytest-html)  || pytest-html测试报告的优化(测试报告标题修改、Environment修改、Summary修改)_测试用例_08

⑤重新运行测试用例,查看测试报告:可以看到pytest-html测试报告的Environment信息已经更新。

pytest之测试报告插件(pytest-html)  || pytest-html测试报告的优化(测试报告标题修改、Environment修改、Summary修改)_html_09

⑥运行时可以通过控制台查看 metadata 关键字对应的值信息已经变成代码中设置的信息。【当然我们可以在代码中设置保留原始Environment信息并添加新的Environment信息,如三代码所示】

pytest之测试报告插件(pytest-html)  || pytest-html测试报告的优化(测试报告标题修改、Environment修改、Summary修改)_测试报告_10

三、pytest-html Summary更改

①在报告中有一个Summary概要内容:表示测试套执行结果的概要信息。

pytest之测试报告插件(pytest-html)  || pytest-html测试报告的优化(测试报告标题修改、Environment修改、Summary修改)_测试用例_11

②里面的内容都是与项目相关的,当然我们还可以添加一些其他的信息。在 contest.py

def pytest_html_results_summary(prefix, summary, postfix):
# prefix.clear() # 清空summary中的内容
prefix.extend([html.p("所属部门: XX公司测试部")])
prefix.extend([html.p("测试执行人: 随风挥手")])

pytest之测试报告插件(pytest-html)  || pytest-html测试报告的优化(测试报告标题修改、Environment修改、Summary修改)_测试报告_12

③重新运行测试用例,查看测试报告:可以看到pytest-html测试报告的Summary信息已经更新。

pytest之测试报告插件(pytest-html)  || pytest-html测试报告的优化(测试报告标题修改、Environment修改、Summary修改)_测试用例_13


pytest-html报告优化(添加Description测试用例描述信息列)

前言

①pytest-html测试报告默认是不展示测试用例描述Description内容。

②之前用unittest测试框架生成的报告是可以展示测试用例的描述内容,也就是test开头的用例下三个引号里面的注释(docstring)内容。

③pytest-html框架是可以修改生成的测试报告内容的,可以自己添加和删除html报告的table内容。

修改pytest-html测试报告

conftest.py

# -*- encoding:utf-8 -*-
from datetime import datetime

import pytest
from py.xml import html


@pytest.fixture(scope="session")
def login():
print("输入账号密码")
yield
print("清理数据完成")


def pytest_html_report_title(report):
report.title = "pytest示例项目测试报告"


def pytest_configure(config):
# config._metadata.clear() # 清空原先Environment中的内容
config._metadata['测试项目'] = "测试示例项目"
config._metadata['测试地址'] = "www.project.com"


def pytest_html_results_summary(prefix, summary, postfix):
# prefix.clear() # 清空summary中的内容
prefix.extend([html.p("所属部门: XX公司测试部")])
prefix.extend([html.p("测试执行人: 未来还未来")])


# th:表头
# td:表格
@pytest.mark.optionalhook
def pytest_html_results_table_header(cells):
cells.insert(2, html.th('Description')) # 添加描述列(Description)
cells.insert(1, html.th('Time', class_='sortable time', col='time')) # 添加可排序时间(Time)列
cells.pop() # 删除链接(Link)列


@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__)

test1.py

# -*- encoding:utf-8 -*-
import pytest
import time


class TestLogin1:

def test_a1(self, login):
"""
test_a1测试用例的用例点:我爱中华大地
"""
print("测试用例test_a1")
time.sleep(3)
assert 1 == 1

def test_a2(self, login):
"""
test_a2测试用例的用例点:我爱华夏人民
"""

print("测试用例test_a2")

@pytest.mark.skip("跳过test_a3")
def test_a3(self, login):
"""
test_a3测试用例的用例点:我爱五千年的华夏历史
"""
print("测试用例test_a3")
assert 1 == 1

def test_a4(self, login):
"""
test_a4测试用例的用例点:我爱文明中国
"""
print("测试用例test_a4")
assert 1 == 2


if __name__ == '__main__':
pytest.main(['-s', '--html==./report.html'])

未实现自定义钩子函数来修改pytest-html测试报告标题行以及列:

pytest之测试报告插件(pytest-html)  || pytest-html测试报告的优化(测试报告标题修改、Environment修改、Summary修改)_html_14

①在conftest.py脚本中 自定义钩子函数添加测试用例描述(Description)列 添加可排序时间(Time)列 ,并 删除链接(Link)列

# th:表头
# td:表格
@pytest.mark.optionalhook
def pytest_html_results_table_header(cells):
cells.insert(2, html.th('Description')) # 添加描述列(Description)
cells.insert(1, html.th('Time', class_='sortable time', col='time')) # 添加可排序时间(Time)列
cells.pop() # 删除链接(Link)列


@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之测试报告插件(pytest-html)  || pytest-html测试报告的优化(测试报告标题修改、Environment修改、Summary修改)_测试报告_15

②通过 pytest_html_results_table_row 钩子函数 删除所有单元格 以达到删除用例执行结果的目的。

下面的示例从pytest-html测试报告中删除所有测试通过的结果:

import pytest

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

运行结果:

pytest之测试报告插件(pytest-html)  || pytest-html测试报告的优化(测试报告标题修改、Environment修改、Summary修改)_测试用例_16

③日志输出和附加HTML可以通过 pytest_html_results_table_html

下面的示例清空测试执行结果为passed的日志输出:

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'))

参考博客:pytest文档20-pytest-html报告优化(添加Description)

去期待陌生,去拥抱惊喜。

java 或 java或者怎么表示

JAVA逻辑运算符示例详解:与、或、非、异或对比表与逻辑与短路与或逻辑或短路或非逻辑非异或逻辑异或 对比表与(仅左右语句都为真时为真)包括:逻辑与& 和 短路与&& 或(左右语句有一则或超过一则为真时为真)包括:逻辑或| 和 短路或|| 非(取反,假时为真,真时为假)包括:逻辑非! 异或(左右相异时为真,左右相同时为假)包括:逻辑异或^aba&ba&&am

python ltp 分词 python分词函数

2019-12-12中文文本分词和词云图具体功能介绍与学习代码: import jieba a="由于中文文本的单词不是通过空格或者标点符号来进行分割" #jieba.lcut()s是最常用的中文分词函数,用于精准模式,即将字符串分割为等量的中文词组,返回结果是列表类型 print(jieba.lcut(a)) #jieba.lcut(s,cut_all=True):用于全模式,即将字符