2016-12-30 4 views
1

複雑なWebベースのアプリケーションの受け入れテストにfitnesseを使用しています。フルスイートには数時間かかるので、複数のプロセスを使用しています。次のようにセットアップは次のとおりです。マルチプロセスフィットネステスト環境のJava OOM

  1. MavenのフォークますFitnesseサーバプロセス
  2. MavenはHTTPがバック2に戻り、各呼び出しのためのフォークテストランナー
  3. HTTP呼び出しが戻るサーバー
  4. ますFitnesseサーバーをFitNesseのために呼び出しを行います

3でjvmを起動するコマンドラインは、http呼び出しパラメータに基づいてfitnesse jarファイル内に構築されています。つまり、サポートされているものだけを任意のjvm引数で渡すことはできません。

今、私たちが直面している問題は、プロセスが3つのハングアップを開始することがあることです。私たちが複数の時間にわたってぶら下がっているのを見たので、タイムアウトのようには見えません。

これらのjvmプロセスはjmx経由で何も公開しないため、jconsoleなどを使用してこれらのjvmプロセスに接続することはできません。各プロセスが消費するメモリ量(1-1.5G)に基づいて、ランナープロセスのどこかでOOMが発生し、正常に終了しないことが強く疑われます。また、サーバープロセスで "kill -3"を試すと、起動されたランナープロセスからstdoutと思われるものが生成されますが、わかりません。

私は現在、コマンドラインを制御するクラスのコピーを作成して、すべてのプロセスがランダム化されたjmxポートとデバッグポートで開始されるようにしているため、接続して調査することができます。

だから、問題は、それを行うより良い方法はありますか?私は何かここに明白な行方不明ですか?

+1

テストランナーを生み出すプロセスが1つ必要ですか?私は並列化した同様のテストスイートを持っていますが、私のサブスイートはそれぞれ完全に独立しています。それはあなたのために働くことができますか? –

+0

@FriedHoeben、原則として可能です。しかし、それは私が全部を書き直さなければならないことを意味するでしょう。私たちのテストインフラストラクチャのこの部分は継承されており、最初から書き直すのに多くの時間を費やしたくありません。 – ilj

答えて

0

FitNesseのコアはスレッドセーフではないと思います。だから、走者がどのようにスタートしているかをコントロールすることに集中するのではなく、テストプロセスを完全に分離して実行することをお勧めします。 FitNesseとテストランナーのために単一のプロセスを使用することで(そして複数のスイートを並列に実行したい場合)、デバッグが容易になります。問題があれば簡単に作成できます。余分なプロセスを追加してこれらの新しいプロセスにアタッチすると、テスト実行/スイートのプロセスのみが存在します)。

jUnitランナー(1つのプロセスを使用してFitNesseとテストランナーを実行)でテストスイートを実行し、並列に実行するテストスイートごとに別々の(jUnit)プロセスを開始します。私は実際にmaven経由でプロセスの作成を制御するのではなく、Jenkinsのジョブで複数のプロセスを使用します。それぞれが同じmavenコマンドを実行しますが、異なるシステムプロパティを使用し、システムプロパティの1つがどのスイートを実行するかを制御します。

このような方法を使用すると、テスト設定に大きな変化が生じる可能性があります。しかし、私はあなたのプロセスを少し変えて同様の結果を得ることができると信じています。あなたはあなたのMaven POMがどのように構造化されているかを正確には指定していません。しかし、ステップ2-4だけではなく、各スイートごとにステップ1-4を繰り返すことはできませんか?これは、FitNesseサーバーが(1段階で)リッスンし、コマンドラインパラメーター(-p)で簡単に実行できるポートを変更する必要があるようです。 wikiと同じプロセスで実行するには、手順2で使用したURLに&debugを追加します。