首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有xdist的py.test跳过-n >1的所有测试

具有xdist的py.test跳过-n >1的所有测试
EN

Stack Overflow用户
提问于 2014-09-22 13:13:00
回答 2查看 909关注 0票数 1

我的测试需要2分钟才能运行:

代码语言:javascript
复制
$ py.test
================================================= test session starts =================================================
platform linux2 -- Python 2.7.8 -- py-1.4.24 -- pytest-2.5.2
plugins: cov, xdist
collected 2249 items 

«lots of file names»
====================================== 2242 passed, 7 skipped in 120.01 seconds =======================================

…所以我想我应该试试xdist插件来并行运行它们。所以,我做了

代码语言:javascript
复制
$ pip install pytest-xdist
$ py.test -n 2
================================================= test session starts =================================================
platform linux2 -- Python 2.7.8 -- py-1.4.24 -- pytest-2.5.2
plugins: cov, xdist
gw0 [2249] / gw1 [2249]
scheduling tests via LoadScheduling

==================================================  in 2.65 seconds ===================================================

2秒将是一个了不起的加速…。虽然我认为没有测试-一些点会出现,不是吗?但是,如果我执行“并行”操作,则只运行一个进程…。

代码语言:javascript
复制
$ py.test -n 1
================================================= test session starts =================================================
platform linux2 -- Python 2.7.8 -- py-1.4.24 -- pytest-2.5.2
plugins: cov, xdist
gw0 [2249]
scheduling tests via LoadScheduling
....«lots and lots of dots»........
====================================== 2242 passed, 7 skipped in 122.27 seconds =======================================

…那么时间就恢复正常了。

如何让xdist插件实际运行测试?

更新:

对Bruno Oliveira问题的回答:

代码语言:javascript
复制
$ py.test -n 4 -vv
============================= test session starts ==============================
platform linux2 -- Python 2.7.8 -- py-1.4.24 -- pytest-2.5.2 -- /home/liori/proj/.ve/bin/python2
plugins: cov, xdist
[gw0] linux2 Python 2.7.8 cwd: /home/liori/proj/src
[gw1] linux2 Python 2.7.8 cwd: /home/liori/proj/src
[gw2] linux2 Python 2.7.8 cwd: /home/liori/proj/src
[gw3] linux2 Python 2.7.8 cwd: /home/liori/proj/src
[gw0] Python 2.7.8 (default, Aug 23 2014, 21:00:50)  -- [GCC 4.9.1]
[gw1] Python 2.7.8 (default, Aug 23 2014, 21:00:50)  -- [GCC 4.9.1]
[gw2] Python 2.7.8 (default, Aug 23 2014, 21:00:50)  -- [GCC 4.9.1]
[gw3] Python 2.7.8 (default, Aug 23 2014, 21:00:50)  -- [GCC 4.9.1]
gw0 [2254] / gw1 [2254] / gw2 [2254] / gw3 [2254]
scheduling tests via LoadScheduling

===============================  in 4.63 seconds ===============================
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-23 13:45:26

我还没有像马立克所建议的那样,用随机数值对我的测试进行参数化。然而,他的建议促使我去验证另一个假设,这似乎是正确的:xdist要求测试的参数化总是按照相同的顺序生成。

在我的具体情况下,我通过迭代字符串的set生成参数化。但是,这个迭代依赖于字符串散列到的特定值,每个进程的这些值可能是不同的。因此,虽然我总是生成完全相同的参数化,但它们的顺序不同。

一个简单的测试用例显示了这个问题:

代码语言:javascript
复制
import pytest

my_names = {'john', 'kate', 'alfred', 'paul', 'mary'}

@pytest.mark.parametrize('name', list(my_names), ids=list(my_names))
def test_is_name_short(name):
    assert len(name) < 7

使用PYTHONHASHSEED=random py.test -n 4运行以确保为字符串触发随机散列。

一个简单的解决方法是在测试上强制执行特定的排序,例如通过对它们进行某些参数的排序:

代码语言:javascript
复制
my_names = sorted(my_names)

为了避免这个问题,我已经向py.test的for跟踪器提交了一个建议,供 sort parametrizations进行比较。

票数 2
EN

Stack Overflow用户

发布于 2014-09-23 10:02:37

对我来说,类似的问题我已经注意到了:)

你的测试是随机参数化的吗?如果是,请看一下py.test with xdist is not executing tests parametrized with random values

在您和我的例子中,它实际上都不是跳过(如果真的跳过了,那么您将在摘要中跳过X)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25975038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档