Specflow 特征文件 - 可能有多行示例

Specflow feature files - Possible to have multi line example

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

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

Gherkin(您用来编写场景的语言)无法实现示例的多行参数。 示例部分中的每一行都是一个单独的 scenario/test.

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

这不可能。

文档Cucumber 规范中规定示例部分应该是一个 table 单行 header 和所有其他行的数据:

The table must have a header row corresponding to the variables in the Scenario Outline steps.

Each of the rows below will create a new Scenario, filling in the variable values.

技术部分。 Specflow 使用 Gherkin language parser which parses feature files into AST (Abstract Syntax Tree). This parser reads input file lines one by one and produces token for each line. From TokenScanner 源代码:

The scanner reads a gherkin doc (typically read from a .feature file) and creates a token for each line. The tokens are passed to the parser, which outputs an AST (Abstract Syntax Tree).

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

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

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

实际上解析器如何能够理解您有简单的数据行还是 headers 行?所有示例数据都表示为字符串。 Aand OfficeI 列的完全有效值。好的,在此特定示例中,底部 table 定义部分有 3 列。但是如果也有四列呢?

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

无法为解析器定义第二 header 行。

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