#specflow
#specflow
Вопрос:
Возможно, я в этом совершенно ошибаюсь, но я уже 2 недели ищу доступную документацию и гуглю, и моя голова полностью занята осью.
Я пытаюсь использовать SpecFlow для написания регрессионного теста для нашего сайта. Это означает, что я хочу задействовать все функции, чтобы, если мы что-то случайно сломаем, это было зафиксировано.
Сайт, по сути, является порталом отчетов об инцидентах. На домашней странице имеется около 50 различных кнопок, каждая из которых открывает страницы ввода данных для другого класса инцидентов.
Страницы ввода данных расположены по принципу «мастера», где все начинается со страницы общих вопросов, затем переходит на страницу более конкретных вопросов и так далее. Вопросы более или менее сгруппированы в классическую группировку «кто / что / когда / где / почему» с одной страницей мастера для каждой группы, чтобы мы не перегружали пользователя 100 вопросами, представленными одновременно.
Какие именно страницы необходимы, зависит от конкретного типа инцидента. Некоторые типы инцидентов содержат до 8 страниц, некоторые — всего 3.
Наши спецификации для каждой страницы оформлены в стиле BDD — Задано / Когда / Тогда. Поэтому очень естественно перевести эти спецификации в функции SpecFlow, и я сделал это, по крайней мере, для первой страницы вопросов общей информации. Но в сценарии было более 30 шагов.
Я также написал еще одну функцию для тестирования с домашней страницы —
Given I'm logged in on the home page
When I clicked the button for XYZ ticket
Then it opens XYZ ticket
And the General Information page is displayed.
И я могу управлять этим сценарием из таблицы, чтобы я мог тестировать столько различных типов инцидентов, сколько захочу.
Пока все хорошо.
Но теперь я хочу добавить
And the General Information page requirements are verified
Где определение шага для этого последнего предложения запустило бы весь сценарий для страницы общей информации. Другими словами, я хочу использовать тот другой сценарий, который я написал в качестве подпрограммы в этом.
(И затем я хочу продолжить и сделать то же самое для каждой из других страниц мастера. Но давайте сначала разберемся с первой!)
Я не могу придумать, как это сделать. Я попытался написать определение шага для приведенного выше предложения, чтобы вызвать определения шагов общего информационного сценария, например
Given("I am on the General Information page")
When ("I click this checkbox")
Then ("This happens")
Раньше вы могли это делать (хотя это все равно было бы большим количеством повторений). Но теперь это выдает предупреждающее сообщение о том, что функция устарела и будет удалена (и поскольку я сейчас обновился, возможно, она уже удалена — я не пробовал ее с момента обновления.) Страница проблем github (https://github.com/SpecFlowOSS/SpecFlow/issues/1733 по этому поводу много дискуссий, ни одна из которых не проливает никакого света на то, как сделать то, что я пытаюсь сделать. Основной автор (SabotageAndi), казалось, говорил «Это плохо; не делай этого», на самом деле не предоставляя никакой альтернативы, по крайней мере, такой, которую я смог понять.
Кто-нибудь может дать мне указания, как выполнить то, что я пытаюсь сделать?
Ответ №1:
Я хочу использовать тот другой сценарий, который я написал в качестве подпрограммы в этом.
Вы не можете повторно использовать сценарии, определенные в файлах функций.
Лучшее, что вы можете сделать, это создать новый шаг, который повторно использует уже определенные шаги, вызывая их напрямую (комментарий jameswtelfer от 31 января в предоставленном вами выпуске github).