1.使用 uiautomator2 产生截图

file = d.screenshot(failname)

2.使用 allure 附加截图方法将截图附加进去

allure.attach(file, 'fail screenshot', attachment_type=allure.attachment_type.PNG)

3.问题出现,如图,测试报告中无法显示图片:

查看源码后发现,attach 最终调用的是如下方法:

def _attach(self, uuid, name=None, attachment_type=None, extension=None):
    mime_type = attachment_type
    extension = extension if extension else 'attach'

    if type(attachment_type) is AttachmentType:
        extension = attachment_type.extension
        mime_type = attachment_type.mime_type

    file_name = ATTACHMENT_PATTERN.format(prefix=uuid, ext=extension)
    attachment = Attachment(source=file_name, name=name, type=mime_type)
    last_uuid = self._last_executable()
    self._items[last_uuid].attachments.append(attachment)

    return file_name

看到第一个参数为 UUID,而不是文件,于是想到使用 uuid 模块给文件做一个 uuid 传入

muuid=uuid.uuid5(uuid.NAMESPACE_DNS, failname)
allure.attach(muuid, 'fail screenshot', attachment_type=allure.attachment_type.PNG)

运行如图:

4.原因

根据上方异常 a bytes-like object is required, not 'UUID',attach 方法接收参数需要为 bytes,需要装文件转换成 byte

5.解决方法

使用二进制读取图片,然后将二进制数据传入 attach

filebayes= ''

with open(self.d.screenshot(filepath),'rb') as file:
    filebayes = file.read()

    allure.attach(filebayes,
                  'fail scrennshot',
                  attachment_type=allure.attachment_type.PNG) 

运行后可成功在测试报告中查看图片


↙↙↙阅读原文可查看相关链接,并与作者交流