我们有测试java应用程序。
此应用程序执行不同类型的测试。在一个步骤中,它启动Silk Test。
这个应用程序使用System.out.println编写了很多跟踪。
我们将此跟踪重定向到cmd文件中的文件app.trace。
类似于:
java com.test.app > app.trace当此测试应用程序停止时,无法删除app.trace文件,因为它已被Silk Test Open Agent锁定。
我不明白这个应用程序怎么能锁定我们的跟踪文件。
我们不会直接从代码中启动此应用程序。
我们使用Silk4J库启动Silk Test。
据我所知,这个库连接到启动Silk Test Open Agent的Silk Test窗口服务。
谁能解释一下Silk Test Open Agent锁定我们的跟踪文件的原因和方式?
发布于 2012-05-26 01:22:37
这是因为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-07-02 23:26:09
原因是子进程继承了其父进程的打开文件,在本例中,将输出流重定向到该文件。这是有意义的,因为它还允许您捕获这些子进程的输出。
然而,除非David Genrich在他的回答中建议,否则我不会强行杀死代理,因为它可能无法释放一些资源并进行适当的清理。这可能会导致后续问题。
我建议在运行测试之前单独启动OpenAgent ,这样它就不是测试运行器的子进程。
https://stackoverflow.com/questions/9607459
复制相似问题