Как вы запускаете сценарии SpecFlow из командной строки, используя MSTest?

У меня есть Visual Studio 2010, и у нас есть два решения VS, с которыми мы работаем. Первое - это веб-приложение, второе - строго для тестов SpecFlow. Наличие двух экземпляров Visual Studio, работающих одновременно, только для запуска функций SpecFlow - это использование всей доступной оперативной памяти, которая замедляет работу.

Я сделал несколько поисков в Google и здесь, в StackOverflow, плюс просмотрел документацию MS в средстве командной строки MSTest, но я не нашел ответа. Полный комплект тестов SpecFlow занимает около 45 минут, и мне действительно нужно всего лишь запустить несколько сценариев.

Мне было интересно, есть ли способ запуска отдельных функций SpecFlow и даже отдельных сценариев из командной строки с использованием MSTest?

Ответ 1

За течением времени тесты стека эффектов сцены - это всего лишь регулярные тестовые тесты mstest. Таким образом, вы должны иметь возможность запускать их одинаково, используя что-то вроде:

Чтобы запустить конкретный сценарий:

mstest /testcontainer:tests.dll /test:GivenMyScenarioWhenIDoSomeStuff

Чтобы запустить несколько сценариев, вы можете использовать флаг /test несколько раз:

mstest /testcontainer:tests.dll /test:GivenMyScenarioWhenIDoSomeStuff /test:GivenMyScenarioWhenIDoSomemthingElse

Чтобы запустить функцию

mstest /testcontainer:tests.dll /test:MyFeatureName

Если вы добавляете теги в свои сценарии, используя @MyTag, например, вы также можете использовать опцию

/category:MyTag to filter down the scenarios to run.

Пожалуйста, взгляните на сгенерированный код ваших файловых файлов, чтобы понять, как все работает, если вы знакомы с mstest, это должно быть довольно просто.

Ответ 2

Существует пакет nuget с именем "Specrun.Specflow". И он изменит ваш app.config и установит unitTestProvider name= "SpecRun", поэтому вы можете удалить unitTestProvider name= "MSTest" или "NUnit", теперь при сохранении изменений App.config визуальная студия предлагает вам восстановить свою функцию файлы, нажмите "Да" и теперь создайте решение. Что вы увидите, ваши тестовые файлы были восстановлены. Теперь в командной строке перейдите в C:\Users\\Documents\Visual Studio 2015\Projects\и введите runtests.cmd, он должен запускать все ваши файлы функций напрямую.

Ответ 3

Теперь, когда SpecFlow 3.0 выпущен, мы можем использовать SpecFlow с .NET Core. Инструментом CLI для .NET Core является dotnet, и тесты запускаются следующим образом, если вы используете MSTest (vstest):

dotnet test

Если тесты проводятся в конкретном проекте, вы можете указать проект, подобный этому

dotnet test TestProject

где TestProject - это название проекта. Вы можете пропустить имя проекта, если хотите, но при его указании dotnet будет выглядеть только в этом проекте. Чтобы перечислить все тесты в проекте, вы можете использовать флаг -t:

dotnet test TestProject -t

Для запуска только определенных тестов вы можете использовать флаг --filter:

dotnet test TestProject --filter ShouldBeSuccess_1

где ShouldBeSuccess_1 - это имя теста. Аргумент после --filter является выражением, и не обязательно имя теста. Если у вас есть тест с именем ShouldBeSuccess_12, он также будет запущен. Вы можете увидеть правила для --filter здесь.

Чтобы запустить тесты только в определенной категории, вы можете использовать TestCategory:

dotnet test TestProject --filter TestCategory=ci

где ci - название категории. Чтобы добавить тест в категорию, вы используете теги.

Для создания файла результатов вы должны использовать флаг --logger:

dotnet test TestProject --logger trx

Здесь он используется для создания файла результатов trx.

Ответ 4

С MSTest v2 вы не можете использовать mstest. Вместо этого вы можете использовать vstest.console.exe.

Пример:

vstest.console.exe "Automation.SpecFlow\bin\Release\Automation.SpecFlow.dll"

https://docs.microsoft.com/en-us/visualstudio/test/vstest-console-options?view=vs-2019

Если вы хотите запустить все сценарии в одном файле объектов, добавьте флаг /trait:

vstest.console.exe "Automation.SpecFlow\bin\Release\Automation.SpecFlow.dll"/черта: "Моя особенность"

И это запускает все сценарии в файлах объектов, которые начинаются с:

Feature: My Feature
    In order to ...
    As a ...
    I want to ...

Scenario: 1
    ...

Scenario: 2
    ...

Ответ 5

Я попробовал метод тегов, но он не работал, я использую старую версию SpecFlow. Итак, я перешел к файлу .feature.cs, связанному с файлом объектов, и искал TestMethodAttribute().

[Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]

Я добавил атрибут TestCategory поверх этого, как показано ниже:

[Microsoft.VisualStudio.TestTools.UnitTesting.TestCategory("MyCat")]

Сборка и компиляция, и команда работает как шарм с

/Category:MyCat 

Я надеюсь, что кто-то найдет ответ полезным.