【发布时间】:2018-07-26 05:59:50
【问题描述】:
我使用 pytest 运行程序从我的自动化测试框架(Selenium 和 RestAPI 测试)中获取结果输出。我使用 pytest-html 插件在测试结束时生成单页 html 结果文件。我使用以下命令(来自活动的 VirtEnv 会话)启动测试运行。
python -m pytest -v --html="api_name_test.html" --self-contained-html
(它有点复杂,因为我使用了一个 powershell 脚本来运行它并提供一个带有日期时间戳的结果文件名,并在完成时通过电子邮件发送文件,但它本质上是上面的命令)
当生成报告并打开此报告 html 时,我发现所有未通过的测试都已展开。我想让它默认折叠所有行(失败、XFailed、错误等)。
我的项目在目录根目录下包含一个 conftest.py 文件和一个 pytest.ini 文件,我在其中指定了测试脚本的目录
在我最简单的项目中的 conftest.py 文件中,我有一个可选的钩子来获取测试的目标 url 并将其放入报告摘要中:
import pytest
from py._xmlgen import html
import os
import rootdir_ref
import simplejson
@pytest.mark.optionalhook
def pytest_html_results_summary(prefix):
theRootDir = os.path.dirname(rootdir_ref.__file__)
credentials_path = os.path.join(theRootDir, 'TestDataFiles', 'API_Credentials.txt')
target_url = simplejson.load(open(credentials_path)).get('base_url')
prefix.extend([html.p("Testing against URL: " + target_url)])
Github 页面提到显示查询可用于折叠具有各种结果的行,但没有提及输入此信息的位置。 https://github.com/pytest-dev/pytest-html
“默认情况下,Results 表中的所有行都将展开,除了已通过的行。可以使用查询参数自定义此行为:?collapsed=Passed,XFailed,Skipped”
目前我不确定?collapsed=... 行是否进入命令行,或者 conftest 作为钩子,或者我是否需要编辑 pytest-html 插件附带的默认 style.css 或 main.js ? (另外我不熟悉css,只知道少量的html)。我假设它作为钩子进入 conftest.py 文件,但并不真正了解如何应用它。
【问题讨论】:
-
查询参数被传递给生成的 HTML 报告,例如在浏览器中打开它时,使用 URL
file:///path/to/report.html?collapsed=Passed,XFailed,Skipped。这是您无法从钩子中适应的东西,因为the collapsing of test blocks is handled entirely inmain.js。我看到的唯一方法是将main.js文件替换为没有if (collapsed.includes(elem.innerHTML))检查的文件。 -
太棒了,谢谢@hoefling,我找不到任何指示如何使用该选项的地方。我会尝试使用 JS 文件,看看我是否可以让它做我想做的事情。
标签: python-3.x pytest pytest-html