Запуск Specrun и использование Baseclass.contrib.Specflow для кроссбраузерных параметризованных тестов в VS2015

Я хотел бы использовать SpecRunner вместе с библиотекой Baseclass.Contrib.SpecFlow.Selenium.NUnit. Когда я добавил SpecRunner для SpecFlow 2 из раздела «Управление пакетами Nuget», поставщиком модульных тестов был «SpecRun» в app.config. Затем, когда он был добавлен в Baseclass.Contrib.SpecFlow.Selenium.NUnit в решение с использованием Manage Nuget Package, он также добавил поставщика модульных тестов SeleniumNUnit. Когда я создал свои файлы функций и определения шагов и попытался запустить тесты с каждой функцией, аннотированной тегом браузера, например @Browser: Chrome, и использовать синтаксис Browser.Current в качестве веб-драйвера в моих методах привязки, это дало мне ошибка. Во-первых, ошибка заключалась в том, что у меня было два поставщика модульных тестов в app.config, а в app.config может быть только один поставщик модульных тестов. Итак, я закомментировал первого поставщика модульных тестов и получил еще один набор ошибок:

* Ошибка 2 #error: «Ошибка генерации: не удалось загрузить файл или сборку» TechTalk.SpecFlow, Version = 1.9.0.77, Culture = нейтральный, PublicKeyToken = 0778194805d6db41 или одна из его зависимостей. Система не может найти указанный файл.' C: \ Users \ amaddox \ documents \ Visual Studio 2013 \ Projects \ SpecFlow \ SpecFlow \ SpecFlowFeature1.feature.cs 1 8 SpecFlow *

* Ошибка 33 Ошибка пользовательского инструмента: ошибка генерации: не удалось загрузить файл или сборку TechTalk.SpecFlow, Version = 1.9.0.77, Culture = нейтральный, PublicKeyToken = 0778194805d6db41 или одну из их зависимостей. Система не может найти указанный файл. C: \ Users \ amaddox \ documents \ Visual Studio 2013 \ Projects \ SpecFlow \ SpecFlow \ SpecFlowFeature1.feature 2 2 SpecFlow *

Итак, я попытался раскомментировать первый и прокомментировать второго провайдера модульных тестов. Та же проблема. Как я могу запустить SpecRun в Visual Studio 2015 вместе с гибкостью параметризованных функциональных возможностей кроссбраузерных тестов, которые может предложить Baseclass.Contrib.SpecFlow.Selenium.NUnit.Bindings? Похоже, он хочет, чтобы я вернулся к предыдущей версии Specflow (1.9), и я использую Specflow 2. Не знаю, как это сделать. Как мне решить эту проблему?

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="specFlow" type="TechTalk.SpecFlow.Configuration.ConfigurationSectionHandler, TechTalk.SpecFlow" />
  <section name="autofac" type="Autofac.Configuration.SectionHandler, Autofac.Configuration" /></configSections>
  <specFlow>
    <!-- For additional details on SpecFlow configuration options see http://go.specflow.org/doc-config -->
  <!-- For additional details on SpecFlow configuration options see http://go.specflow.org/doc-config --><!-- use unit test provider SpecRun+NUnit or SpecRun+MsTest for being able to execute the tests with SpecRun and another provider --><unitTestProvider name="SpecRun" /><plugins>
      <add name="SpecRun" />
    <add name="Baseclass.Contrib.SpecFlow.Selenium.NUnit" path="..\packages\Baseclass.Contrib.SpecFlow.Selenium.NUnit.1.3.1\tools" /></plugins><unitTestProvider name="SeleniumNUnit" /><stepAssemblies>
      <stepAssembly assembly="Baseclass.Contrib.SpecFlow.Selenium.NUnit.Bindings" />
    </stepAssemblies></specFlow>
<appSettings>
    <add key="seleniumBaseUrl" value="http://localhost:58909" />
  </appSettings><autofac>
    <components>
      <component name="IE" type="OpenQA.Selenium.IE.InternetExplorerDriver, WebDriver" service="OpenQA.Selenium.IWebDriver, WebDriver" instance-scope="per-dependency">
      </component>
      <component name="Chrome" type="OpenQA.Selenium.Chrome.ChromeDriver, WebDriver" service="OpenQA.Selenium.IWebDriver, WebDriver" instance-scope="per-dependency">
      </component>
      <component name="Firefox" type="OpenQA.Selenium.Firefox.FirefoxDriver, WebDriver" service="OpenQA.Selenium.IWebDriver, WebDriver" instance-scope="per-dependency">
      </component>
      <!-- Example of using an injected RemoteDriver:
      <component
              name="IE"
              type="Baseclass.Contrib.SpecFlow.Selenium.NUnit.RemoteWebDriver, Baseclass.Contrib.SpecFlow.Selenium.NUnit.SpecFlowPlugin"
              service="OpenQA.Selenium.IWebDriver, WebDriver"
              instance-scope="per-dependency">
        <parameters>
          <parameter name="url" value="http://127.0.0.1:4444/wd/hub" />
          <parameter name="browser" value="InternetExplorer">
          </parameter>
        </parameters>
      </component>-->
    </components>
  </autofac>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="TechTalk.SpecFlow" publicKeyToken="0778194805d6db41" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.1.0.0" newVersion="2.1.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

*


person user5199    schedule 14.07.2016    source источник


Ответы (2)


После краткого обзора Baseclass.Contrib.SpecFlow.Selenium.NUnit он зависит от SpecFlow 1.9. Если вы хотите его использовать, вы должны придерживаться SpecFlow 1.9. Кроме того, похоже, что они создают свой собственный GeneratorPlugin для генерации пользовательского кода за файлами.

Это не работает вместе со SpecFlow + Runner, поскольку у него есть собственный генератор.

И два unitTestProvider в конфиге не работают.

Но в SpecFlow + Runner есть функция под названием «Цели», см. http://www.specflow.org/plus/documentation/SpecFlowPlus-Runner-Profiles и найдите его там.

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

Другой способ, но я не уверен, сработает ли это. SpecFlow + Runner поддерживает SpecFlow 1.9 и может выполнять тесты NUnit. Используйте пакет nuget SpecRun.SpecFlow.1-9-0 и настройте unitTestProvider на один из baseClass. Если они генерируют стандартные атрибуты NUnit, SpecFlow + Runner должен найти тесты и выполнить их. Но имейте в виду, что при использовании этого метода вы теряете некоторые функции.

Полное раскрытие: я один из разработчиков SpecFlow и SpecFlow +

person Andreas Willich    schedule 14.07.2016
comment
Вау, Андреас, это очень здорово знать. Я отправил вам запрос connectedIn на linkedin, чтобы я мог с вами связаться. Я попробую ваши рекомендации. - person user5199; 14.07.2016
comment
Есть ли пример использования целей для кроссбраузерного тестирования? Я не уверен, что слежу за отправленным вами сайтом - person user5199; 15.07.2016

Я переписал Baseclass.Contrib.SpecFlow.Selenium.NUnit для поддержки 2.1.

Новая кодовая база, поддержка тегов @ignore для nunit3 и нескольких сервисов тестирования, таких как BrowserStack, SauceLabs, TestingBot.

person unickq    schedule 12.01.2017