Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Specflow Вызов нескольких сценариев в зависимости от условий предыдущего шага

specflow
qa
testng
Теги: #<Tag:0x00007f7b6d1a4060> #<Tag:0x00007f7b6d1a3ed0> #<Tag:0x00007f7b6d1a3d90>

(Ли неизвестная) #1

Всем привет! Существует система, для которой нужно написать сквозной тест заполнения форм. В ходе заполнения анкеты клиента последующий вид системы будет выбираться таким образом:

  1. ЕСЛИ “Степень готовности залога” РАВНО “Готовое” И “Объект залога” РАВНО “Квартира”, ТО выбрать форму для Готовой квартиры
  2. ЕСЛИ “Степень готовности залога” РАВНО “Строящееся” И “Объект залога” РАВНО “Квартира”, ТО выбрать форму для Строящейся квартиры.
    То есть, существует несколько условий, в зависимости от которых будут изменяться вопросы. Нужно составить сценарий в Specflow, который будет каким-то образом это учитывать.
    Я написала сценарий:
Scenario: Calculation Information
Given Переход на страницу
	Then Загрузился выбор роли
	When Выбор роли Сотрудник
	Then Загрузился экран кабинета
	When Выбор клиента Фамилия <LastName> Имя <Name> Отчество <MiddleName> 
	| N | LastName  | Name     | MiddleName | 
	| 0 | Булочкина | Кристина | Сергеевна  | 
	| 0 | Уотсон    | Эмма     | Сергеевна  | 
	When Нажать на кнопку Кредитное дело
	When Нажать на кнопку Выбор продукта
	When Выбрать Объект кредитования <clientGetObject>, Степень готовности <ClientGetObject>, Характер залога <refClientGiveObject>
	#Фоормирует АПЗ значение параметров Степень готовности залога м Объект залога

	When Выбрать Степень готовности залога <refClientGiveObject>, Объект залога <clientGiveObject>, Продукт <nucleus>
	| N | refClientGiveObject | clientGiveObject | nucleus                                  | Форма                    | Договор основание    |
	| 1 | Готовое             | Квартира         | Строящееся жилье фиксированный% квартира | Готовой квартиры         |                      |
	| 2 | Строящееся          | Квартира         | Строящееся жилье фиксированный% квартира | Строящейся  квартиры     | Уступка от Физ. лица |


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

#2

Тут уж лучше делать на уровне кода и тестовых данных. Но это как бы разные сценарии, я бы их просто разделил, чем заниматься извращениями


(Ли неизвестная) #3

что значит “разделил”?


(Юрий Аксютин) #4

Вы можете использовать Scenario Outline и Example - но ваш тест желательно разбить на более короткие фрагменты.
Что вы хотите протестировать?
Если только заполнение формы - нужно постараться сразу оказаться на нужной странице с нужными правами, для этого обычно используется Deep Link


(Ли неизвестная) #5

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


(Юрий Аксютин) #6

Отрывок из документации:

Scenario Outline
The Scenario Outline keyword can be used to run the same Scenario multiple times, with different combinations of values.

Copying and pasting scenarios to use different values quickly becomes tedious and repetitive:

Scenario: eat 5 out of 12
  Given there are 12 cucumbers
  When I eat 5 cucumbers
  Then I should have 7 cucumbers

Scenario: eat 5 out of 20
  Given there are 20 cucumbers
  When I eat 5 cucumbers
  Then I should have 15 cucumbers
We can collapse these two similar scenarios into a Scenario Outline.

Scenario outlines allow us to more concisely express these scenarios through the use of a template with < >-delimited parameters:

Scenario Outline: eating
  Given there are <start> cucumbers
  When I eat <eat> cucumbers
  Then I should have <left> cucumbers

  Examples:
    | start | eat | left |
    |    12 |   5 |    7 |
    |    20 |   5 |   15 |
A Scenario Outline must contain an Examples section. Its steps are interpreted as a template which is never directly run. Instead, the Scenario Outline is run once for each row in the Examples section beneath it (not counting the first header row).

The steps can use <> delimited parameters that reference headers in the examples table. Cucumber will replace these parameters with values from the table before it tries to match the step against a step definition.

Gherkin Reference


(Bolatbek) #7

Мой небольшой совет, возможно в вашем случае он не применим, так как мне неизвестно ваше приложение, но все же.
Этот кусок я бы заменил на один крупный шаг:

        Given Переход на страницу
        Then Загрузился выбор роли
        When Выбор роли Сотрудник
        Then Загрузился экран кабинета

Например на (можно перенести в Background секцию):

Given Открыт экран кабинета под ролью Сотрудник

Даже лучше так:

Given Открыт экран "Кабинет" под ролью "Сотрудник"

Где “кабинет” и “сотрудник” будут входящими параметрами. Шаг станет универсальнее и короче.

Дальше, касательно самого вопроса: как и рекомендуют выше - лучше разделить сценарии, потому что на Gherkin не реализуется логика вида “if else”. Сценарии на Gherkin должны быть всегда прямолинейны. Outline в вашем случае не подойдет.