testing - 如何将数据从一些 json 文件传递​​到 Gherkin 特征文件

标签 testing automation cucumber tdd gherkin

我想通过从其他一些 JSON 文件中获取数据来参数化我的 gherkin 特征文件步骤。对此有任何建议。我几乎到处搜索,但找不到答案。

我知道在 gherkin 功能文件中使用场景大纲但示例与变量的多个值一起使用的场景,但没有寻找它。

目前我正在使用这样的方式,引号中的以下值被传递给步骤定义

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

预期:我想从 JSON 文件或任何其他文件中获取变量数据,并将这些数据值传递给步骤定义函数。可能吗?

小 cucumber 特征文件:

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

数据.json:

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

    }

最佳答案

尝试将数据注入(inject)特征文件是一种常见的 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 以获取您的数据。因为这个处理已经从特征文件(非代码)下推到代码中,所以这个操作现在更容易实现。这种“Pushing the How Down”是 Cuking 时非常重要的技术,也是您应对任何涉及编程 功能文件的问题的方式。

关于testing - 如何将数据从一些 json 文件传递​​到 Gherkin 特征文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56796321/

相关文章:

reactjs - reducer 的测试返回不等于预期的结果

java - 如何使用java在运行的Windows应用程序之间切换?

excel - 使用 WMI 在 VBA 中获取当前的 Windows 用户名

swift - 使用带有 UI 测试的 Cucumberish 从 Storyboard加载 Controller

regex - 如何使用非捕获括号捕获一个词或什么都不捕获?

ruby-on-rails - Rails 根测试

testing - Selenium 测试没有显示指定的错误

javascript - 用于 Twitter Bootstrap 模式的 cucumber 功能

html - 用于检查 UI 规范的工具/插件

javascript - Selenium IDE : How to select next available date from datepicker