4

pytest と xdist の次の奇妙な動作に気付いた人はいますか。

ランダムに選択された値でパラメータ化されたテストを実行しようとすると、テストは実際には実行されません。xdist を使用しない場合、同じテストが問題なく実行されます。

次のコードを使用して、これを再現できます。

import pytest
import random

PARAMS_NUMBER = 3
PARAMS = []

for i in range(PARAMS_NUMBER):
    PARAMS.append(random.randrange(0, 1000))

@pytest.mark.parametrize('rand_par', PARAMS)
def test_random_param(rand_par):

    assert 500 > rand_par

xdists がなくても問題なく動作します。

xdist を使用すると、テストはまったく実行されず、次の出力が表示されます

============================= test session starts =============================
platform win32 -- Python 2.7.3 -- py-1.4.24 -- pytest-2.6.2
plugins: xdist
gw0 [3] / gw1 [3] / gw2 [3] / gw3 [3]
scheduling tests via LoadScheduling

==============================  in 1.93 seconds ===============================

私が使用しているバージョン:

  • パイソン2.7.3
  • pytest 2.6.2
  • pytest-xdist 1.11

追記:

一部の古いバージョン (xdist 1.8 および pytest 2.4.X または 2.5.X は正確には覚えていません) では、xdist が dsession.py のアサーションで停止していました。

assert collection == col

それを解決する方法、または少なくとも回避する方法について、事前に感謝します:)

4

2 に答える 2

1

回避策は、0 から までのすべての数値のように、再現可能な (ただし意味のない) 値でパラメータ化することPARAMS_NUMBER-1です。次に、各テストは、実行時にランダムな値を個別に選択できます。(クラッシュの場合に再現するために)選択したランダム値を知るために、各テストは最初にそれを出力する必要があります。少なくとも、私は xdist 以外のテストでそうしています。xdist でも動作することを願っています。つまり、出力が親プロセスに正しく伝播され、個々のテストが失敗した場合 (または py.test が -s で実行された場合) にのみ表示されます。

于 2014-09-23T06:30:34.317 に答える