You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现pytest执行每个测试函数时同步运行record_video录屏函数

pytest 逐测试用例绑定录屏实现方案

实现思路

无侵入耦合录屏逻辑,不需要修改每个测试函数的内部代码,依托pytest自身的fixture机制自动在每个测试用例执行前后触发录屏启停,录屏文件和测试用例一一对应,完全不影响pytest原生测试报告的正常生成。

具体实现代码

在测试项目根目录新建conftest.py文件,pytest会自动加载该文件中的全局配置,写入以下内容:

import pytest
import os
# 若使用自定义录屏方法,导入你的record_video即可
# from your_utils import record_video

# 配置录屏文件存储目录
VIDEO_DIR = "./test_record_videos"
os.makedirs(VIDEO_DIR, exist_ok=True)

@pytest.fixture(autouse=True)
def auto_record_video(request):
    # 生成当前测试用例对应的录屏文件路径,文件名和测试函数名绑定
    test_func_name = request.node.name
    video_file_path = os.path.join(VIDEO_DIR, f"{test_func_name}.mp4")

    # 启动录屏:替换为你自己的record_video启动逻辑
    # 示例为通用录屏启动逻辑,若你已有封装好的record_video,直接传入保存路径启动即可,拿到录屏控制句柄
    # recorder = record_video(save_path=video_file_path)
    import subprocess
    recorder = subprocess.Popen(
        ["ffmpeg", "-f", "gdigrab", "-framerate", "15", "-i", "desktop", video_file_path],
        stdout=subprocess.DEVNULL,
        stderr=subprocess.DEVNULL,
        shell=True
    )

    # 断点,执行当前测试函数
    yield

    # 测试函数执行完成,停止录屏,完成mp4文件写入
    recorder.terminate()
    recorder.wait()
    # 若你自定义的record_video有单独停止方法,替换为 recorder.stop() 即可

配置说明

  • fixture的autouse=True参数表示该逻辑对所有收集到的测试函数自动生效,执行test_function1、test_function2等任意测试函数时,都会自动启动对应录屏,用例结束自动停止生成mp4文件,不需要在测试代码里手动调用录屏方法。
  • 所有录屏文件统一保存在./test_record_videos目录下,文件名和测试函数名一一对应,执行完所有测试后直接到该目录取对应mp4文件即可。
  • 原有pytest的终端输出、html报告、allure报告等标准测试报告不受任何影响,正常生成。

可选优化

  • 若只需要保存执行失败用例的录屏,可以搭配pytest的pytest_runtest_makereport钩子获取用例执行结果,用例执行成功时直接删除对应录屏文件,节省存储空间。
  • 若需要把录屏作为附件嵌入测试报告,可以在fixture结束逻辑里拿到video_file_path,追加到报告的附件列表即可。

内容的提问来源于stack exchange,提问作者Anatoly Rozhkov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 23:57:35