Файлы функций Specflow - возможен многострочный пример

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

  Scenario Outline: Login
        Given <I> <am> <on> <the> <Office> <Portal> <link>
        When I have entered my CRM credentials and sign in
        Then I will be logged in
        Examples: 
        |I   |am   | on| the | //newline
        |data|data |data|data|
        |Office |Portal |link|
        |data|data |data|data|

Я предполагаю, что нет, так как я не уверен, как это будет различать строки. Причина, по которой мне это нужно, заключается в длинных сценариях с довольно большим количеством параметров (например, 25 параметров).


person marwaha.ks    schedule 19.04.2017    source источник


Ответы (2)


Это невозможно.

Документация. В спецификации Cucumber указано, что раздел примеров должен представлять собой таблицу с одной строкой заголовка, а все остальные строки с данные:

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

Каждая строка ниже создаст новый сценарий, заполняя значения переменных.

Техническая часть. Specflow использует парсер языка Gherkin, который преобразует файлы функций в AST (абстрактное синтаксическое дерево). . Этот синтаксический анализатор считывает строки входного файла одну за другой и создает токен для каждой строки. Из исходного кода TokenScanner:

Сканер читает документ огурца (обычно из файла .feature) и создает токен для каждой строки. Маркеры передаются анализатору, который выводит AST (абстрактное синтаксическое дерево).

Затем синтаксический анализатор считывает токены один за другим и определяет, к какому типу строки относится этот токен. Когда он находит строку примеров, он ищет одну строку заголовка (Examples_Definition), за которой следуют примеры. Если вы будете делать что-то вроде этого

    |I      |am     | on   | the |
    |data   |data   |data  |data |
    |Office |Portal |link  |
    |data   |data   |data  |

то третья строка будет рассматриваться как строка примеров с неправильным количеством ячеек.

На самом деле, как синтаксический анализатор сможет понять, есть ли у вас простая строка данных или строка заголовков? Все данные примеров представлены в виде строк. Aand Office является полностью допустимым значением для столбца I. Хорошо, в этом конкретном примере у вас есть 3 столбца в нижней части определения таблицы. А если бы столбцов тоже было бы четыре?

    |I      |am     | on   | the |
    |data   |data   |data  |data |
    |Office |Portal |link  | foo |
    |data   |data   |data  |data |

Невозможно определить вторую строку заголовка для синтаксического анализатора.

Читаемость. И, честно говоря, такие многострочные таблицы были бы нечитабельны для людей. Было бы очень сложно сопоставить части схемы третьего сценария из нижней и верхней части таблицы примеров. Но удобочитаемость — главная фишка корнишонов и Specflow. Подумайте о том, чтобы перепроектировать свои тесты, если вам нужно указать так много параметров для сценария.

person Sergey Berezovskiy    schedule 19.04.2017

Многострочные параметры для примеров невозможны с Gherkin (языком, который вы используете для написания своих сценариев). Каждая строка в разделе примеров будет отдельным сценарием/тестом.

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

person Andreas Willich    schedule 19.04.2017