Repolode
pytest-dev

pytest-dev/pytest-randomly

一个 pytest 插件,随机打乱测试执行顺序并重置随机种子,便于复现因顺序或随机数据引发的失败。

Star
724
Fork
39
未关闭 Issue
5
最近提交
5天前

这是什么?

pytest-randomly 是 Python 测试框架 pytest 的一个插件。默认情况下,它会先在模块层面、再在类层面、最后在函数层面随机打乱测试执行顺序,帮助暴露测试之间隐藏的依赖关系。

每次运行时会输出一个基础随机种子,可通过 --randomly-seed 参数(也可用 last)传入,以复现相同的执行顺序和随机数据。每个测试的 setup、运行和 teardown 前,插件都会基于该种子和测试 ID 重置 Python 全局随机种子,使依赖随机数据的测试保持可重复。它还会同步重置 factory boy、Faker、Model Bakery、NumPy 旧版随机状态以及 Polyfactory 的随机状态。

两项行为都可以通过参数关闭,插件也支持通过 pytest_randomly.random_seeder 入口点注册自定义随机数生成器,并兼容 pytest-xdist。

核心功能

  • 01按模块、类和函数层级随机打乱测试顺序
  • 02支持 --randomly-seed 指定种子,可用 last 复用上次的种子
  • 03在每个测试的 setup、运行和 teardown 前重置随机种子
  • 04同步重置 factory boy、Faker、Model Bakery、NumPy 和 Polyfactory 的随机状态
  • 05通过入口点支持自定义随机数生成器
  • 06兼容 pytest-xdist

适用场景

  • 找出只因其他测试先执行而通过的测试
  • 复现由测试顺序或随机测试数据引起的偶发失败
  • 编写使用工厂生成数据、但结果必须可重复的测试
  • 用同一种子只重跑单个模块,排查测试间的状态污染

快速上手

  1. 1

    使用 pip 安装插件

    python -m pip install pytest-randomly
  2. 2

    运行 pytest,插件会自动打乱测试顺序并打印随机种子

    pytest

使用前须知

  • 需要 Python 3.11 至 3.15 以及 pytest 测试运行器。

收录于专题

标签

#pytest#testing#python#test-ordering#random-seed#test-isolation

常见问题

pytest-randomly 是什么?
一个 pytest 插件,随机打乱测试执行顺序并重置随机种子,便于复现因顺序或随机数据引发的失败。 pytest-randomly 是 Python 测试框架 pytest 的一个插件。默认情况下,它会先在模块层面、再在类层面、最后在函数层面随机打乱测试执行顺序,帮助暴露测试之间隐藏的依赖关系。
pytest-randomly 可以免费使用吗?用的什么许可证?
pytest-randomly 以 MIT 许可证开源。用于商业产品前,请先确认许可证条款。
pytest-randomly 还在维护吗?
活跃维护中。pytest-randomly 最近一次提交是在 2026年11月2日。
pytest-randomly 适合用来做什么?
找出只因其他测试先执行而通过的测试 复现由测试顺序或随机测试数据引起的偶发失败 编写使用工厂生成数据、但结果必须可重复的测试 用同一种子只重跑单个模块,排查测试间的状态污染
pytest-randomly 怎么安装和运行?
使用 pip 安装插件: python -m pip install pytest-randomly 运行 pytest,插件会自动打乱测试顺序并打印随机种子: pytest
在哪里获取 pytest-randomly?
源代码和安装说明在 GitHub 上:https://github.com/pytest-dev/pytest-randomly

概要由 AI 根据项目 README 生成;GitHub 数据每日更新。

相关项目