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

如何在Pytest中实现同一测试用例快慢双模式无冗余代码运行

解决方案

你原有pytest配置不需要做任何改动,只需要修改测试代码,动态根据命令行参数动态调整迭代次数即可,有两种常见实现方式:

方式一:直接判断运行开关(最简洁)

通过pytest的request fixture可以直接读取命令行参数值,在单个测试里判断循环次数,完全消除重复代码:

import pytest
import random
import statistics

def test_random_statistics(request):
    # 按运行模式设置迭代次数
    if request.config.getoption("--runslow"):
        iterations = 100000
    else:
        iterations = 10
    
    delta_list = []
    for i in range(iterations):
        # 保留你原有的随机过程逻辑
        number = random.uniform(0, 1)
        expected_avg = 0.5
        delta = number - expected_avg 
        delta_list.append(delta)

    avg_delta = sum(delta_list) / len(delta_list)
    std_delta = statistics.stdev(delta_list)
    assert avg_delta < 0.1
    assert std_delta < 0.15

直接运行pytest就会执行10次迭代的快速测试,运行pytest --runslow就会自动执行10万次迭代的慢速测试。

方式二:参数化标记(适合需要单独筛选测试的场景)

如果你需要单独筛选运行快/慢用例,可以用参数化给不同迭代次数的用例加对应标记,原有配置逻辑也无需改动:

import pytest
import random
import statistics

@pytest.mark.parametrize("iterations", [
    pytest.param(10, id="fast"),
    pytest.param(100000, marks=pytest.mark.slow, id="slow")
])
def test_random_statistics(iterations):
    delta_list = []
    for i in range(iterations):
        number = random.uniform(0, 1)
        expected_avg = 0.5
        delta = number - expected_avg 
        delta_list.append(delta)

    avg_delta = sum(delta_list) / len(delta_list)
    std_delta = statistics.stdev(delta_list)
    assert avg_delta < 0.1
    assert std_delta < 0.15

这种方式下运行pytest只会执行10次迭代的快速用例,运行pytest --runslow会同时执行快、慢两个用例,如需单独跑慢用例加-m slow参数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:06:03