1

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

java com.test.app > app.trace

このテスト アプリケーションが停止すると、app.trace ファイルは Silk Test Open Agent によってロックされているため、削除できません。
このアプリケーションがトレース ファイルをロックする方法がわかりません。
このアプリケーションをコードから直接開始することはありません。
Silk4J lib を使用して Silk Test を開始します。
私が知る限り、このライブラリは、Silk Test Open Agent を開始する Silk Test Windows サービスに接続します。
Silk Test Open Agent がトレース ファイルをロックする理由と方法を教えてください。

4

2 に答える 2

1

これは、テストの終了時にOpenAgentが終了しないためです。スイートが完成したら、OpenAgentを強制終了します。

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メソッドからこれを呼び出して、実行するたびにOpenAgentが強制終了されるようにします。これは、ライセンスの解放にも役立ちます。

于 2012-05-25T17:22:37.300 に答える
0

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

ただし、David Genrichが彼の回答で提案した以外の場合、エージェントを強制的に強制終了することはありません. これにより、フォローアップの問題が発生する可能性があります。

テスト ランナーの子プロセスにならないように、テストを実行するに OpenAgent を個別に開始することをお勧めします。

于 2012-07-02T15:26:09.040 に答える