Почему я не вижу вывод консоли или трассировки при выполнении нагрузочных тестов в VS 2015?

У меня определены DEBUG и TRACE. Я пробовал Trace.WriteLine, Debug.WriteLine, Console.WriteLine и TestContext.WriteLine. В окне результатов теста я добавил столбцы для вывода (StdOut), ошибок (StdError), трассировки отладки и трассировки стека. Я пробовал все параметры «Показать вывод из», доступные для разных потоков в окне «Вывод». Я просмотрел все сводное окно вывода с графиками и прочим. И нигде я не могу найти ни одного байта вывода трассировки.

У меня была та же проблема с VS 2008, в которой нагрузочные тесты были новой и грубой функцией... Я думал, что обновление упростит задачу, но это не так.

Во всем Интернете люди говорят о регистрации сообщений трассировки на консоли в этих тестах, как будто это самая простая и очевидная вещь в мире. У меня нет проблем с таким выводом трассировки во время обычной отладки, только при запуске нагрузочных тестов. Почему я не могу найти способ сделать это?

[ОБНОВЛЕНИЕ] Я нашел частичный ответ: я вижу вывод трассировки при неудачных тестах. После прогона с ошибками открывается страница графиков и статистики, а в разных местах ссылка на ошибки. Нажмите на нее и откройте окно Load Test Errors, щелкните правой кнопкой мыши ошибку и выберите View Details, и вы получите страницу, на которой есть раздел «Дополнительная информация», и этот раздел включает все сообщения, написанные с помощью TestContext.WriteLine. Также есть раздел Debug Trace, в котором есть сообщения, написанные с помощью Debug.WriteLine.

Но я не вижу способа посмотреть на этот вывод для успешного запуска. (И было бы неплохо иметь возможность объединять определенные выходные данные в один поток, но я думаю, что понимаю, почему это нужно реализовывать вручную.)


person Paul Kienitz    schedule 18.11.2015    source источник


Ответы (2)


После долгих поисков я наконец нашел ответ на этот вопрос. Обратите внимание, что, как вы заметили, по умолчанию он регистрируется только при возникновении ошибки (журнал под дополнительной информацией на экране сведений об ошибке). Настройка для этого находится в свойствах «параметров запуска», раздел ведения журнала, свойство « Сохранить журнал при сбое теста», значение которого по умолчанию — «true».

Теперь к решению. Помимо этого свойства есть еще одно, называемое «Сохранить частоту журнала для завершенных тестов». Значение по умолчанию — 0. Это свойство используется для сохранения журнала тестов для одного из N тестов. Если вы хотите, чтобы журналы создавались в течение 100 % времени, установите для него значение 1. 1 из 1 — это 100 %.

После того, как вы это сделаете, чтобы найти журнал, на экране результатов (щелкните правой кнопкой мыши на нагрузочном тесте и выберите «Открыть и управлять результатами..») перейдите на вкладку «Подробности», которая покажет вам несколько графиков. Наведите указатель мыши на отдельные тесты в «диаграмме активности виртуальных пользователей», и вы увидите там ссылку на «журнал тестов». Вуаля! Миссия выполнена.

person AbsolutelyFreeWeb    schedule 26.01.2019

Возможно, потому что то, что вы хотите, недоступно.

Я использую метод, чтобы открыть 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, но я не нашел способа просмотреть или собрать файлы журналов таких тестовых запусков.

person AdrianHHH    schedule 19.11.2015
comment
Я думаю, вы можете быть правы, что вы просто не можете добраться туда отсюда, и вам нужно свернуть свой собственный вывод... но я продолжаю видеть вещи, которые звучат так, как будто люди говорят, что это легко. Может быть, они имеют в виду в подобных случаях - например, вы можете сделать это в прогонах тестов, если они не являются нагрузочными тестами. - person Paul Kienitz; 20.11.2015
comment
@PaulKienitz Можете ли вы предоставить ссылки на утверждения о том, что это легко? - person AdrianHHH; 20.11.2015