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 # 重新赋值,非常重要,不能忘掉