我想知道在Scenario Outline中是否可以为参数名称添加新行 e.g。
Scenario Outline: Login
Given <I> <am> <on> <the> <Office> <Portal> <link>
When I have entered my CRM credentials and sign in
Then I will be logged in
Examples:
|I |am | on| the | //newline
|data|data |data|data|
|Office |Portal |link|
|data|data |data|data|
我假设没有,因为我不确定如何区分线条。我需要这个的原因是因为有很多参数的冗长场景(例如25个参数)。
答案 0 :(得分:3)
这是不可能的。
<强>文档即可。在Cucumber规范中声明,示例部分应该是具有单个标题行的表和具有数据的所有其他行:
该表必须有一个与该变量对应的标题行 场景大纲步骤。
下面每行的将创建一个新的场景,填写 变量值。
技术部分。 Specflow使用Gherkin语言解析器将特征文件解析为AST(抽象语法树)。该解析器逐个读取输入文件行,并为每一行生成令牌。来自TokenScanner源代码:
扫描仪读取小黄瓜文档(通常从.feature文件中读取) 并为每行创建一个令牌 。令牌传递给了 解析器,输出AST(抽象语法树)。
Parser然后逐个读取令牌并确定此令牌与哪种行相关。当找到示例行时,它会查找单个标题行(Examples_Definition),然后是示例。如果你会做这样的事情
|I |am | on | the |
|data |data |data |data |
|Office |Portal |link |
|data |data |data |
然后第三行将被视为具有不正确数量的单元格的示例行。
实际上解析器如何能够理解您是否有简单的数据行或标题行?所有示例数据都表示为字符串。 Aand Office
是I
列的完全有效值。好在这个特定的示例中,您在底部表定义部分中有3列。但是如果还有四列呢?
|I |am | on | the |
|data |data |data |data |
|Office |Portal |link | foo |
|data |data |data |data |
无法为解析器定义第二个标题行。
<强> Readabiltiy 即可。坦率地说,这样的多线表对人们来说是不可读的。从示例表的底部和顶部关联第三个场景轮廓部分将非常困难。但可读性是小黄瓜和Specflow的主要特征。如果必须为场景提供如此多的参数,请考虑重新设计测试。
答案 1 :(得分:0)
Gherkin(您用来编写场景的语言)无法使用多行参数。 示例部分中的每一行都是一个单独的场景/测试。
如果您有这么多参数,最佳做法是在多个轮廓中拆分场景大纲并使用默认值。