CSharp Allure classic NUnit with improvements

Обновлено до 1.0.6 версии.

Исправлено:

  • При вызове методов StartStep/UpdateStep/StopStep в методах, помеченных атрибутом [OneTimeSetup] и [OneTimeTearDown] теперь не будет выбрасываться исключение.

Использование аллюра в методах с атрибутами [OneTimeSetup] и [OneTimeTearDown] не является запланированным действием, по причине того, что в этот момент нет активного теста/тест-кейса, т.е. аллюр просто не знает, в какой тест-кейс записывать указанный шаг, т.к. контейнера с тест-кейсом просто не существует.
Я убрал выкидывание исключения, можно использовать аллюр в этих методах, с поправкой на то, что никакого логирования по факту выполняться не будет.

Спасибо @Ihor_Kokhan за фидбэк по данной проблеме.

1 лайк

Обновлено до 1.0.7 версии.

Добавлено:

  • Новое свойство AllureLifecycle.Instance.AllowEmptySuites
    При установке значения true, если у вас произойдёт ошибка в методе с атрибутом [OneTimeSetUp] в тестовом классе, все тесты из него попадут в отчёт с ошибкой, а не будут пропущены.

Исправлено:

  • При использовании атрибута [Retry] перезапуски теста теперь будут отображаться во вкладке Retries в отчёте, аналогично атрибуту [Repeat]

Спасибо @Ihor_Kokhan за фидбэк.

1 лайк

Обновлено до версии 2.0.

Это обновление потребует одного ручного действия, о котором написано в самом конце.

Что нового:

  • Теперь все настройки задаются в файле allureConfig.json, который должен лежать в той же директории, что и файлы сборки проекта с тестами.
    Таких настроек пока только две, но вы всегда можете предложить что-то новое и полезное :slight_smile:

  • Неактуальные более методы были помечены как Obsolete, и в дальнейших релизах будут удалены - вместо этих методов вам нужно задать значение в allureConfig.json, если вы хотите переопределить настройку

  • Добавлен новый AttachFormat - Video
    Пример использования: AllureLifecycle.Instance.AddAttachment("Видео теста", AllureLifecycle.AttachFormat.Video, pathToFile);

  • Теперь если вы запускаете тесты через IDE, по умолчанию результаты будут создаваться в директории allure-results рядом с файлами сборки проекта с тестами, а не во временной директории (в некоторых случаях это была директория внутри IDE, если она запущена с админскими правами)

Если Вам требуется использовать временную директорию, Вы можете просто указать "directory" : "temp"

:warning: После обновления до данной версии, вам нужно будет включить копирование файла allureConfig.json в Output Directory, как показано на скриншоте. Делается это один раз.
Файл появится в корне проекта.
В противном случае будет ошибка при запуске тестов.

Screenshot

image

Был обнаружен недочёт, спасибо @Ihor_Kokhan.

Обновлено до версии 2.0.4.

Что нового:

  • Аргументы тест-кейсов будут добавляться в отчёт как параметры, с указанием типа аргумента.
    Тем самым одинаковое название теста больше не будет вносить недопонимание, когда с виду тесты одинаковые, но разные аргументы.

Исправлено:

  • Если тест-кейсы имеют одинаковое название, но разные параметры - теперь такие тест-кейсы в отчёте будут фигурировать как отдельный тест, а не Retry одного и того же.

Изменено:

  • Теперь отчёты будут появляться в той директории, из которой вы запускаете тесты.
    Прошлая версия ломала генерацию отчётов в Jenkins, когда запуск тестов производился из workspace директории и отчёт искался там же, т.к. всегда генерировались результаты рядом с dll тестов (если не менять директорию по умолчанию), что не очень правильно.
    Сейчас всё вернётся на круги своя, но при запуске из IDE отчёты тем не менее будут появляться рядом с dll по умолчанию.
1 лайк

Версия 2.0.4.1 доступна для скачивания.

