我有一些参数化的测试,使用在忏悔测试中定义的夹具。当使用pytest-xdist时,我的测试失败了,但是通过了标准pytest。该夹具创建一个目录,然后由测试使用,我将得到IOErrors。
从输出结果看,这两个失败的参数化测试要么正在被收集,要么被多次运行。注意,在下面的输出中,test_save_loadobj2和test_save_loadobj0失败了,它们出现了两次,所以我假设它们被多次运行。我可以用不同的方式来编写测试,而不是参数化;但是我很想了解这个问题。任何关于发生了什么或者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] 发布于 2015-02-14 13:11:11
xdist输出与标准的pytest略有不同,因为测试是并行运行的。当你看到:
test_save_load.py:135: test_save_load[obj0]这意味着测试已经发送到其中一个节点执行。
当你看到:
[gw0] FAILED test_save_load.py:135: test_save_load[obj0] 这意味着测试已经在节点0中完成。
话虽如此,您的测试只执行一次。您对测试失败的描述似乎表明,测试正在共享某些磁盘资源(例如,它们都试图写入同一个文件名)。
您应该确保处理文件的测试在单独的目录中工作,因此每个测试都与其他测试完全隔离;您可以在tmpdir夹具的帮助下完成这一点。
如果你发布更多关于测试本身的信息,也许人们可以给出更具体的建议。
干杯,
https://stackoverflow.com/questions/28510750
复制相似问题