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

спасибо! Сделал как вы сказали, обратил внимание на пути этих файлов…Всё заработало.

1 лайк

привет, а как изменить имя тест-кейса уже в самом аллюре?
можно для этого использовать AllureLifecycle.Instance? или можно как-то иначе?

Привет.
Имя тест-кейса берётся из названия тест-кейса в NUnit.

Для его изменения нужно использовать [TestCase] или [TestCaseSource] атрибуты, как вариант.

[TestCase(TestName = "Verify method positive scenario")]
public void VerifyTestPos()
{
    _driver.Navigate().GoToUrl("http://ya.ru");
    AllureLifecycle.Instance.Verify.That("5 is greater than 1", 5, Is.GreaterThan(1));
    AllureLifecycle.Instance.Verify.That("5 is greater than 2", 5, Is.GreaterThan(2));
}

1 лайк

Всем привет.
Есть проект c#+Nunit3+Specflow+SpecFlow.xUnitAdapter(для того что бы отказаться от кодогенерации в feature)

В итоге конфиг:

<specFlow>
    <unitTestProvider name="NUnit" />
    <plugins>
      <add name="SpecFlow.xUnitAdapter" type="Runtime" />
      <add name="Allure" type="Runtime" />
    </plugins>
    <stepAssemblies>
      <stepAssembly assembly="Allure.SpecFlowPlugin" />
    </stepAssemblies>
  </specFlow>

Запускается это все через XUnit.Console-2.3.1

Не знаю можно ли прикрутить сюда алюр.
Поставил SpecFlow.Allure 2.3.67.1 из Nuget.

Поставил конфигу алюра:

Copy to output directory : Copy always

При запуске получаю:

System.TypeInitializationException : Инициализатор типа "Allure.SpecFlowPlugin.AllureTestTracerWrapper" выдал исключение.
      ---- System.IO.FileNotFoundException : Файл 'C:\Users\iamfr\AppData\Local\Temp\c8627d1b-6dff-4bb2-bf03-b31663b9ec72\c8627d1b-6dff-4bb2-bf03-b31663b9ec72\assembly\dl3\44c09a6d\00433b64_4a25d401\allureConfig.json' не найден.
      Stack Trace:
Could not find a source mapping.
           в Allure.SpecFlowPlugin.AllureTestTracerWrapper..ctor(ITraceListener traceListener, IStepFormatter stepFormatter, IStepDefinitionSkeletonProvider stepDefinitionSkeletonProvider, SpecFlowConfiguration specFlowConfiguration)
        ----- Inner Stack Trace -----
           в System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
           в System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
           в System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
           в System.IO.StreamReader..ctor(String path, Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize, Boolean checkHost)
           в System.IO.File.InternalReadAllText(String path, Encoding encoding, Boolean checkHost)
           в Allure.Commons.AllureLifecycle..ctor(String jsonConfigurationFile)
           в Allure.Commons.AllureLifecycle..ctor()
           в Allure.Commons.AllureLifecycle.get_Instance()
           в Allure.SpecFlowPlugin.AllureTestTracerWrapper..cctor()

Непонятно что это за путь, в котором он ищет конфиг. Есть у кого ни будь мысли по этому поводу или может кто уже сталкивался с этим?

аллюр этот вообще для дотнета какой-то нестабильный
если я тесты из студии запускаю, он как раз хочет в темп каталог класть результаты, если из консоли, то нормально генерирует туда, куда указано в аллюр конфиг джсон
попробуйте так запустить тесты локально, dotnet test projectname --filter testname, по идее, он должен сбилдить проект, запустить тест и генерить отчёт куда вы требуете

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

по итогу сейчас я ее кладу через allurelifecycle.instance.fixtureupdate(x => {x.name += appversion})
вроде так

В моей сборке вы можете это делать в секции Environment.

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

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

1 лайк

Не смущает, что юнит тест провайдер nunit в конфиге? Вроде как запускаете xunitом

Я использую ранер xUnit для того что бы не нужно было билдить проект при добавлении *.feature.
С помощью xUnit и плагином для него, это стало возможно.
Почему я решил что можно использовать nunit в этой связке в качестве unitTestProvider - о такой возможности пишет автор плагина. И это работает, *.feature файлы находит, тесты запускаются, асерты nunit работают

Это для net core? У меня не core проект

Тогда это магия и не относится к этой теме :smiley:

В смысле это вопрос к оригинальгному плагину, который читает путь allureConfig.json из Assembly.Location.
Вполне вероятно XUnit.Console по-своему раскидывает файлы - можно по тому пути руками подбросить json, если этот путь не динамический.

Динамический)

Проблема поиска конфига для аллюра вне папки сборки проекта решена давно - Ability to store the configuration file in the specified directory · Noksa/Allure.NUnit Wiki · GitHub

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

Это очень классно, но можете увидеть, что используется оригинальный Allure.Commons, а не переписанный вами для чтения своих конфигов :wink:

Никогда не поздно отказаться от использования оригинального Allure.Commons, который еле развивается.

Моё дело предложить человеку, а будет он пользоваться или нет - дело сугубо его личное.
Не надо за него отвечать.

1 лайк

Александр, читайте глубже. У человека спекфлоу, xunit. Вопрос был задан именно об этом стеке.
Потому ответ в стиле а у меня уже все решено давно, не важно, что не с тем - как-то ни о чём :slight_smile:

Так уж получается, что эта тема гуглится по словам Allure Csharp и создает путаницу всем тем, кто пытается понять что и как прикрутить.