1

我们有测试java应用程序。
此应用程序执行不同类型的测试。在一个步骤中,它会启动 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

其原因是测试完成时 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 方法调用它,以始终确保 Open Agent 在每次运行后都被杀死。这也有助于释放许可证。

于 2012-05-25T17:22:37.300 回答
0

原因是子进程继承了它们父进程的打开文件,在这种情况下是重定向的输出流到文件。这是有道理的,因为它还允许您捕获这些子进程的输出。

但是,除了 David Genrich 在他的回答中建议的以外,我不会强行杀死代理,因为它可能无法释放一些资源并正确清理。这可能会导致后续问题。

我建议在运行测试之前单独启动 OpenAgent ,这样它就不是测试运行器的子进程。

于 2012-07-02T15:26:09.040 回答