Как передать данные из некоторого файла JSON в файл объектов Gherkin - PullRequest
0 голосов
/ 27 июня 2019

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

Мне известен сценарий, в котором примеры используются с несколькими значениями для переменной с использованием схемы сценария в файле объектов gherkin, но не ищут этого.

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

    Scenario: Buy last coffee
        Given There is "Starbucks" coffee
        And I added "Sugarless" syrup

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

Файл функции корнишона:

    Scenario: Buy last coffee
        Given There is "${data.coffeeshop}" coffee
        And I added "${data.sugarType}" syrup

data.json:

    {
        "coffeeshop": "starbucks",
        "sugarType": "Sugarless",

    }

Ответы [ 2 ]

0 голосов
/ 28 июня 2019

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

Способ, которым Cucumber хочет, чтобы вы работали, состоит в том, чтобы выдвигать детали и абстрагировать процесс, чтобы функция не занималась программированием (зацикливанием, повторением шагов и т. Д.). Здесь вы можете улучшить свою практику, подумав о том, что находится в файле json и почему вы хотите повторить его.

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

Scenario: Seattle coffee shops can make an iced mocha
  Given our coffee shops are located in Seattle
  Then our coffee shops can make an iced mocha

и реализовать сценарии

Given 'our coffee shops are located in Seattle' do
  @coffee_shops = get_seattle_coffee_shops
end

Then 'our coffee shops can make an iced mocha' do
  @coffee_shops.each do | shop |
    assert can_make_recipe(
      shop: shop,
      recipe: Recipes::IcedMocha
    )
  end
end

Выше приведено очень грубое начало, и я бы извлек больше кода из определений шагов в вспомогательные методы. Ключевая часть, которую я пытаюсь проиллюстрировать, заключается в том, что сценарий и этапы известны при работе с группой кофеен, а не с одной кофейней

В вашем сценарии вспомогательный метод get_seattle_coffee_shops будет загружать и обрабатывать ваш json для получения ваших данных. Поскольку эта обработка была перенесена из файла функций (без кода) в код, эту операцию теперь намного проще реализовать. Это «Отталкивание» - очень важная техника при Cuking, и именно так вы должны подходить к любой проблеме, которая включает programming файлы объектов.

0 голосов
/ 28 июня 2019

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

{
"scenario1":
      {
       "coffeeshop": "starbucks",
        "sugarType": "Sugarless"
      },
"scenario2":
      {
       "coffeeshop": "starbucks",
        "sugarType": "Sugarless"
      }
}

Ваш файл будет выглядеть так:

Scenario: senario1
        Given There is coffee
        And I added syrup

Scenario: senario2
        Given There is  coffee
        And I added syrup
...