1

テストの実行には 2 分かかります。

$ 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…というわけで、プラグインを使って並列実行してみようと思いました。だから、私はした:

$ 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 秒というのは驚異的なスピードアップです。ただし、テストは実行されていないと思いますが、いくつかのドットが表示されるのではないでしょうか。ただし、1 つのプロセスだけで「並列」実行すると…</p>

$ 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プラグインに実際にテストを実行させるにはどうすればよいですか?

アップデート:

ブルーノ・オリベイラの質問への回答:

$ 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 ===============================
4

2 に答える 2

2

Marek が示唆しているように、テストをパラメーター化するためにランダム化された値を使用していません。ただし、彼の提案により、別の仮説を確認するようになりました。これは真実のようです。xdistテストのパラメーター化は常に同じ順序で生成される必要があります。

私の特定のケースでは、一連setの文字列を反復処理することにより、パラメーター化によって生成しました。ただし、この繰り返しは、文字列がハッシュされる特定の値に依存し、これらの値はプロセスごとに異なる場合があります。したがって、私は常にまったく同じパラメータ化を生成していましたが、それらは異なる順序でした.

問題を示す簡単なテスト ケース:

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て、文字列のランダム化されたハッシュを確実にトリガーします。

簡単な回避策は、テストに特定の順序付けを強制することです。たとえば、いくつかのパラメーターで並べ替えます。

my_names = sorted(my_names)

この問題を回避するために、比較のために並べ替えのパラメーター化を行うxdist提案を py.test のバグトラッカーに提出しました。

于 2014-09-23T13:45:26.817 に答える
1

私にとっては、私が気づいた同様の問題のように見えます:)

あなたのテストは何らかの形でランダムにパラメータ化されていますか? はいの場合は、 xdist を使用したpy.test をご覧ください。ランダムな値でパラメータ化されたテストを実行していません。

あなたの場合も私の場合も、実際にはスキップされていません (実際にスキップされている場合は、要約で X がスキップされます)。

于 2014-09-23T10:02:37.960 に答える