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