Агент Silk Test Open Agent блокирует файл трассировки

У нас есть приложение для тестирования Java.
Это приложение выполняет различные типы тестирования. На одном шаге он запускает Silk Test.
Это приложение записывает много трассировок, используя System.out.println.
Мы перенаправляем эти трассировки в файл app.trace в нашем cmd-файле.
Что-то вроде:

java com.test.app > app.trace

Когда это тестовое приложение останавливается, невозможно удалить файл app.trace, потому что он заблокирован агентом Silk Test Open Agent.
Я не понимаю, как это приложение может заблокировать наш файл трассировки.
Мы не запускаем это приложение непосредственно из нашего кода.
Мы используем библиотеку Silk4J для запуска Silk Test.
Насколько я знаю, эта библиотека подключается к службе Windows Silk Test, которая запускает Silk Test Open Agent.
Кто-нибудь может объяснить мне, почему и как Silk Test Open Agent блокирует наш файл трассировки?


person Volodymyr Bezuglyy    schedule 07.03.2012    source источник
comment
Я сделал быстрый тест, и я не мог воспроизвести это поведение. Вы уверены, что процесс Java, который записал файлы, закрыт после тестирования (проверьте с диспетчером процессов)? Вы убедились, что действительно агент SilkTest заблокировал файлы?   -  person tehlexx    schedule 08.03.2012
comment
Да - процесс Java остановлен. И да, агент SilkTest блокирует файл. Проверял через Process Explorer. Я вернусь к этой проблеме завтра. Если я найду что-то новое - я обновлю свой вопрос.   -  person Volodymyr Bezuglyy    schedule 08.03.2012


Ответы (2)


Причина этого в том, что 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 уничтожается после каждого запуска. Это также помогает освободить лицензию.

person David Genrich    schedule 25.05.2012

Причина в том, что дочерние процессы наследуют открытые файлы своих родителей, в данном случае перенаправленный поток вывода в файл. Это имеет смысл, так как позволяет также захватывать выходные данные этих дочерних процессов.

Однако, в противном случае, как предложил Дэвид Генрих в своем ответе, я бы не стал принудительно убивать агента, поскольку он может не высвободить некоторые ресурсы и не очиститься должным образом. Это может привести к последующим проблемам.

Я предлагаю отдельно запускать OpenAgent перед запуском тестов, чтобы он не был дочерним процессом исполнителя тестов.

person tehlexx    schedule 02.07.2012