我有一些参数化测试,使用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]
答案 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灯具来实现这一目标。
如果您自己发布有关测试的更多信息,也许人们可以提供更具体的建议。
干杯,