Python中实现带权重的随机测试

 更新时间:2026年05月07日 09:07:10   作者:P粉602998670  
本文主要介绍了Python中实现带权重的随机测试,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

pytest中怎么给测试用例加执行权重

pytest本身不支持测试用例权重调度,pytest的执行顺序默认按文件/函数名排序,或靠--randomly插件随机化,但“按权重随机”得自己控制。核心思路是:不改变pytest调度机制,而是在测试函数内部用random.choices()random.random()做条件跳过。

常见错误是试图在pytest_generate_tests里动态生成带权重的参数化用例——这只能控制参数组合数量,无法让同一个测试函数被“更大概率执行”。真正要的是:每次运行时,每个测试有独立概率被触发。

  • @pytest.mark.skipif配合随机判断是最轻量、最兼容的方式
  • 权重需归一化为概率值(如权重[3,1,2] → 概率[0.5, 0.167, 0.333])
  • 避免在setup_methodconftest.py顶层调用random,否则所有测试共享同一随机结果

用random.choices实现多测试函数的加权调度

如果你有一组测试函数,想让它们按权重被选中执行(比如模拟高频/低频场景),可以用random.choices()从函数列表中抽样,再用pytest.skip()跳过未被选中的。注意:这要求所有候选测试函数在同一模块中,且用相同装饰器逻辑。

示例场景:三个测试函数test_logintest_searchtest_logout,权重分别为5、3、2:

import random
import pytest
<p>TESTS = [
("test_login", 5),
("test_search", 3),
("test<em>logout", 2),
]
weights = [w for </em>, w in TESTS]
selected<em>name = random.choices([n for n, </em> in TESTS], weights=weights, k=1)[0]</p><p>def skip_if_not_selected(test_name):
if test_name != selected_name:
pytest.skip(f"Weighted skip: {test_name} not selected")</p><p>def test_login():
skip_if_not_selected("test_login")
assert True</p><p>def test_search():
skip_if_not_selected("test_search")
assert True</p><p>def test_logout():
skip_if_not_selected("test_logout")
assert True

⚠️ 注意:每次pytest运行只会执行其中一个测试,因为selected_name在模块导入时就固定了。如需每次调用都重新采样,得把random.choices()移到每个测试函数内部,但会失去“整体权重分布”的语义。

为什么不用pytest-randomly或pytest-ordering

pytest-randomly只打乱执行顺序,不支持权重;pytest-ordering只控制先后,不能控制是否执行。强行用它们“模拟权重”,比如重复定义同一测试函数多次(test_login_v1test_login_v2test_login_v3),会导致报告中出现冗余条目、覆盖率统计失真、CI日志膨胀。

更严重的问题是:这类方案会让pytest --lf(last-failed)失效,因为失败的其实是某个别名,下次重跑时找不到原名。

  • 真实权重逻辑必须在运行时、函数级判定,而非生成时
  • 权重应随每次pytest进程独立计算,不能依赖全局状态
  • 如果需要跨会话稳定权重(比如A/B测试分流),得用os.environ.get("TEST_SEED")固定random.seed()

如何让权重配置可外部化

硬编码权重不利于维护。推荐把权重表放到JSON或pyproject.toml中,用importlib.resources读取(Python 3.9+)或pathlib.Path(__file__).parent / "weights.json"加载:

# weights.json
{
  "test_api_create": 4,
  "test_api_update": 2,
  "test_api_delete": 1
}

然后在测试模块中:

import json
from pathlib import Path
<p>WEIGHTS = json.loads((Path(<strong>file</strong>).parent / "weights.json").read_text())
total = sum(WEIGHTS.values())</p><h1>在每个测试函数开头:</h1><p>if random.random() > WEIGHTS.get("test_api_create", 0) / total:
pytest.skip("Low-weight test")

这个写法比choices()更灵活:允许单个测试独立决定是否执行,也便于后期接入外部配置中心或环境变量覆盖。

真正容易被忽略的是:权重值本身没有单位意义,只有相对比例才起作用。设成[100, 1, 1]和[10, 0.1, 0.1]效果完全一样,但前者更容易让人误以为“100次里必执行100次”,其实只是概率更高而已。

到此这篇关于Python中实现带权重的随机测试的文章就介绍到这了,更多相关Python 带权重随机测试内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python中filter与lambda的结合使用详解

    Python中filter与lambda的结合使用详解

    今天小编就为大家分享一篇Python中filter与lambda的结合使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • Python能干什么、Python主要应用于哪些方面

    Python能干什么、Python主要应用于哪些方面

    无论是从入门级选手到专业级选手都在做的爬虫,还是Web程序开发、桌面程序开发还是科学计算、图像处理, Python都可以胜任。Python为我们提供了非常完善的基础代码库,覆盖了网络、文件、GUI、 数据库、文本等大量内容。用Python开发,许多功能不必从零编写
    2023-06-06
  • python获取beautifulphoto随机某图片代码实例

    python获取beautifulphoto随机某图片代码实例

    python获取beautifulphoto随机某图片代码实例,大家参考使用吧
    2013-12-12
  • tensorflow实现对图片的读取的示例代码

    tensorflow实现对图片的读取的示例代码

    本篇文章主要介绍了tensorflow实现对图片的读取的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • Python continue继续循环用法总结

    Python continue继续循环用法总结

    本篇文章给大家总结了关于Python continue继续循环的相关知识点以及用法,有需要的朋友跟着学习下吧。
    2018-06-06
  • python深度学习标准库使用argparse调参

    python深度学习标准库使用argparse调参

    这篇文章主要为大家介绍了python深度学习标准库使用argparse调参实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • python通过加号运算符操作列表的方法

    python通过加号运算符操作列表的方法

    这篇文章主要介绍了python通过加号运算符操作列表的方法,实例分析了Python使用加号运算符实现列表追加的方法,需要的朋友可以参考下
    2015-07-07
  • Python实现目录遍历和内容获取的完整指南

    Python实现目录遍历和内容获取的完整指南

    在软件开发中,目录遍历和文件系统操作是极其常见且重要的任务,本文将深入探讨Python中获取目录内容的各种方法,展示如何在不同场景下选择和使用最合适的工具,希望对大家有所帮助
    2025-09-09
  • django 将自带的数据库sqlite3改成mysql实例

    django 将自带的数据库sqlite3改成mysql实例

    这篇文章主要介绍了django 将自带的数据库sqlite3改成mysql实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • 使用python创建图片格式转换器的实现步骤

    使用python创建图片格式转换器的实现步骤

    本教程将指导如何使用 Python 编写的图片格式转换工具 ImaCon_ter.py,该工具能够将图片从一种格式转换为另一种格式,文章通过代码示例讲解的非常详细,感兴趣的小伙伴跟着小编一起来看看吧
    2024-12-12

最新评论