pytest html - 将图像从测试文件传递到 conftest.py 中的钩子
pytest html - pass images to the hook in conftest.py from a test file
我有一个通过 pytest-html 产生 HTML 输出的测试。
我收到了报告,但我想添加对失败和预期图像的引用;我将它们保存在我的 test.py 主文件中,并将钩子添加到 conftest.py
.
现在,我不知道如何将这些图像传递给函数;执行测试后调用挂钩;目前我正在对输出文件进行硬编码并附加它们;但我想从测试中传递图像的路径,特别是因为我需要编写更多测试,这些测试可能保存在我常用文件夹的其他地方,并且可能有不同的名称。
这是我在 conftest.py
中的钩子
@pytest.mark.hookwrapper
def pytest_runtest_makereport(item, call):
timestamp = datetime.now().strftime('%H-%M-%S')
pytest_html = item.config.pluginmanager.getplugin('html')
outcome = yield
report = outcome.get_result()
extra = getattr(report, 'extra', [])
if report.when == 'call':
# Attach failure image, hardcoded...how do I pass this from the test?
extra.append(pytest_html.extras.image('/tmp/image1.png'))
# test report html
extra.append(pytest_html.extras.url('http://www.theoutput.com/'))
xfail = hasattr(report, 'wasxfail')
if (report.skipped and xfail) or (report.failed and not xfail):
# only add additional data on failure
# Same as above, hardcoded but I want to pass the reference image from the test
extra.append(pytest_html.extras.image('/tmp/image2.png'))
extra.append(pytest_html.extras.html('<div>Additional HTML</div>'))
report.extra = extra
如何从我的 pytest 测试文件传递给挂钩,一个包含要附加的图像路径的变量?
我找到了一个解决方法,虽然它并不漂亮。
在我的测试文件中添加一个模块级别的变量,允许我使用item.module.varname
,所以如果我在我的模块测试中设置varname
,然后在测试中分配它;我可以在 pytest_runtest_makereport
中访问它
在testfile.py
import pytest
myvar1 = None
myvar2 = None
class VariousTests(unittest.TestCase):
def test_attachimages():
global myvar1
global myvar2
myvar1 = "/tmp/img1.png"
myvar2 = "/tmp/img2.png"
在conftest.py
@pytest.mark.hookwrapper
def pytest_runtest_makereport(item, call):
timestamp = datetime.now().strftime('%H-%M-%S')
pytest_html = item.config.pluginmanager.getplugin('html')
outcome = yield
report = outcome.get_result()
extra = getattr(report, 'extra', [])
if report.when == 'call':
# Attach failure image
img1 = item.module.myvar1
img2 = item.module.myvar2
extra.append(pytest_html.extras.png(img1))
# test report html
extra.append(pytest_html.extras.url('http://www.theoutput.com/'))
xfail = hasattr(report, 'wasxfail')
if (report.skipped and xfail) or (report.failed and not xfail):
# only add additional data on failure
# Same as above, hardcoded but I want to pass the reference image from the test
extra.append(pytest_html.extras.png(img2))
extra.append(pytest_html.extras.html('<div>Additional HTML</div>'))
report.extra = extra
我有一个通过 pytest-html 产生 HTML 输出的测试。
我收到了报告,但我想添加对失败和预期图像的引用;我将它们保存在我的 test.py 主文件中,并将钩子添加到 conftest.py
.
现在,我不知道如何将这些图像传递给函数;执行测试后调用挂钩;目前我正在对输出文件进行硬编码并附加它们;但我想从测试中传递图像的路径,特别是因为我需要编写更多测试,这些测试可能保存在我常用文件夹的其他地方,并且可能有不同的名称。
这是我在 conftest.py
中的钩子@pytest.mark.hookwrapper
def pytest_runtest_makereport(item, call):
timestamp = datetime.now().strftime('%H-%M-%S')
pytest_html = item.config.pluginmanager.getplugin('html')
outcome = yield
report = outcome.get_result()
extra = getattr(report, 'extra', [])
if report.when == 'call':
# Attach failure image, hardcoded...how do I pass this from the test?
extra.append(pytest_html.extras.image('/tmp/image1.png'))
# test report html
extra.append(pytest_html.extras.url('http://www.theoutput.com/'))
xfail = hasattr(report, 'wasxfail')
if (report.skipped and xfail) or (report.failed and not xfail):
# only add additional data on failure
# Same as above, hardcoded but I want to pass the reference image from the test
extra.append(pytest_html.extras.image('/tmp/image2.png'))
extra.append(pytest_html.extras.html('<div>Additional HTML</div>'))
report.extra = extra
如何从我的 pytest 测试文件传递给挂钩,一个包含要附加的图像路径的变量?
我找到了一个解决方法,虽然它并不漂亮。
在我的测试文件中添加一个模块级别的变量,允许我使用item.module.varname
,所以如果我在我的模块测试中设置varname
,然后在测试中分配它;我可以在 pytest_runtest_makereport
在testfile.py
import pytest
myvar1 = None
myvar2 = None
class VariousTests(unittest.TestCase):
def test_attachimages():
global myvar1
global myvar2
myvar1 = "/tmp/img1.png"
myvar2 = "/tmp/img2.png"
在conftest.py
@pytest.mark.hookwrapper
def pytest_runtest_makereport(item, call):
timestamp = datetime.now().strftime('%H-%M-%S')
pytest_html = item.config.pluginmanager.getplugin('html')
outcome = yield
report = outcome.get_result()
extra = getattr(report, 'extra', [])
if report.when == 'call':
# Attach failure image
img1 = item.module.myvar1
img2 = item.module.myvar2
extra.append(pytest_html.extras.png(img1))
# test report html
extra.append(pytest_html.extras.url('http://www.theoutput.com/'))
xfail = hasattr(report, 'wasxfail')
if (report.skipped and xfail) or (report.failed and not xfail):
# only add additional data on failure
# Same as above, hardcoded but I want to pass the reference image from the test
extra.append(pytest_html.extras.png(img2))
extra.append(pytest_html.extras.html('<div>Additional HTML</div>'))
report.extra = extra