Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Получить сообщение об ошибке/stack trace из Visual Sti


(Vyacheslav Klevchenya) #1

Здравствуйте. Потихоньку пишутся/гоняются функциональные “автотесты” на конфигурации Webdriver+Visual Studio (2013 Community)+C#+MS Unit (т.е. “с точки зрения” Visual Studio это просто набор юнит тестов в юнит-тест проекте)
До недавнего времени задача была “написать и прогонять” (запуск “ручной”, без CI) и вполне хватало после прохождения “посмотреть” результаты в VS. Однако поскольку такая практика “не очень удобная”, решил “на коленке” сделать репорт-генератор, который запускается в CleanUp методе и берет из TestContext-а название степа, результат, генерит/добавляет в отчет название скриншота (в случае необходимости), и вычитывает Standard Output

[TestCleanup]
    public virtual void TestCleanUp()
    {
        TestReport.ReportGeneration(TestContext);           
    } 

всё было хорошо, пока не дошел до записи в отчёт текста ошибки, которая происходит в случае падения теста (ну и стек-трейс было бы хорошо). Рецепты, которые нагуглились - не помогли (то ли “не тот случай”, то ли знаний не хватает по C#)
На http://sqa.stackexchange.com/ посоветовали “не заморачиваться” со своим репортом, а использовать trx файлы (и “велосипеды”, котоыре уже давно написаны), которые студия должна бы генерить - но то ли не там ищу, то ли Community Edition данные файлы не генерит ( http://sqa.stackexchange.com/questions/11798/get-visual-studio-2013-community-unit-test-execution-messages).

Буду благодарен за советы/подсказки, как выйти из данного положения:) “Чувствую”, что решение простое и лежит где-то на поверхности…


(Sergey Korol) #2

По .Net у нас тут спец @dzhariy. Можете его поспрашивать. Но учитывайте разницу в часовых поясах. Т.е. лучше писать вечером, если вы из Украины / России.


(Дмитрий Жарий) #3

Чисто из своего опыта, обрадовать тем, что у меня получалось найти что-то для создания отчетов быстро и на поверхности – я не могу.

Я провел немало времени в поисках того самого генератора отчетов из результатов тестового прогона… но, идеального для UI тестов так и не нашел. Те, что есть – хорошо справляются с результатами модульных тестов, где достаточно показать красный или зеленый кружочек. Но… вставить картинку в результат уже становится проблематичным.

Если коротко, то у меня тоже есть класс TestReport, который по сути, представляет из себя список элементов, в который я и логирую все происходящее. При этом. логирование идет в реальном времени, а не после тестового прогона, так что можно посмотреть результат с картинками во время прогона.
Картинки в такой отчет я вставляю при помощи data uri:

Так что в результате получается 1 html файл, который обновляется после каждого теста
Концептуально выглядит так:

    public interface ILogItem
        {
            string ItemType { get; }
            DateTime Timestamp { get; set; }
            string Content { get; set; }
        }


        public class TextMessage : ILogItem
        {
            public string ItemType { get { return "TextMessage"; } }
            public DateTime Timestamp { get; set; }
            public string Content { get; set; }
        }

        public class ImageItem : ILogItem
        {
            public string ItemType { get { return "ImageItem"; } }
            public DateTime Timestamp { get; set; }
            public string Content { get; set; } // base64 string
        }

        public class TestReport : List<ILogItem>
        {

            public void Log(string message)
            {
                var item = new TextMessage() 
                {
                    Timestamp = DateTime.Now,
                    Content = message
                };
                this.Add(item);
            }

            public void Log(Screenshot screenshot)
            {
                var item = new ImageItem()
                {
                    Timestamp = DateTime.Now,
                    Content = screenshot.AsBase64EncodedString
                };
                this.Add(item);
            }

            public void SaveReport()
            {
                // generate html file
            }

        }

Для генерации HTML отчета я использую шаблонизатор. Т.е. никакой генерации HTML кода внутри C# у меня нет, и это очень важно (раз уже на этом поскользнулся). В моем случае это Razor (RazorEngine).
В шаблоне содержится вся логика презентации: bootstrap с css, статистика и детализация прогона с подсветкой ошибок, неудавшихся проверок и различных других типов сообщений.

В итоге:

TestReport – накапливает сообщения во время теста.
После каждого теста – передает все данные шаблону
Код шаблона генерирует HTML (со встроенными картинками) и записывает html файл на диск.
(В моем случае, еще отдельно копирует отчет на сетевую шару)

На такое решение нужно потратить пару дней. Готового, и так чтобы меня все устраивало – я не встречал.


(sidelnikovmike) #4

А вы не пробовали смотреть в сторону http://allure.qatools.ru ?
Там вроде есть адаптер для c#. Если не взять сам аллюр, то можно посмотреть, как разработчики реализвали его для вашего языка.


(Vyacheslav Klevchenya) #5

Спасибо!


(Vyacheslav Klevchenya) #6

Спасибо за идею, еще не смотрел.