【问题标题】:Run examples with more data rows in one test with Cucumber在 Cucumber 的一项测试中运行具有更多数据行的示例
【发布时间】:2017-08-07 20:44:18
【问题描述】:

我有4个场景,例如:

Scenario: test single unit transaction
Given Scene is set
When We did something
Then
 | header1 | unit  | etc. |
 | data1   | data2 | ...  |

Scenario: test multiple unit transaction
Given Scene is set
When We did something
Then
 | header1 | unit  | etc. |
 | data1   | data2 | ...  |
 | data3   | data4 | ...  |

Scenario: test single percentage transaction
Given Scene is set
When We did something
Then
 | header1 | percentage | etc. |
 | data1   | data2      | ...  |

Scenario: test multiple percentage transaction
Given Scene is set
When We did something
Then
 | header1 | percentage | etc. |
 | data1   | data2      | ...  |
 | data3   | data4      | ...  |

它们更复杂更长,所以我想实现这样的目标:

Scenario Outline: test transactions
Given Scene is set
When We did something
Then
 | header1 | unit    | etc. |
 | <data1> | <data2> | ...  |
Examples: single transaction
 | header1 | unit    | etc. |
 | data1   | data2   | ...  |

Examples: multiple transaction
 | header1 | unit   | etc. |
 | data1   | data2  | ...  |  --------> these should run together in one test
 | data3   | data4  | ...  |  -------->

对于其他类型的交易也是如此。

不幸的是,Cucumber 一直将上述情况作为 3 个不同的场景运行,而不是 2 个,而第二个场景有 2 个事务。 有谁知道如何使它工作?

非常感谢。

【问题讨论】:

  • 您使用的是什么版本的 Cucumber,您的脚本使用什么语言? @monami
  • 不幸的是,它是黄瓜 1.2.2,我使用 Java(也添加到标签中)
  • @DanielFintinariu 编辑将删除我在代码中的粗体文本
  • 功能文件中不需要 :)
  • 是的,它是为了强调那些部分

标签: java cucumber bdd scenarios


【解决方案1】:

据我所知,在将 Scenario OutlineExamples 结合使用时,它将运行您在示例表中定义的尽可能多的行,因此 Cucumber 适合您的示例。

不确定在这些情况下您要做什么,但如果您想使用 Scenario Outline 我认为您需要重组 Examples 您可以尝试这样的事情(未经测试它可能会变得更复杂):

场景:

Scenario: test transactions
  Given the scene is set
  When we did something
  Then something should happen:
  | header1 | unit  |
  | data1   | data2 |
  | data3   | data4 |

步骤: 使用数据类:

@Then("^something should happen:$")
    public void explosionsHappen(List<Data> entries) {
        for (Data entry : entries) {
            //Do stuff to each entry without restarting the scenario
        }
    }

public class Data {
    String header1; 
    Integer unit;
}

使用数据表:

@Then("^something should happen:$")
public void explosionsHappen(DataTable data) throws Throwable {
    for (Map<String, Integer> data : data.asMaps(String.class, Integer.class)) {
            //Write code to handle Datatable
        }
}

更多关于 herehere 的信息。对于第二个链接,请浏览功能/步骤并检查它们是如何实现的。

可能有其他方法可以做你想做的事。希望这会有所帮助!

【讨论】:

  • 它有帮助,谢谢,我现在知道我应该更好地表达我的问题 :) 问题正是 cucumber 迭代测试的行数与我们添加的行数一样多,但我的观点是:将两行输入到仅一项测试,因为我一次在一种情况下需要它们(作为重复步骤,但不是使用单个参数而是使用数据表),并且在其他时间只需要一行(这是两种类型的示例)
  • 感谢第二个链接,basic_arithmetic.feature(鉴于之前的条目)似乎很有希望,但我的参数在表格中,而不是单个数量。仍然不确定如何解决这个问题。
  • 如果它变得太复杂,最好创建一个Scenario,在其中检查单个事务(不需要示例表)和第二个,其中最后一步处理数据表(如示例中所示) )。这是编写两个不同步骤的问题。
  • 其实,不,我能做的就是把它们减少到3个场景,单个事务可以与unitpercentage在同一张表中,但多事务有两个不同类型的场景,因为在一次测试中处理表中的两行不适用于轮廓。无论如何,感谢您为帮助我所做的努力!
  • 你成功了。我对您要达到的目标以及场景的背景感到有些困惑。
猜你喜欢
  • 2022-07-27
  • 1970-01-01
  • 1970-01-01
  • 2021-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多