Как вы запускаете сценарии 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
Я надеюсь, что кто-то найдет ответ полезным.