2016-12-30 23 views
0

私は比較的長いタイムアウト(分)を待たなければならない「長いテスト」がたくさんあります。 たとえば、テストでいくつかのAPIを呼び出し、15分待ってから、その変更のWebページを確認した後に変更を確認します。py.testテストを一時停止し、待機時に他のテストを行う方法はありますか?

そこで質問です - いくつかのテストを一時停止するが、待っている時に他のテストを行う方法。 私はただsleep()を使うことはできません。この場合の完全なテストスーツは何時間も続くでしょう(15分*(そのようなテストの数))。私が見

一つの解決策 - (フックpytest_collection_modifyitems付き)テストアレンジ:

  1. 実行最初の部分のすべての長いテストの(上記の長い試験例ではAPI呼び出し)
  2. (15分の休止前)
  3. を実行し、すべての短いテスト
  4. (2)15分未満
  5. ラン第2の部分(一時停止後の)すべての長いテストの
  6. (上記の例では、ウェブページをご確認ください)
を取った場合、少し待って(オプション)

しかし、それは単なる大きな混乱で、管理が非常に難しいでしょう。

これは(1)で実行されるダミーテストをたくさん作成します。実際、これはテストセットアップのようなものですが、結果は必要ありませんが、pytestはそれらを別々のテストとして扱います。

UPD xdistはあまり助けになりません - 私はそれが同時に並行してテストを並列化することができても(私は時間的に有用な何かをしたいので、並行してすべての長いテストを実行しなければならないでしょう) (15分*(長いテストの数))/(xdistのプロセスの数)だけ待機するのではなく、待っています。そのためpytestのメインループにパッチを適用する -

それが唯一の方法です。したがって、テストは非同期的に実行されます。しかし、私はそれをやって起動する場所さえ分からない...

+0

いくつかのアクションを並行して実行したいと考えています。この場合、https://docs.python.org/2/library/multiprocessing.htmlまたはhttps://docs.python.org/2/library/thread.html#module-thread – Andersson

+0

を使用する必要があります、 非常に良いアイデア! 2番目の部分をスレッドとして実行するには、スレッド内で簡単なスリープを行います。しかし、py.testで結果を返すために必要な「配管」はわかりません。私は、py.testのメインスレッドのいくつかの場所で、この追加のスレッドがすべて終了するまで待たなければならないようですが、どのような場所にいるのでしょうか?そして、すべてのアサートを追加のスレッドからメインスレッドに渡す方法はありますか?私はpy.testのためのライブラリがあると思った。 – MasterAndrey

答えて

0

は、テスト実行の並列化を可能にpytest-xdist plugin for pytestがあります。つまり、テストは同時に複数のプロセス(複数のCPU上)で同時に実行されます。これは、あなたが求めているものに正確には達していません。それは長時間実行されるテストを一時停止するわけではありませんが、長時間実行されるテストが実行されるのと同時に他のテストを実行することも可能です。

あなたは「最初の部分」とテストの「第二部」によって何を意味するかを説明するためにあなたの質問を編集することができた場合、私はより良い答えを与えることができるかもしれません。

+0

ありがとうございました。ちょうど今、私はxdistが私の問題にどのように役立つのか理解していません。私はそれについての私の考えを詳述するために質問を編集した。 – MasterAndrey

関連する問題