2017-10-04 29 views
0

我想知道这里是否有解决方法。用类似的东西替换了实际的步骤。Cucumber:如何将整个示例表作为值传递给每次迭代中的另一个示例表。

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

我有大量的子元素进行验证,所以我不想在每个迭代中用分隔符分隔定义子元素数据。

下面是示例场景

ScenarioOutLine:验证POST调用用于XXX使每个元件

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| 

回答

0

可以使用一个数据表的期望的给定后,当,或接着步骤下有效子元素。 请参阅: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

+0

如果你有巨大的表来验证你应该问问自己为什么你使用Cucumber(因为你显然没有从BDD方面受益或围绕功能文件进行讨论),而不仅仅是使用类似单元的东西测试框架来运行这些测试。 –

0

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

即使你多次运行它,我也没有看到你想要做的事情的价值,并且它让人类更难以理解这些例子。鉴于BDD的全部要点是与专题文件和场景中的利益相关者进行对话,任何使人难以理解例子的事情在BDD和黄瓜方面都是一种难闻的气味。因此,有在试图干出表

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    | 
0

我会躲在步骤所有强制验证,在一个方法,我总是每个场景之后调用,而不是污染它我有文件方面负值。强制性元素应该始终存在。当你讨论最终用户真正关心的系统实际的功能时,它们并不重要。

BDD和黄瓜是所有关于沟通和测试没有关系。

我总是努力隐藏技术细节,我的情景需要业务代表的理解。技术细节属于步骤委托给的步骤或帮助代码。从我的角度来看,您的强制性要素是技术细节。

相关问题