UI自动化测试-用例执行失败时自动截图

UI自动化测试-用例执行失败时自动截图

前言:最近在学习巩固一些pytest+selenium的测试框架中的知识点,把学习过程中一些常用的操作做一下分享。
刚开始学习的时候,这个问题困扰了我很久,网上找了很多方法,最后发现实现的效果都不太理想。所以今天分享下如何实现用例失败时自动添加截图
推荐一种比较简单的实现方式,看代码:

# 用例失败添加截图
@pytest.hookimpl(tryfirst=True, hookwrapper=True)
def pytest_runtest_makereport(item, call):
    outcome = yield
    rep = outcome.get_result()
    if rep.when == "call" and rep.failed:
        with allure.step('用例失败截图'):
            allure.attach(driver.get_screenshot_as_png(), "截图", allure.attachment_type.PNG)

这段代码是一个用于 pytest 测试框架的钩子函数,用于在测试用例失败时自动截取屏幕截图,并将其附加到 Allure 测试报告中。以下是对代码的详细解析:

代码解析

  1. @pytest.hookimpl(tryfirst=True, hookwrapper=True):

    • 这是一个 pytest 的钩子装饰器,用于标记一个函数为 pytest 的钩子实现。
    • tryfirst=True 表示这个钩子函数会尽可能早地执行。
    • hookwrapper=True 表示这个钩子函数是一个包装器,它会包裹其他钩子函数的执行。这意味着它会在其他钩子函数执行之前和之后执行。
  2. def pytest_runtest_makereport(item, call)::

    • 这是 pytest 的一个内置钩子函数,用于在测试用例执行后生成测试报告。
    • item 参数表示当前的测试项(即测试用例)。
    • call 参数表示测试用例的执行阶段(如 setup, call, teardown)。
  3. outcome = yield:

    • 由于这是一个包装器钩子,yield 会暂停当前函数的执行,等待被包装的钩子函数执行完毕。
    • outcome 是一个 Result 对象,包含了被包装钩子函数的执行结果。
  4. rep = outcome.get_result():

    • outcome 中获取测试报告对象 rep,该对象包含了测试用例的执行结果信息。
  5. if rep.when == "call" and rep.failed::

    • 检查测试用例的执行阶段是否为 call(即测试用例的主体执行阶段),并且测试用例是否失败。
    • 如果条件满足,说明测试用例在执行过程中失败了。
  6. with allure.step('用例失败截图')::

    • 使用 Allurestep 功能,在测试报告中添加一个步骤,描述为“用例失败截图”。
    • 这个步骤会在 Allure 报告中显示为一个可展开的节点。
  7. allure.attach(driver.get_screenshot_as_png(), "截图", allure.attachment_type.PNG):

    • driver.get_screenshot_as_png() 获取当前屏幕的截图,并将其作为 PNG 格式的二进制数据返回。
    • allure.attach() 将这个截图附加到 Allure 测试报告中,命名为“截图”,并指定附件类型为 PNG

总结

这段代码的作用是:当 pytest 执行的测试用例失败时,自动截取屏幕截图,并将截图附加到 Allure 测试报告中。这样可以方便开发者在查看测试报告时,直观地看到测试失败时的界面状态,便于调试和定位问题。
需要注意的地方,此方法需要放在conftest.py下,如下图:

这里在这里插入图片描述

当用例执行失败时,会自动截图,并在allure报告中展示,见下图:
在这里插入图片描述
今天分享到这儿,存在不足的地方还请大家多多指教!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值