私は本番で同じコードのいくつかのインスタンスを使用するプログラムを書いています。インスタンスはネットワークを介して通信しますが、ここでは関係ありません。Python:forkを使用するプログラムをテストするには?
開発中に、私は最初のプロセスを複数回フォークしてインスタンスの完全な設定を取得します。これは非常に便利です。
しかし、これで統合テストを書いてみると、テストフレームワーク(unittest/nosetests/py.test)もフォークされているので、私は複数コピーのテストフレームワークになります。各子供の単位検定の出力が重複する。
簡単な例:
- プログラムは、チャットクライアントである(Redisのpubsubに、例えば)
- プログラムは、私が欲しい
- を投稿して読んでメッセージするAPIを公開して、いくつかのネットワーク接続を介して他のクライアントに接続しますお互いに接続する2つのプログラムインスタンスを分岐するには
- テストでは、クライアントとの間でメッセージの送受信を行うためにAPIを使用する必要があります。
- メインプロセス子プロセスのエラーを監視し、テストスイートを実行します。
これを達成するには、子プロセスからテストフレームワークを "アンロード"するか、停止する必要があります。これどうやってするの?
私はテストスイートを呼び出すことによってこの問題を解決することができましたが、テストを行うたびにすべての子を再起動する必要があります。
文字化けした結果を拡張し、テストしようとしているコードの大まかなアイデアを出すことができますか? – Dan
完了 - もっと理解できることを希望します。 – arnuschky
stdoutはスレッドセーフではないので、問題は出力にあると思います。各プロセスの標準出力をリダイレクトしたり、コードをリファクタリングして出力ビークルを注入したりすることができます。 – Dan