pytest 失败截图

看pytest-html官方说明

地址 https://github.com/pytest-dev/pytest-html#creating-a-self-contained-report

官方文档表示,html的内容支持HTML,json,jpg,url等多种形式。还举例说明。注意下面标记的地方,是报告内容变更需要我们替换的

@pytest.hookimpl(hookwrapper=True)
def pytest_runtest_makereport(item, call):
    pytest_html = item.config.pluginmanager.getplugin(‘html‘)
    outcome = yield
    report = outcome.get_result()
    extra = getattr(report, ‘extra‘, [])
    if report.when == ‘call‘:
        # always add url to report
        # screen = _capture_screenshot()
        filename = os.path.join(rootpath, ‘screen.png‘)  #获取截图文件位置
        extra.append(pytest_html.extras.png(filename))   #传入文件地址
        xfail = hasattr(report, ‘wasxfail‘)
        if (report.skipped and xfail) or (report.failed and not xfail):
            # only add additional html on failure
            extra.append(pytest_html.extras.html(‘<div>Additional HTML</div>‘))
        report.extra = extra

def _capture_screenshot():
    return driver.get_screenshot_as_file(‘screen.png‘)  # 截图并保存

运行  pytest --html=report.html,发现代码报错,

再看官方文档,发现给出了说明

命令行更改运行方式: pytest --html=report.html --self-contained-html

发现运行成功,但是有warning

报告截图是有的

官方文档表明存入png格式为:extra.png(image),可能是因为我直接传的文件地址导致的问题

于是修改截图存入的数据,改为base64

@pytest.hookimpl(hookwrapper=True)
def pytest_runtest_makereport(item, call):
    pytest_html = item.config.pluginmanager.getplugin(‘html‘)
    outcome = yield
    report = outcome.get_result()
    extra = getattr(report, ‘extra‘, [])
    if report.when == ‘call‘:
        # always add url to report
        screen = _capture_screenshot() # 修改后的代码
        # filename = os.path.join(rootpath, ‘screen.png‘)
        extra.append(pytest_html.extras.png(screen)) # 修改后的代码
        xfail = hasattr(report, ‘wasxfail‘)
        if (report.skipped and xfail) or (report.failed and not xfail):
            # only add additional html on failure
            extra.append(pytest_html.extras.html(‘<div>Additional HTML</div>‘))
        report.extra = extra  

def _capture_screenshot():
    return driver.get_screenshot_as_base64() # 修改后的代码

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

有warning了,截图也成功

现在我们将截图的代码调整到失败判断中,只有失败的用例才需要截图

执行命令 pytest --html=report.html --self-contained-html

只有失败的用例才会截图啦

最后源码为

from selenium import webdriver
import pytest

driver = None

@pytest.hookimpl(hookwrapper=True)
def pytest_runtest_makereport(item, call):
    pytest_html = item.config.pluginmanager.getplugin(‘html‘)
    outcome = yield
    report = outcome.get_result()
    extra = getattr(report, ‘extra‘, [])
    if report.when == ‘call‘:
        xfail = hasattr(report, ‘wasxfail‘)
        if (report.skipped and xfail) or (report.failed and not xfail):
            screen = _capture_screenshot()
            extra.append(pytest_html.extras.png(screen))
            # only add additional html on failure
            extra.append(pytest_html.extras.html(‘<div>Additional HTML</div>‘))
        report.extra = extra

def _capture_screenshot():
    return driver.get_screenshot_as_base64()

@pytest.fixture(scope=‘session‘, autouse=True)
def browser():
    global driver
    if driver is None:
        driver = webdriver.Firefox()
    return driver

原文地址:https://www.cnblogs.com/jescs/p/12106238.html

时间: 2024-10-05 20:13:03

pytest 失败截图的相关文章

WebDriver - 添加失败截图

WebDriver失败截图可以通过两种方式实现: 1. Use WebdriverEventListener 第一步:创建自己的WebDriverEventListener 创建自己的WebDriverEventListener 重写Onexception 方法, 当webdriver 遇到异常的时候执行截图动作. import java.io.File; import java.io.IOException; import java.io.FileOutputStream; import ja

