与多个进程并行运行测试
备注
0.3版新增功能
使用 mp
插件,用于跨多个进程分发测试。如果测试严重限制了IO或CPU,那么这样做可能会加快测试运行。但是 征收间接费用 这不是小事,而且 使测试夹具的使用复杂化 5月 与未设计用于它的插件冲突 .
使用
要激活插件,请将插件模块包含在插件列表中 [unittest]
配置文件中的节::
[unittest]
plugins = nose2.plugins.mp
或通过模块 --plugin
命令行选项:
nose2 --plugin=nose2.plugins.mp
然后配置要运行的进程数。你也可以用 -N
选项:
nose2 -N 2
或通过设置 processes
在 [multiprocess]
配置文件的节::
[multiprocess]
processes = 2
备注
如果通过设置使插件始终处于活动状态 always-on
在 [multiprocess]
配置文件的节,但不设置 processes
或通行证 -N
,进程数默认为可用CPU数。还要注意,值0将把实际进程数设置为计算机上的CPU数。
如果要指定进程间通信使用Internet套接字,请指定 bind_address
设置在 [multiprocess]
配置文件的节,例如:
[multiprocess]
bind_address = 127.0.0.1:1024
这将绑定到的端口1024 127.0.0.1
. 也::
[multiprocess]
bind_address = 127.1.2.3
将绑定到上的任意打开端口 127.1.2.3
. python可以识别的任何Internet地址或主机名,bind, and 可接受连接。同时 0.0.0.0
可以用于监听,它不一定是操作系统可以连接到的地址。当端口地址为 0
或者省略,使用随机开放端口。如果该设置被省略或为空,则除非在窗口上执行鼻形操作,否则不使用插座。在这种情况下,将使用回送接口上的地址和随机端口。无论何时使用,进程都使用随机共享密钥进行身份验证。
Windows上的可能问题
在windows上,有一些关于多处理的已知错误。
Windows上的Python不使用fork()。它从单独的解释器调用引导。在某些上下文中,参数的“值”将被视为“计数”,子流程使用它来构建命令行的标志。例如,如果此值为20亿(如散列种子),则subcess.py可能会尝试构建2GIG字符串,并可能抛出内存错误异常。与之相关的漏洞是http://bugs.python.org/issue20954.
参考文献
启用此插件
此插件是内置的,但默认情况下不加载。
即使您指定 always-on = True
在配置中,除非您也启用它,否则它不会运行。您可以通过将以下内容放入 unittest.cfg
或 nose2.cfg
文件
[unittest]
plugins = nose2.plugins.mp
这个 plugins
参数可以包含插件名称列表,包括 nose2.plugins.mp
配置 [多进程]
- always-on
- 违约:
假
- 类型:
布尔
- bind_address
- 违约:
没有
- 类型:
STR
- processes
- 违约:
0
- 类型:
整数
- test-run-timeout
- 违约:
60.0
- 类型:
浮动
示例配置
默认配置相当于在 unittest.cfg
文件。
[multiprocess]
always-on = False
processes = 0
test-run-timeout = 60.0
命令行选项
- -N DEFAULT, --processes DEFAULT
用于运行测试的进程数(0=自动)