帮酷LOGO
0 0 评论
  • 显示原文与译文双语对照的内容
文章标签:模式  test  分布式  plugin  测试  loop  distributed-testing  
a py.test plugin for distributed testing and loop-on-failures testing modes.

  • 源代码名称:pytest-xdist
  • 源代码网址:http://www.github.com/pytest-dev/pytest-xdist
  • pytest-xdist源代码文档
  • pytest-xdist源代码下载
  • Git URL:
    git://www.github.com/pytest-dev/pytest-xdist.git
  • Git Clone代码到本地:
    git clone http://www.github.com/pytest-dev/pytest-xdist
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/pytest-dev/pytest-xdist
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
  • PyPI versionPython versionsAnaconda versionTravis CI build statusAppVeyor build status

    xdist: pytest分布式测试插件

    pytest-xdist插件插件扩展了一些独特的测试执行模式:

    • 测试运行并行化插件: 如果你有多个 CPU 或者主机,可以将它们用于组合测试运行。 这样可以加快开发速度,或者使用远程机器的特殊资源。
    • --looponfail: 在子进程中重复运行测试。 每次运行 py.test 之后,等待项目中的文件更改,然后运行以前失败的测试。 在所有测试经过之后重复执行,然后执行一次完整的运行。
    • 在所有平台上,你可以指定不同的python 解释器或者不同的平台,并在所有平台上并行运行测试。

    在远程运行测试之前,py.test 有效地将程序源代码"rsyncs"到远程位置。 所有测试结果都会报告并显示到你的本地终端。 你可以指定不同的python 版本和解释器。

    如果你想了解如何在封面下使用 pytest-xdist,请检查概述

    安装

    安装插件:

    pip install pytest-xdist

    或者在开发/就绪模式下使用包,以检查 pytest-xdist存储库的状态。

    pip install --editable. 

    通过向多个 CPU 发送测试来加快测试运行

    要将测试发送到多个 CPU,请键入:

    py.test -n NUM

    尤其对于长期运行的测试或者需要大量 I/O的测试,这可能会导致相当大的速度提升。 这里选项也可以设置为 auto,用于自动检测 CPU的数目。

    如果测试崩溃,pytest-xdist将自动重新启动该工作线程并报告失败,如下所示。 可以使用 --max-worker-restart 选项来限制可以重新启动的工作线程数,或者使用 --max-worker-restart=0 禁用重新启动。

    默认情况下,-n 选项将向任何可以用的工具发送挂起的测试,但是可以通过以下选项控制这里选项:

    • --dist=loadscope: 测试将按照测试功能模块分组,and测试方法测试方法 group group group group group group group group。 如果你有昂贵的模块级别或者类级设备,这可能很有用。 当前不能自定义分组,按类别分组优先于按 MODULE 分组。 这里功能已经在版本 1.19 中添加。
    • --dist=loadfile: 测试将按文件 NAME 分组,然后将发送到可用的worker,以保证组中的所有测试都在同一个工作线程中运行。 这里功能已经在版本 1.21 中添加。

    在 python-子进程中运行测试

    要实例化 python3.5 子流程并向它的发送测试,你可以键入:

    py.test -d --tx popen//python=python3.5

    这将启动一个运行在 python3.5 python 解释器中的子进程,在你的系统二进制查找路径中找到。

    如果对--tx选项值进行如下前缀:

    --tx 3*popen//python=python3.5

    然后创建三个子流程,并在这三个过程中负载平衡。

    在盒装子进程中运行测试

    这个功能已经转移到了 pytest-fork插件插件,但是选项仍然保持向后兼容。

    将测试发送到远程SSH帐户

    假设你有一个包 mypkg,其中包含一些可以在本地成功运行的测试。 你有一个ssh可以访问的机器 myhost。 然后,你可以通过键入以下命令来即席分发测试:

    py.test -d --tx ssh=myhostpopen --rsyncdir mypkg mypkg

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

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

    便笺

    为了正确收集和发送测试,不仅需要确保所有代码和测试目录都是 rsynced,而且任何测试( 子) 目录都有 __init__.py 文件,因为内部 py.test 引用了完全限定的python MODULE 路径。 否则,你将在设置远程侧时获得奇怪的错误( )。

    你可以指定将文件发送到远程端时忽略的多个 --rsyncignore 全局模式。 也有内部忽略: .*, *.pyc, *.pyo, *~ 使用rsyncignore命令行或者ini文件 option(s) 无法重写的那些文件。

    将测试发送到远程套接字服务器

    下载单个模块 socketserver.py python 程序,并像这样运行它:

    python socketserver.py

    它会告诉你它开始监听默认端口。 现在可以在家庭网络上使用类似如下的方式指定这个新的套接字主机:

    py.test -d --tx socket=192.168.1.102:8888 --rsyncdir mypkg mypkg

    一次在多个平台上运行测试

    在多个平台上运行测试的基本命令是:

    py.test --dist=each --tx=spec1 --tx=spec2

    如果你指定了一个 Windows 主机,一个OSX主机和一个Linux环境将把每个测试发送到所有平台,并立即报告所有平台的故障。 规范字符串使用了 xSpec语法。

    在测试期间标识工作进程

    版本 1.15.

    如果需要在测试或者夹具中确定工作进程的标识,可以使用 worker_id 设备来执行这里操作:

    @pytest.fixture()defuser_account(worker_id):
     """ use a different account in each xdist worker """return"account_%s"% worker_id

    xdist 被禁用( 使用 -n0 运行示例) 时,worker_id 将返回 "master"

    此外,辅助进程还定义了以下 环境变量:

    • PYTEST_XDIST_WORKER: worker,比如,"gw2"的NAME。
    • PYTEST_XDIST_WORKER_COUNT: 在命令行中给定 -n 4 时,这里会话中的工作人员总数,比如,"4"

    在测试中关于worker_id的信息也存储在 TestReport 中,在 worker_id 属性下。

    在ini文件中指定测试执行环境

    你可以使用pytest文件配置的ini来避免键入常见选项。 例如你可以使用三种类型的子流程来运行:

    [pytest]addopts = -n3

    你还可以添加这样的默认环境:

    [pytest]addopts = --tx ssh=myhost//python=python3.5 --tx ssh=myhost//python=python3.6

    然后输入:

    py.test --dist=each

    在每个环境中运行测试。

    在ini文件中指定"rsync"目录

    在 root 项目目录中的tox.ini 或者 setup.cfg 文件中,可以指定要包括或者同步排除的目录:

    [pytest]rsyncdirs =. mypkg helperpkgrsyncignore =. hg

    这些目录规范相对于配置文件所在的目录。



    文章标签:plugin  模式  test  测试  分布式  loop  distributed-testing  

    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语