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

如何通过pytest-repeat捕获所有KPI测试结果并计算平均值

解决方案

可以通过以下两种方式捕获每次测试的KPI结果并计算平均值:

方法1:使用模块级变量存储结果

定义一个模块级列表保存所有KPI值,在重复执行的测试中添加结果,最后单独计算平均值:

import pytest
import logging
import time

# 模块级列表,存储所有KPI测试结果
kpi_results = []

@pytest.mark.repeat(10)  # 修改为10次重复执行
def test_hdmi(request):
    global kpi_results
    rdk_ir.send('input')
    kpi = pytest.gpio.count_kpi(0, rdk_lux.get_note('pure_white_50_40')[test_inch])
    logging.info(f'kpi {kpi} seconds')
    # 将本次测试结果加入列表
    kpi_results.append(kpi)
    time.sleep(1)

def test_calculate_kpi_average():
    global kpi_results
    # 验证是否收集到10次结果
    assert len(kpi_results) == 10, f"仅收集到{len(kpi_results)}次KPI结果,预期10次"
    # 计算平均值
    average_kpi = sum(kpi_results) / len(kpi_results)
    logging.info(f'10次KPI测试平均值: {average_kpi:.2f} seconds')
    # 可选:添加业务断言,比如验证平均值是否符合要求
    # assert average_kpi <= 3.0, f"KPI平均值{average_kpi:.2f}超过阈值3.0"
    # 清空列表,避免影响后续测试
    kpi_results.clear()

方法2:使用pytest Fixture管理结果(推荐)

用module作用域的fixture存储结果,更符合pytest的设计风格,无需全局变量:

import pytest
import logging
import time

@pytest.fixture(scope="module")
def kpi_storage():
    # 返回一个空列表,用于存储所有KPI结果
    return []

@pytest.mark.repeat(10)
def test_hdmi(request, kpi_storage):
    rdk_ir.send('input')
    kpi = pytest.gpio.count_kpi(0, rdk_lux.get_note('pure_white_50_40')[test_inch])
    logging.info(f'kpi {kpi} seconds')
    # 将结果存入fixture维护的列表
    kpi_storage.append(kpi)
    time.sleep(1)

def test_calculate_kpi_average(kpi_storage):
    assert len(kpi_storage) == 10, f"仅收集到{len(kpi_storage)}次KPI结果,预期10次"
    average_kpi = sum(kpi_storage) / len(kpi_storage)
    logging.info(f'10次KPI测试平均值: {average_kpi:.2f} seconds')
    # 可选:业务断言
    # assert average_kpi <= 3.0, f"KPI平均值不达标,当前值{average_kpi:.2f}"

注意事项

  • 确保@pytest.mark.repeat的参数设置为10,替换原代码中的2。
  • 计算平均值的测试函数需定义在重复测试函数之后,pytest会按函数定义顺序执行,确保所有重复测试完成后再计算平均值。
  • 如果某次测试失败导致结果未收集,断言会触发报错,便于及时定位问题。

内容的提问来源于stack exchange,提问作者赵小甲

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 01:44:54