allure.attach.file添加视频到测试报告中,视频被损坏无法播放

录屏+添加视频到测试报告代码

def record():
file_time = time.strftime("%Y-%m-%d-%H-%M-%S")
file_path = “…/Result_screen/” + file_time + “.mp4”
cmd = “scrcpy -r …/Result_screen/” + file_time + “.mp4”
p = subprocess.Popen(cmd, shell=True)
# p = os.popen(cmd)
yield
os.kill(p.pid, signal.CTRL_C_EVENT)
time.sleep(1)
allure.attach.file(file_path, name=file_time, attachment_type=allure.attachment_type.MP4)
执行操作后进入测试报告中查看,视频大小比本地小一点,并且无法播放

单独添加视频到allure报告中正常,视频为同一份视频


import allure

def test_allure():
print(“这是一个测试用例”)
allure.attach.file(“D:\Programs\AppProject\UI_Framework\Result_screen\2021-03-17-12-04-03.mp4”,
name=“这是一个视频”,attachment_type=allure.attachment_type.MP4)
求解:为什么会出现这个问题

  • 从结果推断应该是终止录制上出了问题
  • 看一下你的scrcpy是什么版本的,之前版本有一个BUG 用Ctrl+C终止会导致视频不完整

image从现象看是因为视频需要用例结束后才能刷出来,导致在执行allure.attach.file时,文件时不完整的

  • 哦 也就是说你上传附件太快,scrcpy还没有把文件写完是吧?在结束scrcpy的语句后面加个等待看看,可能mp4文件最后需要写入文件信息导致结束的会比较慢一点

加过等待,还是不行,https://github.com/wb-xujie/AppProject.git这是代码地址,老师能帮忙看看吗 截屏在testcase目录下

我也是这个问题,有解决方法吗?

  1. 你的 fixture 要改成 module 级别。不然 ctrl + c 会被 pytest 捕获
  2. 在上传 allure 后,加一个等待

这个也尝试过,allure报告中的视频还是无法打开

autouse =  True

测试用例里面有调用fixture,运行后allure的视频不完整


conftest里面fixture加上autouse=true,运行后问题存在
image

with open("./tmp.mp4", "rb") as f:
    allure.attach(f.read(), attachment_type=allure.attachment_type.MP4)
  • 添加视频作为附件的时候,需要将附件文件用open方法打开,然后将文件流传递给allure方法,这样才能把文件内容上传进去,不然附件内容里只有一串字符串

打开文件后以二进制流写入


运行后allure报告里面视频还是无法打开
image

看看附件大小和你视频文件一样吗

大小不一致

两边大小情况发一下看看

正常视频大小


allure视频大小

  • 在使用语句终止scrcpy的录制语句之后,需要加一个等待,因为在使用语句结束录制之后,scrcpy还需要写入文件的头信息等数据,需要一点时间。如果这时候直接去读取文件进行加载的话,只能拿到没有写入头信息的文件内容,导致内容不完整无法播放。

老师这个问题的关键点是scrcpy通过ctrl +C结束录制时,pytest框架也会捕获到,会结束测试,导致了虽然能添加视频到allure中,但是不完整,这边得到另一个同学的指点,通过taskkill来结束录屏,解决了这个问题


其中结束录屏后还要加一个等待,不然也会出现allure中的视频不完整

1 个赞