Так же в неё было включено ещё два нововведения.

  1. Т.к. не всегда уместно показывать значение всех параметров в отчёте (например пароли), был добавлен новый атрибут, который применяется к методам: [AllureHideParams], который принимает на вход номера параметров через запятую, которые следует скрыть.

Например так:

[AllureHideParams(2, 3)]
 public void LoginToApp(string login, string password, string password2)
        {
            //code here
        }

Соответственно, значение второго и третьего параметра (password и password2) будут скрыты в отчёте.

Пример скрытия параметра

image

  1. Так же бывают случаи, когда Вы вообще не хотите отображать какой-то параметр, а может быть и вообще все параметры.
    Для этого случая вам подойдет новый атрибут [AllureRemoveParams], который работает аналогично атрибуту [AllureHideParams], только не прячет параметры, а вообще удаляет упоминание о них из отчёта.

[AllureRemoveParams] имеет приоритет. Т.е. если вы укажите два этих атрибута с одним и тем же номером параметра - он будет удален, а не спрятан.

В json конфиг была добавлена новая настройка enableParameters, имеющая по умолчанию значение true.

Если вы хотите отключить запись параметров в тест-кейсы во всём проекте, используйте эту настройку со значением false

2 лайка

Обновлено до 2.2 версии.

Нововведения:

  • Добавлен новый метод RunStep с одной перегрузкой.
  • Добавлен новый класс Verify
  • Добавлено два новых метода, отвечающие за настройку действий при ошибках в проверках Verify и RunStep
  • Теперь шаги, которые были выполнены в методах [SetUp] и [TearDown] в отчётах будут отображаться не в TestBody, а соответственно в SetUp и TearDown.
  • Файл categories.json больше не будет удаляться из allure-results.
  • Проигнорированные тесты теперь помечаются как skipped, а не broken.

Теперь подробнее.

  1. Два новых настроечных метода:
AllureLifecycle.Instance.SetGlobalActionInException(Action action)

и

AllureLifecycle.Instance.SetCurrentTestActionInException(Action action)

Можно указать, какие действия нужно дополнительно выполнять, если в методе RunStep или в проверках в классе Verify возникла ошибка/проверка не прошла.

Например, вы можете добавить, чтобы в отчёт при ошибке так же прикреплялся скриншот:

AllureLifecycle.Instance.SetGlobalActionInException(() =>
            {
                DriverManager.MakeScreenshotAtStep();
            });

Это глобальная настройка для всех тестов, её достаточно вызвать один раз.

Метод SetCurrentTestActionInException отвечает за настройку доп. действий для конкретного теста и существует только в рамках запуска теста, если её указали.
Используется опционально.

  1. Метод AllureLifecycle.Instance.RunStep(string stepName, Action action) оборачивает указанный string в аллюр-степ.
    Если в данном методе возникнет исключение - тест зафэйлится с исключением.
    В отчёт при этом будет добавлен сабстеп у шага stepName, с текстом исключения.
    Если вы добавите доп. логику через настроечные методы из п.1, то эта информация так же добавится в отчёт как сабстепы у stepName.
    Если же ошибок не будет, то шаг stepName в отчёте просто будет зелёный.

  2. Класс Verify - это по сути копия Assert из NUnit с дополнительным функционалом.
    Использование, например так:

AllureLifecycle.Instance.Verify.That("Проверяем, что 5 больше 2", 5, Is.GreaterThan(2));

Если при данной проверке возникнет исключение (т.е. она не пройдёт), тест не упадёт и пойдёт дальше, при этом информация в отчёт будет добавлена по такой же логике, как в методе RunStep.
Подходит для большого количества проверок в рамках одного теста.
Т.е. все непрошедшие проверки будут отображены как неудачные шаги с информацией из исключений.
В отчёте так же будет наглядное сообщение о всех непрошедших проверках в ходе теста:

Screenshot

PS: Так же вы можете использовать RunStep внутри другого RunStep, если произойдёт ошибка, то все связанные шаги будут окрашены красным.
Либо использовать Verify внутри RunStep.

