问答 自动化测试问题求教

Mr-ZJH · 2025年03月05日 · 最后由 槽神 回复于 2025年03月08日 · 6629 次阅读

请教下各位大佬,目前有一个需求是测试图片和视频编解码相关 api 接口,需要对编码后的图片和码流文件以及解码后的 yuv 进行校验,是否显示正常。针对这个环节有没有什么自动化校验方法呢?

共收到 6 条回复 时间 点赞

针对图片和视频编解码后的文件校验及 YUV 数据质量验证,以下是系统化的自动化校验方案,分为四个核心环节:

一、码流合法性校验(自动化强度:★★★★★)

  1. 码流结构解析

    • 使用FFprobe/MediaInfo验证容器格式、编码参数(分辨率/帧率/GOP 等)
    • 示例脚本: bash ffprobe -v error -show_format -show_streams output.mp4 if [ $? -ne 0 ]; then echo "码流解析异常!" exit 1 fi
  2. 深度语法检查

    • HEVC/H.264 码流使用Elecard Stream Analyzer批量检测 NAL 单元合规性
    • 开源方案:h264_analyzer工具解析 SPS/PPS 有效性

二、解码健壮性测试(自动化强度:★★★★☆)

  1. 极限解码压力测试

    import subprocess
    for bitrate in [100k, 1M, 10M]:  # 多码率测试
       cmd = f"ffmpeg -y -i input.mp4 -b:v {bitrate} encoded.mp4"
       subprocess.run(cmd, check=True, shell=True)
    
       # 多解码器交叉验证
       decoders = ['h264_cuvid', 'libx264'] 
       for d in decoders:
           result = subprocess.run(
               f"ffmpeg -v error -c:v {d} -i encoded.mp4 -f null -",
               shell=True, 
               capture_output=True
           )
           if result.stderr:
               alert_error(f"{d}解码失败: {result.stderr}")
    

三、视觉质量量化分析(自动化强度:★★★★★)

  1. 客观质量指标计算 ```python import cv2 from skimage.metrics import structural_similarity as ssim

def calc_psnr(orig, dec):
mse = np.mean((orig - dec) ** 2)
return 10 * np.log10(255**2 / mse)

orig_yuv = read_yuv("ref.yuv") # 原始未压缩 YUV
dec_yuv = read_yuv("decoded.yuv")

psnr = calc_psnr(orig_yuv.Y, dec_yuv.Y)
ssim_val = ssim(orig_yuv.Y, dec_yuv.Y,
data_range=255, win_size=3)

if psnr < 30 or ssim_val < 0.95:
generate_heatmap_diff(orig_yuv, dec_yuv) # 生成差异热力图


2. **机器视觉辅助检测**
   - 使用OpenCV检测马赛克区域:
     ```python
     edges = cv2.Canny(dec_frame, 50, 150)
     if cv2.countNonZero(edges) < threshold:
         log("WARNING: 疑似块效应产生")
     ```

### 四、可视化辅助校验(自动化强度:★★★☆☆)
1. **关键帧采样检查**
   ```bash
   # 抽取I帧生成缩略图矩阵
   ffmpeg -i encoded.mp4 -vf "select=eq(pict_type\,I)" -vsync 0 thumbs/thumb%d.png
  1. 自动化报告生成
    • 使用img2pdf将 YUV 对比图与质量指标生成 PDF 报告
    • 集成 Allure 测试报告系统展示 PSNR 趋势图

五、进阶方案选型

方案类型 推荐工具 适用场景
全参考质量评估 VMAF(Netflix)、Daala 高精度主观质量仿真
无参考评估 NIQE、BRISQUE 无原始素材时的质量盲测
硬件加速方案 NVIDIA Video Codec SDK + DLA 超高清 8K 实时校验

六、持续集成部署

  1. Jenkins Pipeline 示例阶段: groovy stage('Codec Validation') { parallel { stage('H.264') { sh 'python validate_codec.py --codec h264' } stage('HEVC') { sh 'python validate_codec.py --codec hevc' } } post { always { allure includeProperties: false, results: [[path: 'allure-results']] } } }

建议实施路径:优先完成码流校验和解码验证的基础自动化,再逐步集成质量指标计算,最后通过可视化报告实现人工二次确认的闭环。对于实时性要求高的场景,可引入 GPU 加速的并行校验框架。

用 openCV 啊,写脚本就好了。关键是你怎么去定义是否显示正常。你先把你手工测试的验证通过的标准说出来,才好知道怎么自动化

hank.huang 回复

1、没有使用 opencv 的原因是没有一个 groudtruth 作为校验,以 JPEG 编码接口为例,有编码质量参数,不同的编码质量,编码后的 JPEG 文件显示的清晰度不同,目前没有一个指标可以说明在多少范围内是正常的。
2、手工测试的验证通过标准就是人眼去看没有花瓶、马赛克等图片不合理的情况😅

kane 回复

您这是 AI 生成的答案吗?😂 ,我看标准里采用了 psnr 和 ssim_val 作为评判指标,但是现在我这里没有一个具体取值范围的标准可以作为评判参考😅

Mr-ZJH 回复

那简单,给你分享一下我们这边测试视频的方案。 我们会播放一个 动态二维码 (用 python 写一个生成二维码的工具,数字不断递增)。然后视频流解析出来之后,用 python 代码去给二维码解码。1.能解码成功说明视频流传输正常 2.解码出来的数字未中断,说明传输流没有中断是连续的。

色彩检测同理,python 随机生成指定颜色的色块传输,然后去接收端 openCV 解析颜色是否符合预期。

Mr-ZJH 回复

不说码流检查,如果只是清晰度评估,其实 psnr 这些无参考评估指标也可以用一点,并不是非要有个标准去对比,比如:用不同的滤波尺寸将图像做简单的高斯去噪和椒盐去噪,分别将结果与原图一起计算 PSNR/SSIM,然后再去加权计算、推断,评估图像质量……只是个思路,未必有用,供参考~
按理说编码之前应该能 dump 出原始的输入才对,要么问下开发能否帮忙提升可测性~

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册