2012-03-07 3 views
1

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

java com.test.app > app.trace 

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

+0

Я сделал быстрый тест, и я не мог воспроизвести это поведение. Вы уверены, что процесс java, который написал файлы, отключен после тестирования (обратитесь в диспетчер процессов)? Вы проверили, что это действительно агент SilkTest, который заблокировал файлы? – tehlexx

+0

Да - процесс Java завершен. И да - агент SilkTest обрабатывает файл. Я проверил его через Process Explorer. Завтра я вернусь к этой проблеме. Если я найду что-то новое, я обновлю свой вопрос. –

ответ

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

0

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^