2012-03-07 8 views
1

私たちはJavaアプリケーションをテストしています。
このアプリケーションは、さまざまな種類のテストを実行します。 1ステップでシルクテストを開始します。
このアプリケーションは、System.out.printlnを使用して多くのトレースを書き込みます。
このトレースをcmdファイルのapp.traceファイルにリダイレクトします。以下のような
何か:シルクテストオープンエージェントはトレースファイルをロックします

java com.test.app > app.trace 

このテスト・アプリケーションは、それがシルクテストオープンエージェントによってロックされているので、app.traceファイルを削除することはできません停止します。
このアプリケーションがトレースファイルをどのようにロックするかわかりません。
私たちはコードからこのアプリケーションを直接起動しません。
Silk Testを開始するためにSilk4J libを使用します。
私が知っている限り、このライブラリは、Silk Test Open Agentを起動するSilk Test Windowsサービスに接続しています。
Silk Test Open Agentがトレースファイルをロックする理由とその理由を誰でも説明できますか?

+0

私は簡単なテストを行いましたが、その動作を再現できませんでした。テスト後にファイルを書き込んだJavaプロセスがシャットダウンされていることを確認してください(プロセスマネージャで確認してください)。実際にファイルをロックしているSilkTestエージェントであることを確認しましたか? – tehlexx

+0

はい - javaプロセスがシャットダウンしています。そしてyes - SilkTest Agentがファイルを盗み出します。私はプロセスエクスプローラでチェックしました。私は明日この問題に戻るでしょう。私が何か新しいことを見つけたら、私は質問を更新します。 –

答えて

1

これは、テストが終了してもOpen Agentが終了しないためです。スイートが完成したらOpen Agentを殺すだけです。

public class ProcessKill { 

public void killOpenAgent() { 
    kill ("openAgent.exe"); 
} 

public void kill (String processName) { 
    String command = "cmd /c taskkill"; 
    String parameter = " /F /IM " + processName; 
    System.out.println("Killing process: " + processName); 

    try { 
     Runtime.getRuntime().exec(command + parameter); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    }  
} 
} 

私は私のテストを制御するためのTestNGを使用していますので、私はちょうど常にオープンエージェントは、各実行後に殺されていることを確認する@AfterSuiteメソッドからこれを呼び出します。これはライセンスのリリースにも役立ちます。

0

その理由は、子プロセスが親のオープンファイル、この場合はリダイレクトされた出力ストリームをファイルに継承するからです。これは理にかなっているので、それらの子プロセスの出力もキャプチャできるようになります。

しかし、David Genrich氏の回答では、強制的にエージェントを殺すことはありませんでした。エージェントが強制的にリソースを解放して適切にクリーンアップできないためです。これはフォローアップの問題につながる可能性があります。

の前にOpenAgent を別々に起動することをお勧めします。このテストはテストランナーの子プロセスではありません。

関連する問題