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

С#+WebDriver+NUnit 3 интеграция с Allure 2 Framework

csharp
nunit
infrastructure
allure
webdriver
Теги: #<Tag:0x00007f7b655a40a0> #<Tag:0x00007f7b6544bed8> #<Tag:0x00007f7b6544bc08> #<Tag:0x00007f7b6544baa0> #<Tag:0x00007f7b6544b6b8>

(Lelik) #62

Ура. Получилось. Осталось наполнить тесты дополнительными атрибутами, шагами и т.д.
А также добавить шаг в билдинг тестов для того что бы отчет генерился автоматически, а не вызывался из консоли.


(Alexandr D ) #63

Отчетами должен CI заниматься.
Так же как и запуском тестов.

У вас слишком много ручных действий


(Lelik) #64

Каких много ручных действий? Пока только с отчётом проблема. В мануале по allure генерация отчетов из консоли осуществляется такой командой allure serve path


(Alexandr D ) #65

Автоматизация должна быть автоматизацией :slight_smile:
Вмешательство человека требуется только если что-то сломалось, в остальном всё должно работать само.
А у вас:

  1. Вы прогоняете тесты внутри IDE.
  2. Вы запускаете их руками.
  3. Вы хотите сделать какой-то костыль, чтобы отчет генерился автоматически после ручного запуска тестов - но его анализ всё равно будет ручной
  4. Учитывая всё это - ваше окружение сильно испорчено, т.к. компьютера разработчика обычно имеет кучу хлама и прочего софта…

Ладно, это дискуссия по другой теме. Главное что с отчетом разобрались, дерзайте :slight_smile:


(Lelik) #66

Автоматизации автоматизация - согласна:slight_smile:
1.-4. Я запускаю внутри ide рукми что бы в режиме отладчика чт бы убедться что я получаю то что мне нужно. Т.е. мне нужен быстрый результат исключительно для отладки.
Почему CI не удобен. Я делаю изменения, комит, запускается билд приложения на билдмашине, билд\запуск тестов , деплой на тестовое окружение. Долго.
В документе https://docs.qameta.io/allure/#_report_generation не описано как добавить шаг генерация отчета и паблиш тест результатов в для tfs, к сожалению.


(Lelik) #67

Возникло несоклько вопросов по тест репорту.
Добавила шаги, но шаги не отображаются как пройденные.


тесты содерат проверки, но в тестах нет упоминания какие Assert были сделаны и какой результат.


(Alexandr D ) #68

Потому что шаги нужно:

  1. Создавать
  2. Обновлять их состояние
  3. Завершать их

Отчёт магическим образом не наполнится сам, за его заполнение отвечаете вы.


(Lelik) #69

В Allure есть еще еще атрибут Assert который нужно добавлять, что бы появились эти https://www.screencast.com/t/GROmbTGPUnE шаги?
Т.е стандартный nunit assertion не подходит? Тогда какой нужно использовать атрибут внутри шагов?


(Alexandr D ) #70

Атрибут тут не причем. Атрибуты это вообще совсем другая степь.

То, что вы привели на скриншоте - это просто выкинутые эксепшены в тестах (необработанные), с их текстом.
Для этого можно использовать любой эксепшн, необязательно Assert. Хоть обычный throw new Exception("Test")

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


(Alexandr D ) #71

Во избежание дальнейших вопросов, постараюсь привести пару примеров.

По-хорошему, естественно, надо делать какой-то вспомогательный класс, в котором будут обёртки над шагами, с какой-то логикой их обработки, чтобы это не писать каждый раз руками.

Пример в лоб №1:

            var uuid = $"{Guid.NewGuid():N}";
            var dir = new DirectoryInfo(@"C:\MyDir\");
            var dirExists = dir.Exists; 
            AllureLifecycle.Instance.StartStep($"Проверка существования директории \"{dir.FullName}\"", uuid); // старт шага
            var stepStatus = dirExists ? Status.passed : Status.failed;
            AllureLifecycle.Instance.UpdateStep(q => q.status = stepStetus);
            AllureLifecycle.Instance.StopStep(uuid); // завершение шага

Необработанные эксепшены, которые приводят к остановке программы - сами добавляются в отчет:

Screenshot

Если же вы хотите, чтобы исключение обрабатывалось и его текст записывался как ошибочный шаг (так называемые softassert) и тест шёл дальше - здесь вам нужен try-catch.


(Lelik) #72

Хорошо. С этим я разберусь.
Вопрос по результатам тестов. Сейчас результаты каждого нового билда складываются в одну и туже папку , напримет E:\Bld\A2\73\s\allure-results и соответственно затирают историю предыдущих запусков. Т.е. так задумано или нужно конфигурить ?


(Alexandr D ) #73

На данном этапе так задумано.
Для хранения истории, опять же, используйте CI.
Ну, либо сами копируйте куда-то в хранилище после тестов эту папку.


(Lelik) #74

Использую C# , Nunit, Selenium
В тест добавлен обычный assert

 
var lblcustomer = Assembly.txtCustomer.GetAttribute("value");
try
                   {                      Assert.AreEqual(parameters.EnterParams.customer, lblcustomer);
                       log.Add(string.Format("Ok.   Expected customer name is {1}, original customer name is {0}",
                             lblcustomer,
                          parameters.EnterParams.customer));
                  }
                    catch (Exception)
                     {
                         log.Add("Nok.   The customer name is wrong: " + lblcustomer);
}

В режиме Debug тест проходит без ошибок и значение
В режиме Release :

Message: Expected string length 17 but was 0. Strings differ at index 0.
Expected: “CompanyForRelease”
But was: <string.Empty>

PS
Сорри что в это теме, но новую тему не могу создать никак https://www.screencast.com/t/rVxswICZC


(Ihor Kokhan) #75

А зачем try/ catch с ассертом… Думаю что value не успевает прогрузится в lblcustomer. Попробуй убрать трай кетч и добавь Thread.sleep(2000) перед ним - только на время проверки теории.


(Lelik) #76

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


(Nick) #77

Для этого есть волшебная штука Assert.Multiple :wink:


(Ihor Kokhan) #78

Поддерживаю @unickq
Assert.Multiple(() =>
{
Assert.That…
Assert.That…
Assert.True…
});


(Alexandr D ) #79

А я предложу вам вот это:


(Lelik) #80

Спасибо большое за ваш труд. Отчеты получаются просто произведение искуства :slight_smile:
У меня воззник один один вопрос. В старой реализации тестов , я записывала так же результаты прохождения в файл. Тесты достаточно большие (end-to-end) сценарии, упрощала как могда, но все же.
Т.е я записывала в файл некоторую полезную информацию. Например:

log.Add(string.Format(
                            "product parameters: par1:{0} par2: {1}, par3: {2}",
                            par1,
                            par2, par3));

Внитри AllureLifecycle.Instance.RunStep есть возможность добавить нечто подобное?


(Alexandr D ) #81

Вы можете делать что угодно внутри RunStep.

AllureLifecycle.Instance.RunStep("Logging parameters",
                () =>
                {
                    // some code here
                    log.Add(string.Format(
                            "product parameters: par1:{0} par2: {1}, par3: {2}",
                            par1,
                            par2, par3));
                });