t.me/atinfo_chat Telegram группа по автоматизации тестирования

Specflow 3, .net core – как подключить любимый всеми Allure?

Теги: #<Tag:0x00007fd76873e140> #<Tag:0x00007fd76873e028> #<Tag:0x00007fd76873df60> #<Tag:0x00007fd76873de48> #<Tag:0x00007fd76873dd58> #<Tag:0x00007fd76873dc90>

Всем привет! Не могу заставить работать вместе Specflow 3 и Allure.
По гайдам и репозиториям из интернета запилил вот такую штуку:

using BoDi;
using TechTalk.SpecFlow;

namespace InternalAutomation.Helpers
{
    [Binding]
    class Hooks
    {
        private Browser _browser;
        private readonly IObjectContainer _objectContainer;

        public Hooks(IObjectContainer objectContainer)
        {
            _objectContainer = objectContainer;
        }

        [BeforeScenario]
        public void Setup()
        {
            _browser = new Browser();
            _objectContainer.RegisterInstanceAs(_browser);
        }

        [AfterScenario]
        public void TearDown()
        {
            _browser.Termination();
        }
    }
}

Ну и заготовка под работу с браузером:

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using System;

namespace InternalAutomation.Helpers
{
    public class Browser
    {
        public IWebDriver driver;

        public Browser()
        {
            Start();
        }

        private void Start()
        {
            ChromeOptions opt = new ChromeOptions();

            opt.AddArgument("--window-size=1920,1080");
            opt.AddArgument("--enable-automation");
            opt.AddArgument("--no-sandbox");
            opt.AddArgument("--disable-notifications");

            opt.AddUserProfilePreference("credentials_enable_service", false);
            opt.AddUserProfilePreference("profile.password_manager_enabled", false);


            driver = new ChromeDriver(opt);

            driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(4);
        }

        public void Termination()
        {
            driver.Quit();
        }
    }
}

Без аллюра тесты запускаются, все окей
как только аллюр пихаю в зависимости
image
и указываю его в конфиге SpecFlow
image

ошибка при запуске тестов
Message: OneTimeSetUp: System.MissingMethodException : Method not found: 'Void BoDi.ObjectContainer.RegisterTypeAs(System.String)'.

в интернете советуют что-то такое

objectContainer.ResolveAll<UIItemFactory>()
to
objectContainer.RegisterTypeAs<THE_IMPLEMENTATION, UIItemFactory>()

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

Я знаю только как свою версию подключить. Точнее знал, но на гитхабе вот тут https://github.com/Noksa/Allure.NUnit/wiki/SpecFlow-configuration есть небольшой гайд.

Давно хотел попробовать прикрутить Allure к Specflow проекту, всё руки не доходили. Этот вопрос дал пинка.
В общем у меня с самого начала не взлетело ровно с той же самой ошибкой.
Через час-полтора копания нашёл причину - надо завязаться на конкретную версию SpecFlow, которую саппортят ребята в пакете SpecFlow.Allure. Для SpecFlow.Allure v3.5.0.4 это завязка на SpecFlow v3.5.5: https://github.com/allure-framework/allure-csharp/blob/master/Allure.Features/Allure.Features.csproj#L12

И да, у меня потом в итоге получилось сгенерить репорт на основе прогона тестов!

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

1 Симпатия

Меня собственно натолкнуло на верный путь чтение их мануала по которому разу… там они в явном виде говорят:

Install Specflow.Allure nuget package according to your Specflow version.