APP自动化--pytest-把图片添加到测试报告中--(异常截图)

前面在  APP自动化--pytest-把图片添加到测试报告中--(主动截图)中说明了extra.append(extras.image(driver1.get_screenshot_as_base64()))的用法,那么把它放到conftest的异常截图代码中就可以实现异常截图。

import pytest
from pytest_html import extras

"""解决pytest-html报告中文乱码问题,避免修改pytest-html/plugi.py源码"""
def pytest_collection_modifyitems(items):
    for item in items:
        item.name = item.name.encode('unicode-escape').decode('utf-8')
        item._nodeid = item.nodeid.encode('unicode-escape').decode('utf-8')


# 以下是pytest提供异常截图的方法
@pytest.hookimpl(hookwrapper=True)  # 写死的
def pytest_runtest_makereport(item, call):  # 写死的
    # pytest会将找到的用例存在迭代器中
    outcome = yield  # 通过这个方法接受所有用例的结果
    result = outcome.get_result()
    extra = getattr(result, "extra", [])    # 如果从rusult里获取不到extra,设置它的默认值是一个空列表。
    # print("用例的标识数据:", result)
    if result.when == "call":
        print("用例的执行结果:", result)
        if result.outcome == "failed":
            """进行截图"""
            # from Package.什么情况下可以操作内存空间 import list1
            # driver1 = list1[-1]
            from Package.什么情况下可以操作内存空间 import Comtext
            driver1 = getattr(Comtext, "driver")  # 去类中拿属性
            # driver1.save_screenshot("异常截图11.png")  #
            extra.append(extras.image(driver1.get_screenshot_as_base64()))   # 异常时触发截图(二进制)
            # extra是跟随用例实现的。默认是用例报告对象的一个属性。可以通过获取用例的报告对象获取。报告对象是上面的result,
            # extra是pytest实现的,所以直接导包 from pytest_html import extras

            result.extra = extra    # 重新赋值,非常重要,不能忘掉

直接复制 extra.append(extras.image(driver.get_screenshot_as_base64())) 到conftest的异常情况截图的代码中,把driver替换成这里的driver1.  extra和extras用以下方法实现。

# extra是跟随用例实现的。默认是用例报告对象的一个属性。可以通过获取用例的报告对象获取。报告对象是上面的result,
所以这里再设置变量
extra = getattr(result, "extra", [])    # 如果从rusult里获取不到extra,设置它的默认值是一个空列表。
# extra是pytest实现的,所以直接导包 from pytest_html import extras
最后给extra重新赋值
result.extra = extra    # 重新赋值,非常重要,不能忘掉
 

 

posted @ 2023-05-22 15:48  琉璃星眸  阅读(258)  评论(0编辑  收藏  举报