Более полные примеры использования нововведений вы можете посмотреть здесь: https://github.com/Noksa/Allure.NUnit/blob/master/TestsSamples/Tests1.cs

3 лайка

Обновлено до версии 2.3.

Что нового:

  • :exclamation: Теперь шаги, которые будут вызваны в методах, обозначенных атрибутами [OneTimeSetup] [Setup] [TearDown] [OneTimeTearDown] будут отображаться в своих собственных вкладках внутри Setup и TearDown, как показано на скриншоте. Эти шаги имеют такой же функционал как и шаги в тесте.
    Название вкладки с шагами - это имя метода с указанным атрибутом.
Screenshot

  • Добавлена перегрузка метода RunStep без указания первым аргументом названия шага. В таком случае названием шага будет название родительского метода.
AllureLifecycle.Instance.RunStep(() => _driver.Close());
1 лайк

Небольшое обновление 2.3.4.

Что нового:

  • Теперь название suite в отчёте будет так же содержать параметры фикстуры, если она параметризована (отобразятся при enableParameters == true):
    image
  • Добавлены опциональные аргументы в методы RunStep и в большинство перегрузок Verify.That.
    Теперь вы можете добавлять параметры в конкретный шаг (отобразятся при enableParameters == true):
AllureLifecycle.Instance.RunStep("This is my step", () =>
            {
                _driver.Close();
            }, "This is string param", 50, 2300);

  • Небольшие баг-фиксы.

Известные проблемы сейчас:

  • Не работает функционал аллюра, если вы используете мультитрединг в рамках одного теста (например через Task.Run).
    Судя по всему, не работает уже давно, будет пофикшено ASAP.
2 лайка

Совсем забыл про добавление ещё пары фич в релиз. :frowning:
Так что встречайте 2.3.5.2 :slight_smile:

Что нового:

  • Добавлена настройка отображения в отчете своих категорий. Настройка осуществляется через конфиг-файл allureConfig.json.
    Пример нового конфига с категориями:
{
  "allure": {
    "directory": "allure-results",
    "allowEmptySuites": true,
    "enableParameters": true
  },

  "categories": [
    {
      "name": "Broken locators",
      "messageRegex": ".*Unable to locate element.*"
    },
    {
      "name": "Problems with timeout",
      "messageRegex": ".*Timed out.*",
      "traceRegex": ".*"
    },
    {
      "name": "Broken tests",
      "matchedStatuses": [ "broken" ]
    },
    {
      "name": "Ignored tests",
      "matchedStatuses": [ "skipped" ]
    },
    {
      "name": "Tests with defects",
      "matchedStatuses": ["failed"] 
    }

  ]
}

Документация, как добавлять категории: https://github.com/allure-framework/allure-docs/blob/master/docs/features/categories.adoc

Если вы планируете использовать русские имена категорий, убедитесь, что ваш allureConfig.json в проекте имеет кодировку UTF-8

Соответственно, тест-кейсы, которые попадают под условия, будут добавлены в соответствующие категории в отчете:
image

  • Добавлен новый атрибут [AllureLink], для добавления ссылок к тест-кейсам или тестовым классам в отчёт, которые не подходят под определение tms или issue.
  • Атрибуты [AllureLink] [AllureTms] [AllureIssue] теперь можно применять и к тестовым классам. В таком случае ссылки будут добавлены в каждый дочерний тест/тест-кейс.
1 лайк

Доступна бета-версия 2.4.

Что нового:

  • Добавлена возможность указания переменных в Environment отчёта. Настраивается через allureConfig.json

Вы можете указать, какие переменные следует добавить в отчёт следующими способами:

  1. Константы в самом конфиг-файле, в блоке environment:
    image
    Результат:
  2. Переменные, значение которых будет известно только во время запуска тестов. Добавляется в блок environment.runtime. Работает только с константами и статичными полями/свойствами.
    Указывать необходимо следующим образом: Namespace.ClassName.MemberName
    Работает с public/internal/private:

Результат:


3) Так же можно добавлять системные переменные (и переменные из CI). Добавляется так же в блок environment.runtime следующим образом: System.Environment.NameOfVariable:

