【问题标题】:How to address SpecFlow Scenario Outlines with too many parameters?如何解决参数过多的 SpecFlow Scenario Outlines?
【发布时间】:2016-08-06 01:42:30
【问题描述】:

我们正在使用 SpecFlow 进行功能测试,当人工阅读生成的电子邮件并验证所有部分是否符合规范时,它会取代手动测试。问题是场景大纲变得越来越有太多参数

Scenario Outline: generate and send confirmation email 
       Given I have stored itinerary in  '<EmbeddedItinerary>'
       When Generate confirmation email

       Then section1 should have   parameters '<Param1_1>', '<Param1_2>', '<Param1_3>',...
       Then section2 should have   parameters '<Param2_1>', '<Param2_2>', '<Param2_3>',..
       Then section3 should have   parameters '<Param3_1>', '<Param3_2>', '<Param3_3>',...
....

例子:

  | EmbeddedItinerary | Param1_1| Param1_2|  Param1_3| Param2_1| Param2_2| Param2_3| Param3_1| Param3_2| Param3_3|...

| Itinerary_1 |  Value1_1 | Value1_2 |  Value1_3 | Value2_1 | Value2_2 |  Value2_3 |Value3_1 | Value3_2 |  Value3_3 |...
| Itinerary_1 |  Value1_1 | Value1_2 |  Value1_3 | Value2_1 | Value2_2 |  Value2_3 |Value3_1 | Value3_2 |  Value3_3 |...

但是示例中的列数会变得难以管理。我希望有多行示例(但在Multiple Multi-Line Examples in SpecFlow Feature File 中有不同的原因)。

我看到的选项是将所有 ExpectedResults 存储在嵌入式 xml 或 json 资源文件中,并且具有非常小的 SpecFlow 功能,例如

Scenario Outline: generate and send confirmation email with correct email address for flight section
       Given I have stored embedded resource '<EmbeddedItinerary>'
       When Generate confirmation email 
       Then sections should be as specified in '<ExpectedResultsFile>'
Examples: 
| EmbeddedItinerary   |  ExpectedResultsFile

| Itinerary_1 |  ExpectedResults1 |
| Itinerary_2 |  ExpectedResults2 |
...

这是个好主意吗?
谁能提出更好的方法(更多的 SpecFlow 风格)? 我担心的是,将预期数据移动到单独的文件会失去可见性,这是​​ SpecFlow 功能的优势之一。

更新:在写这个问题时,我发现了商业产品(每位用户 255 澳元)Specflow+Excel http://www.specflow.org/plus/excel/getting-started/,这可能满足我维护许多列的要求。
它是成熟/可靠的产品吗?我应该使用它而不是自己解析专有格式的预期结果文件吗?

【问题讨论】:

    标签: functional-testing specflow regression-testing


    【解决方案1】:

    如果我在场景大纲中有很多参数,我会尝试尽可能使用默认参数或将场景大纲拆分为多个参数。

    我认为在您的情况下,应该可以将一个“生成并发送确认电子邮件”方案大纲拆分为多个,每个部分都有一个方案大纲。

    这将减少每个场景所需的参数数量,并且如果发生错误,您将获得更快的反馈。您会立即看到您在哪个部分有错误。

    例如:

    Scenario Outline: generate and send confirmation email - section 1
         Given I have stored itinerary in  '<EmbeddedItinerary>'
         When Generate confirmation email
    
         Then section1 should have   parameters '<Param1_1>', '<Param1_2>', '<Param1_3>',...
    
    Examples:
        | EmbeddedItinerary | Param1_1  | Param1_2 | Param1_3 | 
        | Itinerary_1       |  Value1_1 | Value1_2 | Value1_3 | 
    
    
    Scenario Outline: generate and send confirmation email - section 2
         Given I have stored itinerary in  '<EmbeddedItinerary>'
         When Generate confirmation email
    
         Then section2 should have   parameters '<Param2_1>', '<Param2_2>', '<Param2_3>',..
    
    Examples:
        | EmbeddedItinerary | Param2_1 | Param2_2 | Param2_3 | 
        | Itinerary_1       | Value2_1 | Value2_2 | Value2_3 |
    
    
    Scenario Outline: generate and send confirmation email - section 3
         Given I have stored itinerary in  '<EmbeddedItinerary>'
         When Generate confirmation email
    
         Then section3 should have   parameters '<Param3_1>', '<Param3_2>', '<Param3_3>',...
    
    Examples:
        | EmbeddedItirerary | Param3_1 | Param3_2 | Param3_3 |
        | Itinerary_1       | Value3_1 | Value3_2 | Value3_3 |
    

    关于 SpecFlow+Excel:这也是一个选项。在 Excel 中维护示例通常比在功能文件中更容易。它至少会在短期内解决你的问题,但你也必须小心编写仍然可以理解和可读的场景。

    您可以从这里获得试用许可证:http://www.specflow.org/request-your-specflow-trial-license/


    完全披露:我是 SpecFlow+(Runner 和 Excel)的开发人员之一。

    【讨论】:

    • 谢谢,Andreas,我的一位同事也想这样做。我担心的是实际的业务场景是发送包含所有部分的电子邮件并确保所有部分都正确。您将其拆分为单独的场景以单独测试每个部分的方法更像是单元测试,无论如何我们都会这样做(但没有 SpecFlow)。我错了吗?
    • 这取决于您对 UnitTest 的 Unit 定义。通常它是一个类,因此您正在测试没有依赖关系的单个类的行为。如果自动化测试涉及的内容不止这些,那么您就开始将其称为集成测试。当您生成文本和发送电子邮件时,我假设您在这里有不止一个类。这意味着您有一个集成测试。
    • 如何决定在同一测试中必须测试哪些值,取决于您的代码。如果您总是得到一个部分的相同内容,无论您首先检查的其他部分是什么,如果您在一个场景或多个场景中检查它们,结果并不重要。但如果例如section2 取决于您首先检查 section1,然后您需要在一个场景中检查它们,因为如果您将它们分开,section1 是更新的访问权限。
    • 为了安全起见,您可以做的是,在您将每个部分的场景大纲拆分为多个之后,您只需为一个检查所有部分的示例编写一个场景。因此,您可以检查每个部分都正确生成,并且您正在生成整个电子邮件正确。对于最后一个,并不是所有的例子都需要,因为你已经知道内容是正确的。它只检查整个电子邮件是否正确。
    猜你喜欢
    • 1970-01-01
    • 2017-03-14
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多