我想通过从其他JSON文件中获取数据来参数化我的小黄瓜特征文件步骤。任何建议。我几乎到处搜索,但找不到答案。
我知道这样一种情况,即示例使用小黄瓜功能文件中的方案大纲将示例与变量的多个值一起使用,但没有找到该值。
目前我正在这样使用,并且引号下面的值被传递给步骤定义
Scenario: Buy last coffee
Given There is "Starbucks" coffee
And I added "Sugarless" syrup
预期:我也想从JSON文件或任何其他文件中获取变量的数据,并将这些数据值传递给步骤定义函数。有可能吗?
gherkin功能文件:
Scenario: Buy last coffee
Given There is "${data.coffeeshop}" coffee
And I added "${data.sugarType}" syrup
data.json:
{
"coffeeshop": "starbucks",
"sugarType": "Sugarless",
}
答案 0 :(得分:0)
我最近也实施了类似的方法。我根据方案名称匹配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
答案 1 :(得分:0)
它是一种常见的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以获取数据。由于此处理已从功能文件(非代码)下推到代码中,因此此操作现在更容易实现。当进行结块时,这种“按下方式”是一项非常重要的技术,它是您应如何解决涉及programming
个功能文件的任何问题的方法。