Specflow参数化整表

时间:2012-08-14 09:44:44

标签: specflow

我正在编写一个测试,我想重用它,因此我试图对整个表进行参数化。该表位于我的'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 |

有可能吗?如何对整个表进行参数化?

2 个答案:

答案 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测试,以便轻松创建模板化测试。