【问题标题】:How to pass a data from some json file to Gherkin feature file如何将数据从某个 json 文件传递​​到 Gherkin 功能文件
【发布时间】:2019-11-09 18:54:05
【问题描述】:

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

我知道使用小黄瓜功能文件中的场景大纲将示例与变量的多个值一起使用但不寻找的场景。

目前我正在像这样使用下面的引号中的值被传递给步骤定义

    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",

    }

【问题讨论】:

  • 是的,这是可能的,您所要做的就是根据 json 路径在您的步骤 def 中获取值。但您可能看不到报告中的值。
  • 确保添加另一个步骤来读取 json 作为第一步或在后台。

标签: testing automation cucumber tdd gherkin


【解决方案1】:

这是一种常见的 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 时非常重要的技术,也是处理涉及programming 功能文件的任何问题的方法。

【讨论】:

    【解决方案2】:

    我最近实施了类似的方法。我正在根据场景名称匹配 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
    

    【讨论】:

    • 谢谢。但是,我们在功能文件步骤中将诸如星巴克之类的变量放在哪里呢?在不导入 json 文件的情况下,特征文件如何从 json 文件中获取值?能否提供更多信息?
    • 场景名称可以从@before服务钩子中解析出来。我有一个对 json 文件进行建模的类,并且能够按场景名称提供数据。我只是在我的步骤定义中使用相同的。
    • 你能给我提供那门课吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-10
    • 2013-01-13
    • 1970-01-01
    • 2015-09-07
    • 2020-10-29
    相关资源
    最近更新 更多