2

我想知道在场景大纲中是否可以为参数名称设置一个新行,例如

  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 个参数)的冗长场景。

4

2 回答 2

4

这是不可能的。

文档。在Cucumber规范中规定,示例部分应该是一个带有单个标题行和所有其他数据行的表:

该表必须有一个与场景大纲步骤中的变量相对应的标题行。

下面的每一行都将创建一个新的场景,填充变量值。

技术部分。Specflow 使用Gherkin语言解析器将特征文件解析为 AST(抽象语法树)。此解析器逐行读取输入文件行并为每一行生成标记。来自TokenScanner源代码:

扫描器读取一个小黄瓜文档(通常从 .feature 文件中读取)并为每一行创建一个标记。标记被传递给解析器,解析器输出一个 AST(抽象语法树)。

然后 Parser 会一一读取标记,并确定该标记与哪种相关。当它找到示例行时,它会查找单个标题行 (Examples_Definition),后跟示例。如果你会做这样的事情

    |I      |am     | on   | the |
    |data   |data   |data  |data |
    |Office |Portal |link  |
    |data   |data   |data  |

那么第三行将被视为单元格数量不正确的示例行。

实际上解析器如何能够理解您是否有简单的数据行或标题行?所有示例数据都表示为字符串。AandOffice是一个完全有效的I列值。好的,在这个特定的示例中,您在底部表格定义部分中有 3 列。但是如果也有四列呢?

    |I      |am     | on   | the |
    |data   |data   |data  |data |
    |Office |Portal |link  | foo |
    |data   |data   |data  |data |

无法为解析器定义第二个标题行。

可读性。坦率地说,这样的多行表对人们来说是不可读的。很难将示例表底部和顶部的第三个场景大纲部分关联起来。但可读性是 gherkin 和 Specflow 的主要特点。如果您必须为场景提供如此多的参数,请考虑重新设计您的测试。

于 2017-04-19T11:14:40.297 回答
1

Gherkin(用于编写场景的语言)无法用于示例的多行参数。示例部分中的每一行都是一个单独的场景/测试。

如果您有这么多参数,最佳实践是将场景大纲拆分为多个大纲并使用默认值。

于 2017-04-19T11:14:22.857 回答