Почему я не вижу вывод консоли или трассировки при выполнении нагрузочных тестов в VS 2015?
Я определил DEBUG и TRACE. Я пробовал Trace.WriteLine, Debug.WriteLine, Console.WriteLine и TestContext.WriteLine. В окне результатов теста я добавил столбцы для вывода (StdOut), ошибок (StdError), трассировки отладки и трассировки стека. Я попробовал все опции "Показать вывод из", доступные для разных потоков в окне "Вывод". Я просмотрел итоговое окно вывода с графиками и прочим. И нигде я не могу найти ни одного байта вывода трассировки.
У меня была такая же проблема с VS 2008, в которой нагрузочные тесты были новой и грубой функцией... Я думал, что обновление сделает вещи проще, но это не так.
По всему Интернету люди говорят о регистрации сообщений трассировки на консоли в этих тестах, как будто это самая простая и очевидная вещь в мире. У меня нет проблем с выводом трассировки такого рода во время обычной отладки, только при выполнении нагрузочных тестов. Почему я не могу найти способ сделать это?
[ОБНОВЛЕНИЕ] Я нашел частичный ответ: я могу видеть вывод трассировки при неудачных прогонах теста. После прогона с ошибками открывается страница графиков и статистики, и в разных местах есть ссылка на ошибки. Щелкните по нему и откройте окно Load Test Errors, щелкните правой кнопкой мыши ошибку и выберите View Details, и вы получите страницу, на которой есть раздел "Дополнительная информация", и этот раздел содержит все сообщения, написанные с помощью TestContext.WriteLine. Также есть раздел трассировки отладки, в котором есть сообщения, написанные с помощью Debug.WriteLine.
Но я не вижу способа посмотреть на этот результат для успешного запуска. (И было бы неплохо иметь возможность объединить определенные выходные данные в один поток, но я думаю, я понимаю, почему нужно было бы реализовать это вручную.)
1 ответ
После долгих поисков я наконец нашел ответ на этот вопрос. Обратите внимание, что, как вы заметили, по умолчанию, он регистрирует только когда есть ошибка (журнал под дополнительной информацией, на экране подробных сведений об ошибке). Параметр для этого находится в свойствах "настройки запуска", раздел логирования, свойство ". Save Log on test Failure", который имеет значение по умолчанию" true ".
Теперь к решению. Рядом с этим свойством есть одно, называемое "Сохранить частоту журналов для завершенных тестов". Значение по умолчанию равно 0. Это свойство используется для сохранения журнала тестов для одного из N тестов. Если вы хотите, чтобы журналы создавались 100% времени, тогда вы установите их на 1. 1 из 1 - это 100%.
После того, как вы это сделали, чтобы найти журнал, на экране результатов (щелкните правой кнопкой мыши на нагрузочном тесте и выберите "открыть и управлять результатами..."), перейдите на вкладку "Сведения", где будут отображаться некоторые графики. Наведите указатель мыши на отдельные тесты в "таблице активности виртуальных пользователей", и вы увидите там ссылку на "журнал тестов". Вуаля! Миссия выполнена.
Возможно, потому что то, что вы хотите, не доступно.
Метод, который я использую, чтобы открыть StreamWriter
записать в текстовый файл. Для некоторых случаев я использую код в стиле:
private void WriteLineToTestLog(string line)
{
StreamWriter sw = File.AppendText("C:\\Windows\\Temp\\MyWebtestsLog.txt");
sw.WriteLine(System.DateTime.Now + " " + line);
sw.Close();
}
Для тестов со многими виртуальными пользователями я беспокоился о производительности приведенного выше кода. Поэтому я создал версию, в которой один общий поток защищен блокировкой:
public class SingletonWriter
{
private static object myLock = new object();
private static SingletonWriter mySingleton = null;
private StreamWriter outStream;
public static string AgentId { get; set; } // Set when running with multiple agent computers.
private SingletonWriter()
{
if ( AgentId == null ) { AgentId = "00"; }
string streamName = @"TestStatus." + System.DateTime.Now.ToString("yyyy-MM-dd.HHmm.") + AgentId + ".log";
System.Console.WriteLine("Writing to " + streamName);
outStream = new StreamWriter(streamName, true); // true means append to an existing file.
outStream.WriteLine("Start of output");
outStream.Flush();
}
public static void WriteLine(string line)
{
lock (myLock)
{
if (mySingleton == null)
{
mySingleton = new SingletonWriter();
}
mySingleton.outStream.WriteLine(line);
mySingleton.outStream.Flush();
}
}
}
Это вызывается из плагинов в других веб-тестах с таким кодом:
StringBuilder message sb = new StringBuilder();
sb.Append(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff "));
sb.Append(e.WebTest.Name);
sb.Append(...); // More useful data
string message = sb.ToString();
e.WebTest.AddCommentToResult(message);
SingletonWriter.WriteLine(message);
Файлы журнала записываются на компьютер, на котором выполняется тест. Поскольку это может быть компьютер агента, файлы необходимо будет скопировать с агента на компьютер, где они должны быть проанализированы. Код также работает без ошибок, когда тесты запускаются с Visual Studio Online, но я не нашел никакого способа просмотра или сбора файлов журнала из таких тестовых прогонов.