私は比較的長いタイムアウト(分)を待たなければならない「長いテスト」がたくさんあります。 たとえば、テストでいくつかのAPIを呼び出し、15分待ってから、その変更のWebページを確認した後に変更を確認します。py.testテストを一時停止し、待機時に他のテストを行う方法はありますか?
そこで質問です - いくつかのテストを一時停止するが、待っている時に他のテストを行う方法。 私はただsleep()を使うことはできません。この場合の完全なテストスーツは何時間も続くでしょう(15分*(そのようなテストの数))。私が見
一つの解決策 - (フックpytest_collection_modifyitems付き)テストアレンジ:
- 実行最初の部分のすべての長いテストの(上記の長い試験例ではAPI呼び出し) (15分の休止前)
- を実行し、すべての短いテスト
- (2)15分未満
- ラン第2の部分(一時停止後の)すべての長いテストの (上記の例では、ウェブページをご確認ください)
しかし、それは単なる大きな混乱で、管理が非常に難しいでしょう。
これは(1)で実行されるダミーテストをたくさん作成します。実際、これはテストセットアップのようなものですが、結果は必要ありませんが、pytestはそれらを別々のテストとして扱います。
UPD xdistはあまり助けになりません - 私はそれが同時に並行してテストを並列化することができても(私は時間的に有用な何かをしたいので、並行してすべての長いテストを実行しなければならないでしょう) (15分*(長いテストの数))/(xdistのプロセスの数)だけ待機するのではなく、待っています。そのためpytestのメインループにパッチを適用する -
それが唯一の方法です。したがって、テストは非同期的に実行されます。しかし、私はそれをやって起動する場所さえ分からない...
いくつかのアクションを並行して実行したいと考えています。この場合、https://docs.python.org/2/library/multiprocessing.htmlまたはhttps://docs.python.org/2/library/thread.html#module-thread – Andersson
を使用する必要があります、 非常に良いアイデア! 2番目の部分をスレッドとして実行するには、スレッド内で簡単なスリープを行います。しかし、py.testで結果を返すために必要な「配管」はわかりません。私は、py.testのメインスレッドのいくつかの場所で、この追加のスレッドがすべて終了するまで待たなければならないようですが、どのような場所にいるのでしょうか?そして、すべてのアサートを追加のスレッドからメインスレッドに渡す方法はありますか?私はpy.testのためのライブラリがあると思った。 – MasterAndrey