我们测试了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 Windows服务,该服务启动Silk Test Open Agent
有没有人可以解释我 - 为什么以及Silk Test Open Agent如何锁定我们的跟踪文件?
答案 0 :(得分: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。这也有助于释放许可证。
答案 1 :(得分:0)
原因是子进程继承了父进程的打开文件,在这种情况下是重定向的输出流到文件。这是有道理的,因为它允许您捕获这些子进程的输出。
然而,除了David Genrich在他的回答中建议,我不会强行杀死代理,因为它可能无法释放一些资源并正确清理。这可能会导致后续问题。
我建议您在运行测试之前单独启动OpenAgent 之前,这样它就不是测试运行器的子进程。