用于分布式测试和失败模式循环的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帐户发送测试

假设您有一个包含 可以在本地成功运行的测试。你呢 有一个ssh可访问的机器 myhost 。然后 您可以通过键入:

pytest -d --tx ssh=myhostpopen --rsyncdir mypkg mypkg

这将同步您的 mypkg 包目录 到远程ssh帐户,然后在本地收集测试 并将它们发送到远程执行。

您可以指定多个 --rsyncdir 目录 发送到远程端。

< div > 注

为了让pytest正确地收集和发送测试 你不仅需要确保所有的代码和测试 目录是rsynced的,但是任何测试(子)目录 也有一个 \uu init\uuuu.py 文件,因为在内部 pytest将测试引用为完全限定的python 模块路径。 否则会出现奇怪的错误 在设置遥控侧期间。

您可以指定多个 --rsyncignore glob模式 当文件发送到远程端时被忽略。 也有内部忽略: *,*.pyc,*.pyo,*~ 使用rsyncignore命令行或 INI文件选项。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java无法在spring boot应用程序中启用本机内存跟踪   jakarta ee在Java Web项目上的多窗口   日期将Java时间戳转换为MySQL时间戳,反之亦然   java如何实现异步任务连接到服务器并解析JSON   java为什么我得到索引越界异常?   我们如何在java中以大写字母和小写字母存储同名文件   jni/java:有效不可变本机对象的线程安全发布/共享   Java将文本写入远程文件   int最小硬币算法   java如何设置/获取我在类Vehicle的主方法中创建的类Car的“ford”实例的名称?   java使用计时器在队列已满时重新调度使用者   java从字符串的末尾提取一个子字符串,直到遇到第一个空格为止?   java在SimpleApplication之外正确初始化物理状态