在代码中为ScenarioOutline创建示例

时间:2019-04-05 12:58:11

标签: java selenium cucumber scenarios

我想在功能文件中为ScenarioOutline动态创建多个示例。可以在@before挂钩中执行此操作吗?

我知道这不是您应该使用的黄瓜,但是怎么可能?

我已经尝试在挂钩中访问Scenario,但是没有获取所有步骤及其变量/占位符的方法

2 个答案:

答案 0 :(得分:1)

  

黄瓜不鼓励在功能文件之外使用示例。

但是,黄瓜很少有非标准方法可用于功能文件之外的示例。其中之一,您可以在grasshopper's post中进行引用。

另一个替代方法是使用gherkin with QAF,它提供了许多内置的data-providers功能,包括XML / CSV / JSON / EXCEL / DB。它还支持提供使用自定义数据提供程序通过代码生成的示例。例如:

Scenario Outline: scenario with dynamic test-data
....

Examples:{"dataProvider":"dynamic-examples", "dataProviderClass":"my.project.impl.CustomExamplesProvider"}

package my.project.impl;
public class CustomExamplesProvider{

    @DataProvider(name="dynamic-examples")
    public static Object[][] dataProviderForBDD(){
        //generate and return data. 
        //This is just example with hard-coded values and you can generate and return data as per need.
        Map<Object, Object> ex1 = Maps.newHashMap();
        ex1.put("fruit", "grapes");
        ex1.put("color", "green");

        Map<Object, Object> ex2 = Maps.newHashMap();
        ex2.put("fruit", "banana");
        ex2.put("color", "yellow");

        return new Object[][] {{ex1},{ex2}} ;
    }
}

答案 1 :(得分:0)

之前已经问过几次,通常是更具体的问题“如何从CSV导入方案大纲示例?”。通过研究该问题,您可能会找到适合您的解决方法,例如建议使用this answerQAF Gherkin scenario factory或建议将CSV传递到方案中的this answer,然后使用示例索引表。

但是,Cucumber FAQ中特别列出了从文件动态定义方案作为反模式

  

我们建议您不要使用Excel或csv文件定义测试用例;使用Excel或csv文件被视为反模式。

     

Cucumber的目标之一是拥有可执行的规范。这意味着您的功能文件应该只包含正确级别的信息,以记录系统的预期行为。如果您的测试用例保存在单独的文件中,您将如何阅读文档?

有时,当有人问这个问题时,会有strong response的人知道使用误用的BDD工具会带来的痛苦,实际上是恳求他们不要这样做。

黄瓜作为BDD工具涉及很多开销(编写功能文件)并提供一定的价值(可能在整个团队范围内对产品的工作原理充满活力)。如果编写的功能文件不能带给您那么高的价值,那么您将所有时间都花在测试框架的昂贵且不必要的层上。黄瓜基本上成为了光荣的测试跑步者,并且如果您确实不需要BDD应该提供的价值,则有很多便宜的方法来运行测试。