用于分布式测试和失败模式循环的pytest xdist插件
pytest-xdist的Python项目详细描述
xlist:pytest分布式测试插件
pytest xdist插件使用一些独特的 测试执行模式:
- 测试运行并行化:如果您有多个CPU或主机,可以使用 用于组合测试运行的。这样可以加快速度 开发或使用远程机器的特殊资源
- --looponfail :在子流程中重复运行测试。每次跑步后 pytest等待项目中的文件更改,然后重新运行 以前失败的测试。重复此操作直到所有测试通过 之后,再次执行完整的运行。
- 多平台:您可以指定不同的python解释器 或不同的平台,并在所有平台上并行运行测试。
在远程运行测试之前, pytest 有效地"rsyncs"您的 将源代码编程到远程位置。所有测试结果 返回并显示到本地终端。 您可以指定不同的python版本和解释器。
如果您想知道Pytest XDist是如何在封面下工作的,请签出 概述
安装
使用以下命令安装插件:
pip install pytest-xdist
或在开发/就位模式下使用包 检查pytest xdist存储库
pip install --editable .
通过向多个CPU发送测试来加速测试运行
要将测试发送到多个CPU,请键入:
pytest -n NUM
尤其是长时间运行的测试要求 大量I/O这会导致相当大的速度提升。这个选项可以 也可设置为 自动 以自动检测CPU数量。
如果测试使解释器崩溃,pytest xdist将自动重新启动 那个工人和往常一样报告故障。你可以使用 --最大工人重新启动 选项,以限制可以 重新启动,或使用 --max worker restart=0完全禁用重新启动
默认情况下, -n 选项将把挂起的测试发送给任何可用的工作进程,而不发送 任何有保证的订单,但您可以通过以下选项来控制:
- --dist=loadscope :对于 测试功能,测试将按模块分组 对于 测试方法,通过 类 ,然后将每个组发送给可用的工作人员, 确保组中的所有测试都在同一进程中运行。如果你有 昂贵的模块级或类级设备。当前无法自定义分组, 按类分组优先于按模块分组。 此功能是在版本 1.19 中添加的
- --dist=loadfile :测试将按文件名分组,然后发送到可用的 worker,保证组中的所有测试都在同一个worker中运行。已添加此功能 版本 1.21
在python子进程中运行测试
要实例化python3.5子流程并向其发送测试,可以键入:
pytest -d --tx popen//python=python3.5
这将启动一个子进程,该子进程使用 python3.5运行 python解释器,位于系统二进制查找路径中。
如果在–tx选项值前面加上这样的前缀:
--tx 3*popen//python=python3.5
然后创建三个子流程并测试 将在这三个过程中实现负载平衡。
此功能已移动到 pytest forked插件,但是 --装箱选项 仍然保持向后兼容。
假设您有一个包含 可以在本地成功运行的测试。你呢 有一个ssh可访问的机器 myhost 。然后 您可以通过键入:
pytest -d --tx ssh=myhostpopen --rsyncdir mypkg mypkg
这将同步您的
mypkg
包目录
到远程ssh帐户,然后在本地收集测试
并将它们发送到远程执行。
您可以指定多个
--rsyncdir
目录
发送到远程端。
为了让pytest正确地收集和发送测试
你不仅需要确保所有的代码和测试
目录是rsynced的,但是任何测试(子)目录
也有一个
\uu init\uuuu.py
文件,因为在内部
pytest将测试引用为完全限定的python
模块路径。
否则会出现奇怪的错误
在设置遥控侧期间。
您可以指定多个
--rsyncignore
glob模式
当文件发送到远程端时被忽略。
也有内部忽略:
*,*.pyc,*.pyo,*~
使用rsyncignore命令行或
INI文件选项。