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

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

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

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

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

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

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

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

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

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

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

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

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

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

В Allure есть еще еще атрибут Assert который нужно добавлять, что бы появились эти 2018-09-04_1730 шаги?
Т.е стандартный nunit assertion не подходит? Тогда какой нужно использовать атрибут внутри шагов?

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

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

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

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

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

Пример в лоб №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.

2 лайка

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

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

Использую 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
Сорри что в это теме, но новую тему не могу создать никак 2018-09-10_1132

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

1 лайк

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

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

1 лайк

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

1 лайк

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

1 лайк

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

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

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

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

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