Результат:

Все типы переменных можно комбинировать как угодно.

Пример конфига с переменными:

{
  "allure": {
    "directory": "allure-results",
    "allowEmptySuites": true,
    "enableParameters": true
  },

  "categories": [
    {
      "name": "Problems with locators",
      "traceRegex": ".*NoSuchElementException.*"
    },
    {
      "name": "Problems with DOM",
      "traceRegex": ".*StaleElementReferenceException.*"
    },
    {
      "name": "Problems with timeout",
      "messageRegex": ".*Timed out.*",
      "traceRegex": ".*"
    },
    {
      "name": "Broken tests",
      "matchedStatuses": [ "broken" ]
    },
    {
      "name": "Ignored tests",
      "matchedStatuses": [ "skipped" ]
    },
    {
      "name": "Defected tests",
      "matchedStatuses": [ "failed" ]
    }
  ],

  "environment": {
    "MyVariable": "This is value of my variable",
    "runtime": [
      {
        "BrowserVersion": "SomeNameSpaceHere.SomeClassHere.BrowserVersion",
        "Browser": "SomeNameSpaceHere.SomeClassHere.BrowserType",
        "StandEnv": "SomeNameSpaceHere.SomeClassHere.Environment",
        "OS": "System.Environment.OS"
      }
    ]
  }
}

Просьба о всех проблемах/недочётах писать в ЛС.

2 лайка

Доступна версия 2.4.0.2

Что нового:

  • Добавлена возможность использования локальной History Trend, если вы запускаете тесты из IDE.
    Настраивается через allureConfig.json, необходимо в блоке allure добавить allowLocalHistoryTrend, со значением true:
"allure": {
    // another settings here
    "allowLocalHistoryTrend": true 
  },

Не ставьте значение true при прогонах на CI, либо вообще не указывайте эту настройку.
Это для тех, кто не умеет или не хочет в CI :slight_smile:

В данном обновлении нет информации о history самих тестов при локальных прогонах.

После этого, если запускать тесты более 1 раза, на главной странице отчёта будет доступна информация в виджете Trend, аналогично запускам через CI:

Исправления:

  • Поправлено отображение Retries теста, при использовании атрибутов [Retry] и [Repeat]
  • Теперь во всех Retries будут отображаться шаги, выполненные внутри [OneTimeSetup] и [OneTimeTearDown], а не только в первой попытке.
  • Исправлена ситуация, когда выбрасывалось исключение NullReferenceException в некоторых случаях вместо записи результатов тестов фикстуры.

Спасибо @Ihor_Kokhan за фидбэк.

2 лайка

На данный момент всё, что было запланировано - сделано.

По такому случаю выходит 2.5 версия.

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

Так же я добавил wiki в репозиторий на гитхабе, теперь описание нововведений будет вестись там: Home · Noksa/Allure.NUnit Wiki · GitHub

Мой письменный английский оставляет желать лучшего, поэтому не обессудьте :slight_smile:

3 лайка

2.5.0.1 released.

Fix: Ignored tests are not exists in report after updating NUnit to 3.11 · Issue #16 · Noksa/Allure.NUnit · GitHub

4 лайка

Клевую вещь делаешь! Спасибо тебе большое за это! Очень огорчает отсутствие официальной поддержки аллюра для nUnit, но очень радует, что есть такие энтузиасты):+1::+1::+1:
P.S. на неделе обязательно хочу попробовать твой репорт на своем солюшене)

1 лайк

Привет :v:

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

Привет! Прикольная фича, но в моем случае пока-что неприменима. У нас ставятся issue/link/tms через утилитку и в текущий билд, а не в следующий

Привет! Почему у тебя не добавляются логи по дефолту как у unick?

Привет.
Какие логи?

Логи конкретного теста (собственные), они у него ложатся в папку allure-results и добавляются как attachment и не надо прописывать путь, например как при добавлении картинки

Да вроде все так же работает, добавляете шаги, все само в папке появляется.