我正在编写一个测试,我想重用它,因此我试图对整个表进行参数化。该表位于我的'Then'语句中,具体取决于团队需要验证的表。
目前,我的场景大纲如下所示:
Given <teamName> uses this end point
And the response is a Json
When I perform a query to http:...
Then I validate all the fields I need:
|DataElement|Validation |jsonPath |
|element1 |validate that it is not null |data.structure.path|
|element2 |validate a name |data.structure.name|
所以我知道我可以通过参数化表格中的数据来验证每一行:
|DataElement|Validation |jsonPath |
|<value> |<Specific validation performed>|<Json Path to query|
然后做例子
但是,根据哪个团队使用相同的终点,所需的数据元素和验证是非常不同的,所以我想参数化WHOLE表对象,如下所示:
然后我验证了我需要的所有字段:
<TeamTable>
Examples:
|Team A Table|
|DataElement|Validation |jsonPath |
|element1 |validate that it is not null |data.structure.path|
|element2 |validate a name |data.structure.name|
|element1 |validate age is valid |data.structure.age |
|Team B Table|
|DataElement|Validation |jsonPath |
|element1 |validate is a Date |data.structure.date |
|element2 |validate something more |data.structure.something|
|element1 |validate US postcode |data.structure.postcode |
有可能吗?如何对整个表进行参数化?
答案 0 :(得分:2)
Specflow支持表参数,这是一个例子:
When following transactions are added
| TransactionDate | TransactionAmount | AccountNumber | Type | CR/DR |
| 1/20/12 | 10,000 | 102 | Cash | DR |
| 1/20/12 | 6,500 | 106 | Cash | DR |
| 1/21/12 | 10,001 | 102 | Cash | DR |
[When(@"following transactions are added")]
public void WhenFollowingTransactionsAreAdded(Table table)
{
// Now you can either do for each
foreach (var row in table.Rows)
{
// do stuf
}
// Or use an assist helpers to map table to an object
var transactions = table.CreateSet<Transaction>();
}
有关Assist助手的更多帮助,请参阅SpecFlow docs
关于表格here
的更多基本内容答案 1 :(得分:1)
我认为Specflow不可能 - 我可能错了。
我还认为,对于您想要进行的测试,最好使用不同的测试框架。
当您需要与业务人员共享和讨论功能时,Specflow可带来最大价值。在您的示例中,业务不会对jsonPath
感兴趣,因此我建议您进行简单的NUnit
测试,以便轻松创建模板化测试。