Cucumber:如何在每次迭代中将整个示例表作为值传递给另一个示例表

时间:2017-10-04 23:41:16

标签: cucumber gherkin

我想知道我的验证是否有解决方法。用类似的东西替换了实际步骤。

是否可以定义示例表,并将整个表作为数据传递给每次迭代?

我有大量要验证的子元素列表,因此我不想在每个迭代中用分隔符分隔子元素数据。

以下是示例方案

ScenarioOutLine: Validate POST call for XXX to have valid sub elements under each element 

Given Request headers are set 
When Request is posted
Then the response body content has element <ele_name> with sub elements <Sub_ele>

Examples:
|elem_name>|<Sub_ele>|
|Dept|{Dept_Sub_elements}|
|Subject|{Subject_Sub_elements}
|Course|{Course_Sub_elements}|

Examples:
|Dept_Sub_Elements|
|IT|
|Marketing|

Examples:
|Subject_Sub_Elements|
|Anatomy|
|Physciology|
|Management,economics|

3 个答案:

答案 0 :(得分:0)

您可以在所需的Given,When或Then步骤之后使用DataTable。 参见参考:https://cucumber.io/docs/reference#data-tables

根据您使用的语言,您应该能够在线查找示例。以下是specflow的示例:

Having Tables in Example Table in SpecFlow

如果您有庞大的数据表(数百行),那么您可以考虑将数据保存在不同的文件(属性文件,json文件甚至excel文件)中

对于较小的表,可以在.feature文件中提及它们。为了便于阅读,您可以使用表格格式化插件进行intellij或eclipse。 例如 https://plugins.jetbrains.com/plugin/7550-pipe-table-formatter

答案 1 :(得分:0)

为什么不使用单个示例表作为验证步骤的输入?由于示例表中没有任何内容改变给定或when语句,因此多次运行此场景没有任何价值。

即使你多次运行它,我也看不到你想做什么的价值,这让人类更难理解这些例子。鉴于BDD的全部意义在于围绕特征文件和场景与利益相关者进行对话,任何使人们更难理解这些示例的事情通常都是BDD和Cucumber所关注的难闻气味。因此,在尝试干掉表格方面存在负面价值

Then the resulting page should have <Sub_element> found under <Element>:
  | <Element> | <Sub_element>        |
  | Dept      | IT                   |
  | Dept      | Marketing            |
  | Subject   | Anatomy              |
  | Subject   | Physciology          |
  | Subject   | Management,Economics |
  | Course    | CompSci 210          |
  | Course    | Math 101             |

答案 2 :(得分:0)

我会隐藏步骤中的所有强制验证,在每个场景后我总是调用的方法,而不是用它污染我的功能文件。强制性要素应始终存在。当您讨论最终用户真正关心的系统实际操作时,它们并不重要。

BDD和Cucumber都是关于沟通而不是测试。

我总是努力隐藏我的方案中的技术细节,因为他们需要被业务代表理解。技术细节属于步骤委托给的步骤或帮助程序代码。从我的角度来看,您的必修元素是技术细节。