WebDriver - 失败截图

WebDriver - 添加失败截图 WebDriver - 添加失败截图 作者: Max.Bai 时间: 2015/01 WebDriver失败截图可以通过两种方式实现: 1. Use WebdriverEventListener 第一步:创建自己的WebDriverEventListener 创建自己的WebDriverEventListener 重写Onexception 方法, 当webdriver 遇到异常的时候执行截图动作. import java.io.File; import j

reportNG定制化之失败截图及日志

先从github上拉下 reportNg的源代码 reportng  拉下源码后我们使用IDEA进行导入 1.reportng.properties 增加部分类表项 这里我们直接在末尾添加 log=Log Info screenshot=Screen Shot duration=Duration 2.results.html.vm 修改结果的html,我们目前只修改fail的情况下. #if ($failedTests.size() > 0) <table class="result

Appium失败截图及重试机制封装(二)

一.失败截图封装 1.主要封装了失败之后的文件名.重写了失败之后消息.失败了以后做个截图,最后置为失败,并且存放到相对路径下.截图操作,未把失败用例至为Fail,主要代码如下: 1 package cn.hysh.appium.testng; 2 3 import org.testng.Assert; 4 import org.testng.Reporter; 5 6 import cn.hysh.appium.base.AndroidDriverBase; 7 import cn.hysh.a

python unittest addCleanup中也加失败截图功能

在python web自动化测试中失败截图方法汇总一文中提到了失败截图的方法 但在实际测试中,如果我们的测试用例中加了addCleanups动作,如果addCleanups中动作失败了,就不会截图.那么该怎么做呢,解铃还得系铃人,还是得从addCleanups下手 思路: 我将在 addCleanup中再加一个截图的函数,但怎么判断用例是用例内失败还是addCleanup中失败呢,方法如下 我们在执行完用例后,看看self的属性,包括如下: (Pdb) print dir(self) ['__c

(二十二)异常捕获与用例断言失败截图

1.认识异常 2.捕获异常 3.断言 4.用例失败截图 ===================================================== (一) 什么是异常? exception:程序一旦遇到错误后,就会引发异常,如果异常没有被处理或者被捕捉,程序就会回溯来终止运行 异常的分类 常见的异常有哪些? BaseException:所有异常类的基类 Exception:所有异常类的基类,继承于BaseException AssertionError:assert语句失败 Fi

HTMLTestRunner 汉化版---来源一个大神的源码(加了失败截图,用例失败重新执行 功能)

HTMLTestRunner 汉化版 20170925 测试报告完全汉化,包括错误日志的中文处理 针对selenium UI测试增加失败自动截图功能 增加失败自动重试功能 增加饼图统计 同时兼容python2.x 和3.x 20180402 表格样式优化 修复部分bug 增加截图组,可展示多张截图,首次打开自动播放 增加仅展示最后一次运行结果,多次重试时,每个测试用例仅展示一次 报告汉化 selenium 截图 截图功能根据测试结果,当结果为fail或error时自动截图 截图方法在_TestR

09:robotframework答疑- SeleniumLibrary 失败截图功能设置

01:失败后,不截图 访问网站:https://robotframework.org/#libraries 在网站中通过以下指引查看 点击-external - seleniumLibrary-readme.rst-introduction-keyword documentation-importing 设置方法(可百度翻译) 具体操作步骤: 02:设置截图路径   原文地址:https://www.cnblogs.com/kelly11/p/12703606.html

pytest_html报告报错截图+失败重跑

前言 做web自动化的小伙伴应该都希望在html报告中展示失败后的截图,提升报告的档次,pytest-html也可以生成带截图的报告. conftest.py 1.失败截图可以写到conftest.py文件里,这样用例运行时,只要检测到用例实例,就调用截图的方法,并且把截图存到html报告上 # conftest.py文件 # coding:utf-8 from selenium import webdriver import pytest driver = None @pytest.mark.