微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

pytest_runtest_makereport实现断言失败自动截图并集成到allure报告

之前的做法

之前的做法是通过在basepage中封装一个失败截图保存到allure报告中方法,如下


然后使用时,通过try...except 手动判断是否发生了断言异常,发生了则调用方法


现在做法:通过在conftest设置钩子函数自动获取每个用例失败结果,自动截图到allure

参考链接

conftest文件中的内容

import os

import pytest
import allure
from selenium import webdriver

# 设置全局变量的原因是因为,pytest_runtest_makereport方法中要用到,而我们创建的driver是在方法里面,因此设置全局变量,两方都可解决
driver = None 

# 设置全局的原因是,想只开一次浏览器,完成所有用例的执行;如果不想设置全局,则if driver is None这行代码要去掉,否则存在问题
@pytest.fixture(scope='session')
def browser():
    global driver

    # 只打开一次浏览器,完成所有用例的操作
    if driver is None:
        driver = webdriver.Chrome()

    yield driver

    driver.quit()



@pytest.hookimpl(hookwrapper=True, tryfirst=True)
def pytest_runtest_makereport(item, call):
    print('------------------------------------')
    # 获取钩子方法调用结果
    outcome = yield
    rep = outcome.get_result()
    # 仅仅获取用例call 执行结果是失败的情况, 不包含 setup/teardown
    if rep.when == "call" and rep.Failed:
        # 添加allure报告截图
        # 如果当前webdriverr版本中有该方法,则使用
        if hasattr(driver, "get_screenshot_as_png"):
            with allure.step('添加失败截图...'):
                allure.attach(driver.get_screenshot_as_png(), "失败截图", allure.attachment_type.PNG)




用例中的内容


import pytest
from selenium import webdriver

lis = ['百度4下','百度一下','百度N下']


@pytest.mark.parametrize('data', lis)
def test_screen(browser,data):
    driver = browser
    driver.get("http://www.baidu.com")
    text_value = driver.find_element("id", "su").get_attribute('value')
    assert text_value == data




效果如下

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