我正在使用SpecFlow和VisualStudio 2013来测试具有以下布局的特定Web表单
********************开始:表格******************
名称:________________
年龄:_________________
经验:
工作地点|年数|
___________ | _________________ |
___________ | _________________ |
___________ | _________________ |
___________ | _________________ |
********************结束:表格******************
如何编写它以便我可以从示例中提取?
Given ...
When user fills 'Name-Box' with '<name>'
And user fills 'Age-Box' with '<age>'
And user fills experience with
| Workplace | NumberOfYears |
| <workplace> | <years> |
And user clicks the 'Save' button
Then ...
Examples:
name|age
Sam|40
#note that there will be always 1 here.
Examples:
workplace|years
abc|2
xyz|3
pqr|4
我想这样做的原因是,我可以通过编程方式从外部电子表格生成示例表并动态更改它。是否有可能做到这一点?或者有什么不对吗?
答案 0 :(得分:2)
您可以,但是您必须重新设置示例表:
Given ...
When user fills 'Name-Box' with '<name>'
And user fills 'Age-Box' with '<age>'
And user fills experience with
| Workplace | NumberOfYears |
| <workplace 1> | <years 1> |
| <workplace 2> | <years 2> |
| <workplace 3> | <years 3> |
| <workplace 4> | <years 4> |
And user clicks the 'Save' button
Then ...
Examples:
| name | age | workplace 1 | years 1 | workplace 2 | years 2 | workplace 3 | years 3 | workplace 4 | years 4 |
| Sam | 40 | abc | 2 | xyz | 3 | pqr | 4 | | |
| Sam | 40 | aaa | 3 | bbb | 12 | | | | |
| Sam | 40 | nnn | 2 | ooo | 20 | ppp | 1 | qqq | 3 |
表单中的每一行都需要一个&#34;工作空间X&#34;和&#34;年X&#34;示例表中的列。
STR说:但是我们想让工作场所的数量无限制。那么,我如何为在3个工作场所有经验的人以及在15个工作场所有经验的另一个人定义行。通过固定数量的列,我们是否限制了测试的可能性?
这是事实。如果您需要无限数量的行,您仍然可以重新构建测试,但我认为您不能使用场景大纲。
您可以使用:
And user fills experience with
| Row | Workplace | Number of Years |
| 1 | a | 2 |
| 2 | b | 4 |
| 3 | c | 10 |
| ... | ... | ... |
| 15 | o | 1 |
步骤定义将分为两部分:
public class WorkExperienceRow
{
public int RowNumber { get; set; }
public string Workplace { get; set; }
public int NumberOfYears { get; set; }
}
使用TechTalk.SpecFlow.Assist命名空间中的SpecFlow TableExtensions
,上面的类可用于表示SpecFlow表中的每一行。
using TechTalk.SpecFlow;
using TechTalk.SpecFlow.Assist;
[Binding]
public class FooSteps
{
[When(@"user fills experience with")]
public void WhenUserFillsExperienceWith(Table table)
{
IEnumerable<WorkExperienceRow> experiences = table.CreateSet<WorkExperienceRow>();
// Find the <table>
foreach (var experience in experiences)
{
// Find the <tr> by index using experience.RowNumber
// Find the text box in column #1
// Fill in the text box with experience.Workplace
// Find the text box in column #2
// Fill in the text box with experience.NumberOfYears
}
}
}
答案 1 :(得分:0)
如果要在电子表格中定义SpecFlow示例集,可以使用SpecFlow+ Excel执行此操作。实际上,如果您愿意,可以在Excel中定义整个要素文件,或者只使用Excel中定义的示例扩展您的要素。您可以直接在Excel中进行更改,这些更改将反映在您的测试用例中。
如果您有兴趣了解更多信息,可以在 www.specflow.org/plus/excel/getting-started / 进行简要介绍,Gaspar Nagy在presentation给出了CukeUp! 2014年,其中包括一些示例以及概述。
但是我应该指出,与SpecFlow不同,SpecFlow +组件(SpecFlow + Excel和SpecFlow + Runner)需要购买许可证,而不是开源软件。您可以免费评估SpecFlow + Excel,但如果您尚未注册许可证,则会生成标题为“SpecFlow + Excel评估模式”的额外方案。
注意:抱歉无法点击链接,但我无法添加超过2个链接:(