UI自动化测试-用例执行失败时自动截图
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 测试报告中。以下是对代码的详细解析:
代码解析
-
@pytest.hookimpl(tryfirst=True, hookwrapper=True):- 这是一个
pytest的钩子装饰器,用于标记一个函数为pytest的钩子实现。 tryfirst=True表示这个钩子函数会尽可能早地执行。hookwrapper=True表示这个钩子函数是一个包装器,它会包裹其他钩子函数的执行。这意味着它会在其他钩子函数执行之前和之后执行。
- 这是一个
-
def pytest_runtest_makereport(item, call)::- 这是
pytest的一个内置钩子函数,用于在测试用例执行后生成测试报告。 item参数表示当前的测试项(即测试用例)。call参数表示测试用例的执行阶段(如setup,call,teardown)。
- 这是
-
outcome = yield:- 由于这是一个包装器钩子,
yield会暂停当前函数的执行,等待被包装的钩子函数执行完毕。 outcome是一个Result对象,包含了被包装钩子函数的执行结果。
- 由于这是一个包装器钩子,
-
rep = outcome.get_result():- 从
outcome中获取测试报告对象rep,该对象包含了测试用例的执行结果信息。
- 从
-
if rep.when == "call" and rep.failed::- 检查测试用例的执行阶段是否为
call(即测试用例的主体执行阶段),并且测试用例是否失败。 - 如果条件满足,说明测试用例在执行过程中失败了。
- 检查测试用例的执行阶段是否为
-
with allure.step('用例失败截图')::- 使用
Allure的step功能,在测试报告中添加一个步骤,描述为“用例失败截图”。 - 这个步骤会在
Allure报告中显示为一个可展开的节点。
- 使用
-
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报告中展示,见下图:
今天分享到这儿,存在不足的地方还请大家多多指教!!!
更多推荐




所有评论(0)