如何使用太多参数解决SpecFlow场景大纲?

时间:2016-08-06 01:42:31

标签: functional-testing specflow regression-testing

我们正在使用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/,这可能满足我维护多列的要求。
它是一个成熟/可靠的产品吗?我应该使用它而不是以专有格式自己解析预期结果文件吗?

1 个答案:

答案 0 :(得分:2)

如果我在场景大纲中有很多参数,我尝试使用默认参数尽可能多地工作,或者将场景大纲分成多个参数。

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

这会减少每个方案所需的参数量,如果发生错误,您可以获得更快的反馈。您会立即看到哪个部分出现错误。

e.g:

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&amp; Excel)的开发者之一。