問題タブ [xdist]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - pytest-xdistがテストを並行して実行する方法を制御する方法はありますか?
私は次のディレクトリレイアウトを持っています:
testsuite*.pyモジュールの形式は次のとおりです。
私が抱えている問題は、「testsuites」を並行して実行したいということです。つまり、testsuite1、testsuite2、testsuite3、testsuite4を並行して実行したいのですが、testsuites内の個々のテストを連続して実行する必要があります。
py.testの「xdist」プラグインを使用し、「py.test -n 4」を使用してテストを開始すると、py.testはすべてのテストを収集し、4人のワーカー間でランダムに負荷分散します。これにより、「testsuitex.py」モジュール内の各テストのたびに「setup_class」メソッドが実行されます(これは私の目的に反します。setup_classをクラスごとに1回だけ実行し、その後テストを連続して実行する必要があります)。
基本的に、実行をどのように見せたいかは次のとおりです。
while worker1, worker2, worker3 and worker4
はすべて並行して実行されます。
'pytest-xidst'フレームワークでこれを実現する方法はありますか?
私が考えることができる唯一のオプションは、runner.py内で各テストスイートを個別に実行するためにさまざまなプロセスを開始することです。
python - グローバルフィクスチャがある場合、Python ユニットテストを py.test に変換するにはどうすればよいですか?
Python のunittestモジュールを使用して記述された単体テストのセットがあります。彼らは setUpModule() 関数を使用して、テスト (一部の HTTP セッションを含む) を実行するために必要な共有の「もの」をグローバル変数にロードしています。
でテストを実行するとunittest
、正常に実行されます。py.test
彼らは失敗しています。
少しパッチを当てて、古いpytestフィクスチャ関数 (たまたまunittestと同じ名前ではない) を使用して実行できるようにしました。それは機能しましたが、複数のスレッドで実行されていない場合のみでした。これは私が使用したい機能です。
私の場合、各クラス内に 10 個のテストを持つ 20 個のクラス (unittest.TestCase) があるため、ドキュメントの例は役に立ちません。明らかに、各テストに新しいパラメーターを追加したくありません。
これまでは、クラスの setUp() メソッドを使用して共有ディクショナリを自己内にロードし、そこから各テスト内で使用していました。
そして今、テスト:
複数のスレッドで機能し、フィクスチャを 1 回呼び出すソリューションが必要であることを覚えておいてください。
python - xdist を使用した py.test は、ランダムな値でパラメータ化されたテストを実行していません
pytest と xdist の次の奇妙な動作に気付いた人はいますか。
ランダムに選択された値でパラメータ化されたテストを実行しようとすると、テストは実際には実行されません。xdist を使用しない場合、同じテストが問題なく実行されます。
次のコードを使用して、これを再現できます。
xdists がなくても問題なく動作します。
xdist を使用すると、テストはまったく実行されず、次の出力が表示されます
私が使用しているバージョン:
- パイソン2.7.3
- pytest 2.6.2
- pytest-xdist 1.11
追記:
一部の古いバージョン (xdist 1.8 および pytest 2.4.X または 2.5.X は正確には覚えていません) では、xdist が dsession.py のアサーションで停止していました。
それを解決する方法、または少なくとも回避する方法について、事前に感謝します:)
python - -n > 1 ですべてのテストをスキップする xdist を使用した py.test
テストの実行には 2 分かかります。
xdist
…というわけで、プラグインを使って並列実行してみようと思いました。だから、私はした:
2 秒というのは驚異的なスピードアップです。ただし、テストは実行されていないと思いますが、いくつかのドットが表示されるのではないでしょうか。ただし、1 つのプロセスだけで「並列」実行すると…</p>
…そして、時間は通常に戻ります。
xdist
プラグインに実際にテストを実行させるにはどうすればよいですか?
アップデート:
ブルーノ・オリベイラの質問への回答:
python - pytest + xdist が出力をキャプチャしないのはなぜですか?
並列テストの実行に pytest-xdist で pytest を使用しています。-s
テストの実行時に標準出力を介して端末に渡すオプションを尊重していないようです。これを実現する方法はありますか?これにより、さまざまなプロセスからの出力がターミナルでごちゃごちゃになる可能性があることはわかっていますが、それで問題ありません。
python - スレーブごとに 1 つのテストを実行する pytest-xdist
私のシナリオは、何らかのイベントが発生したときに接続された websocket に通知するサーバーで構成されています。Websocket クエリ パラメータは、クライアントに通知するイベントの種類を指定します。
通知用の一連の定義済みイベントと、予想される一致イベントがわかっている一連の Websocket URL があります。
私が取得したいのは、次のことです。
- 通知サービスを開始します (イベントのストリームを待っています)
- テストごとに、websocket を介してクライアントを接続します
- イベント ストリームを開始する
- ストリームが完了したら通知サーバーを停止します (websocket を閉じます)
- クライアント (テスト) は、受信したイベントが予想されるイベントと一致することを Websocket クロージャーでチェックします。
このシナリオは、すべてのテストが同時に実行された場合にのみ機能します。このため、「-n」を使用して pytest-xdist を使用することを考えました。
残念ながら、これはうまくいかないようです。私が取得した 8 つのテストは、予想どおり 4 つのテストがすぐに実行されますが、最後の 4 つのテストは、最初のテストが終了したときにのみ開始されます。
pytest-xdist コード ( dession.py:366-368 )を正しく理解している場合、テストは少なくとも 2 つのテストのチャンクでスレーブ間で分割されているように見えます。
これは明らかに、私のセットアップを危険にさらし、動作を説明します。
誰かがこの問題の回避策を思い付くことができますか?
python - Wing IDE pytest: プラグイン (xdist など) を統合して使用する方法
Wing IDE (Pro) のテスト ツールは、pytest 単体テスト フレームワークをサポートするようになりました。
pytest プラグイン、特に xdist を統合して使用するにはどうすればよいですか? たとえば、(Wing IDE GUI からトリガーされて) テストを実行するときに、テストを複数の CPU に分散させたいと考えています。
私が試したこと:
- パッケージマネージャー経由でpytestとxdistをインストールしました
- ファイルの 333 行目に
-n3
( xdist 固有の引数)を追加しました (run_pytest_xml.py
私の Ubuntu では、これは にあります/usr/lib/wingide5/src/testing/runners/run_pytest_xml.py
) 。
オリジナル:
かわった:
これはうまくいきませんでした。[Run Tests] をクリックすると、エラー メッセージが表示されます
test_delme.py で test_asdf を実行中にテスト プロセスが突然終了した
注意: '-n3'
333 行目がない場合、テストは正常に動作します。