Доброго времени суток, коллеги!
Я столкнулся со следующими проблемами/неудобствами в аллюре на C#:
- Невозможность добавления шагов/аттачей в [SetUp] и [TearDown] методах.
- Отсутствие нормальной возможности указания собственных:
- Suite (самое неприятное)
- SubSuite
- Owner
- Epic Suite
- Parent Suite
-
При выполнении действий в других потоках в рамках одного теста - allure падает с исключением.
Т.е. если вы сделаете нечто подобноеTask.Run( () => someMethod());
и внутри данного метода будет вызвано логирование аллюр - выбросится исключение NullReferenceException.
-
-
Отсутствие проигнорированных тест-кейсов/тестов в отчётах. Это кейсы, у которых прописано TestCaseData.Ignore(string), а не в самом тесте Assert.Ignore (!)
Для меня это оказалось критично, т.к. если мы не смогли найти подходящие тестовые данные из БД для кейса, он должен об этом кричать в отчете, а не отсутствовать там. -
Отсутствие нормального AddAttachment метода, который форматировал бы string в читабельный вид с отступами (json/xml).
Было что-то ещё, но оно не столь критичное, сейчас я уже не вспомню.
Я взял за основу проект https://github.com/u...ure-csharp-fork и добавил в него всю необходимую функциональность.
Переработанный мною C# allure имеет функциональность только для классического NUnit.
Если вы используете SpecFlow - не устанавливайте этот пакет, в нём нет ничего относящегося к SpecFlow, у вас всё сломается!
В будущем я добавлю нововведения для SpecFlow и сам SpecFlow, если это вообще кому-то будет нужно, кроме меня.
Представляю вашему вниманию nuget пакет с переработанным C# Allure под классический NUnit: https://www.nuget.or...a.NUnit.Allure/
.NET 4.5.x и .NET 4.5 на данный момент не поддерживаются.
Некоторые методы я видоизменил, поэтому возможно придётся немного изменить их старую сигнатуру переходя с классического аллюра. Но это не точно.
Кратко, как использовать данный allure и его некоторые новые фишки:
- ГЛАВНОЕ: Для включения логирования - необходимо унаследовать класс Allure.Commons.AllureReport базовым классом ваших тестов. Не нужно у каждого класса/метода писать какие-либо allure атрибуты:
public abstract class ABaseTestConfig : AllureReport
Либо непосредственно каждый класс с тестами, если базового нет.
- Для использования своего названия Suite, нужно добавить атрибут [AllureSuiteAttribute] у класса:
[AllureSuite(LoginPassNotExists)] public partial class MyTests: ABaseApiTestConfig
Пример:
suite.png 30,59К 0 Количество загрузок:
Внутри класса у методов можно использовать атрибут [AllureSubSuiteAttribute], для разделения на более мелкие Suite’s внутри одной большой [AllureSuiteAttribute]
- Для указания Epic Story для всего класса следует использовать атрибут [AllureEpicAttribute]:
[AllureEpic("Epic story")] public partial class MyTests: ABaseApiTestConfig
Пример:
epicstory.png 15,99К 1 Количество загрузок:
Соответственно, если в таком классе будут методы с атрибутами [AllureStoryAttribute], все они будут дочерними в следующем порядке:
Epic -> Feature > Story.
-
Атрибут [AllureOwnerAttribute] - устанавливает Owner’a теста\тест-кейса.
-
Если у метода указаны атрибуты [AllureIssueAttribute], то в отчете в Suite класса добавится ещё один SubSuite с названием “With Defects”, где будет список тестов/кейсов класса, в которых этот атрибут присутствует.
Сделано для быстрого поиска тестов с дефектами в указанных классах.
suitewithdefects.png 75,37К 3 Количество загрузок: -
Аналогично дефектам из 5 пункта, в Suite класса будут добавлены все проигнорированные тесты/кейсы этого класса (для этого ничего указывать не надо).
-
Сам игнорированный тест имеет в отчете указанную причину, по которой это произошло. ignoredtest.png 27,06К 0 Количество загрузок:
- Добавлена перегрузка метода AddAttachment()
Выглядит так:
public AllureLifecycle AddAttachment(string name, AttachFormat type, string content, string fileExtension = "")
Используется для добавления отформатированных аттачей (xml/json), чтобы они выглядели читабельно, а не в одну строку:
attachs.png 83,6К 2 Количество загрузок:
- Соответственно, теперь можно использовать добавление шагов/атачей в [SetUp] и [TearDown]методах.
Пример Setup:
[SetUp] public virtual void Setup() { AllureLifecycle.Instance.AddAttachment($"Screenshot [{DateTime.Now:HH:mm:ss}]", "image/png", Driver.TakeScreenshot().AsByteArray); ... }
-
- Возможность использования потоков внутри одного теста для логирования в аллюр.
Например:Task.Run( () => someMethod());
Данный метод будет иметь начальным шагом не текущий шаг главного потока, а рутовый шаг отчета.
Если вы в этом методе будете создавать steps с substeps - они будут создаваться корректно, внутри steps своего потока.
- Возможность использования потоков внутри одного теста для логирования в аллюр.
Итд…
Если возникнут проблемы/вопросы, пишите, буду рад помочь.
Из известных проблем сейчас:
- В отчет попадают все проигнорированные тест-кейсы из тестового класса, даже если вы запускали только один тест в нём.