试图理解参数化测试的pytest-xdist失败

时间:2015-02-13 23:55:55

标签: pytest

我有一些参数化测试,使用conftest中定义的夹具。当使用pytest-xdist但是通过标准pytest时,我的测试失败了。 fixture会创建一个目录,然后由测试使用,我将获得IOErrors。

从输出中看,两个失败的参数化测试似乎正在被收集和/或被多次运行。请注意下面的输出中test_save_load [obj2]和test_save_load [obj0]失败,这些出现两次,所以我假设它们正在多次运行。我可以用不同的方式编写测试,而不是参数化;但很想知道这个问题。任何有关正在发生的事情或pytest-xdist如何帮助理解该问题的任何想法将不胜感激。

谢谢!

以下是我输出的片段:

platform darwin -- Python 2.7.6 -- pytest-2.5.1 -- 
plugins: xdist
[gw0] darwin Python 2.7.6 cwd: /tests/unit_tests
[gw1] darwin Python 2.7.6 cwd: /tests/unit_tests
[gw2] darwin Python 2.7.6 cwd: /tests/unit_tests
[gw3] darwin Python 2.7.6 cwd: /tests/unit_tests
[gw0] Python 2.7.6 (v2.7.6:3a1db0d2747e, Nov 10 2013, 00:42:54)  -- [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)]
[gw2] Python 2.7.6 (v2.7.6:3a1db0d2747e, Nov 10 2013, 00:42:54)  -- [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)]
[gw1] Python 2.7.6 (v2.7.6:3a1db0d2747e, Nov 10 2013, 00:42:54)  -- [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)]
[gw3] Python 2.7.6 (v2.7.6:3a1db0d2747e, Nov 10 2013, 00:42:54)  -- [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)]
gw0 [30] / gw1 [30] / gw2 [30] / gw3 [30]
scheduling tests via LoadScheduling

test_save_load.py:17: test_exceptions 
test_save_load.py:135: test_save_load[obj0] 
test_save_load.py:45: test_gnome_obj_reference 
test_save_load.py:135: test_save_load[obj2] 
[gw3] PASSED test_save_load.py:17: test_exceptions 
[gw1] PASSED test_save_load.py:45: test_gnome_obj_reference 
test_save_load.py:31: test_reference_object 
[gw3] PASSED test_save_load.py:31: test_reference_object 
test_save_load.py:73: test_savloc_created 
test_save_load.py:135: test_save_load[obj4] 
[gw1] PASSED test_save_load.py:73: test_savloc_created 
test_save_load.py:135: test_save_load[obj5] 
[gw3] PASSED test_save_load.py:135: test_save_load[obj4] 
test_save_load.py:135: test_save_load[obj6] 
[gw2] FAILED test_save_load.py:135: test_save_load[obj2] 
[gw0] FAILED test_save_load.py:135: test_save_load[obj0] 

1 个答案:

答案 0 :(得分:1)

xdist输出与标准的pytest略有不同,因为测试是并行运行的。当你看到:

test_save_load.py:135: test_save_load[obj0]

这意味着测试已发送到其中一个节点以供执行。

当你看到:

[gw0] FAILED test_save_load.py:135: test_save_load[obj0] 

它只表示测试已在节点0中完成。

话虽这么说,你的测试只执行一次。您对测试失败的描述似乎表明测试正在共享一些磁盘资源(例如,它们都试图写入相同的文件名)。

您应确保处理文件的测试在不同的目录中工作,以便每个测试与其他测试完全隔离;你可以借助tmpdir灯具来实现这一目标。

如果您自己发布有关测试的更多信息,也许人们可以提供更具体的建议。

干杯,