大家好 我们正在开发一个可通过SOAP和REST(xml和JSon)获得的Web服务。我们的specflow功能大致相同,即:
Scenario: There are at least 3 radio Channels
Given The test server is up and running
And The previously obtained channel list is reset
When I request a list of radio channels
Then the resulting deliveryPackage contains a list of at least 3 items
所有这些功能都需要针对SOAP接口,REST / Xml接口以及REST / JSon接口进行测试。
在黄瓜中,可以使用-R运行功能来指示步骤文件所在的位置,但是在SpecFlow中,我还没有找到绕过步骤文件的方法,这样我就可以运行相同的功能不同的步骤。
我宁愿不必编写每个场景3次,以便更改要使用的步骤实现。
所以,有两个问题: 1)如何为3种不同的接口运行3次功能,这些接口需要完全相同的场景? 2)如何每次选择正确的步骤文件?
解决(1)可能会解决(2)。
答案 0 :(得分:10)
我的一位同事给了我们一个很好的解决方案:情景大纲:
Scenario Outline: Channels on different protocols
Given The test server is up and running
And The previously obtained channel list is reset
When I request a list of radio channels for the <protocol> and <binding>
Then the resulting deliveryPackage contains a list of at least 3 items
Scenarios:
| protocol | binding |
| XML | BasicHttpBinding_IProgramService |
| JSON | BasicHttpBinding_IProgramService |
| SOAP | CustomBinding_IProgramService |
在幕后,测试用例是一个接收两个参数的函数,一个用于,一个用于。
运行此场景会产生3个单元测试,这就是我所追求的。
答案 1 :(得分:1)
我唯一想到的是使用场景大纲来定义一系列场景,然后通过在表格中提供不同的参数来执行它的变化。
但我不确定这是否合理地使用场景大纲,主要是针对输入的变化,而不是基础设施设置。
如果SpecFlow是配置此类步骤的正确位置的另一个问题,不应该在不同的级别(基础架构集成测试和组件的单元测试)上测试这些细节,因此Gherkin仅用于端到端使用案件验收测试。前段时间我会说明SpecFlow对于这样的测试来说是一个错误的工具,但是我看到Gherkin已成功用于所有级别,所以也许你的问题提出了一个很好的观点,即如何使用SpecFlow(和Gherkin)来实现这种测试没有重复代码的测试。
答案 2 :(得分:0)
SpecFlow具有称为标记的概念。您可以用标签装饰一个步骤。
不幸的是,您仍然需要三次使用场景,但使用不同的@tags。
然后在方法或类上设置StepScopeAttribute
以表示此方法/类的范围限定为特定功能/方案/标记。这里有一个来自作者的示例项目:
https://github.com/techtalk/SpecFlow/tree/master/Tests/FeatureTests/ScopedSteps
答案 3 :(得分:0)
怎么说:
When I request a list of radio channels for JSON, XML and SOAP
Then the corresponding resulting deliveryPackages contains a list of at least 3 items
每个步骤定义可以包括三个独立的接口。
但是,我会质疑你的方法是否明智。假设单独的接口共享相同的业务逻辑,实际上三个中只有一个会失败吗?在所有接口上测试少量关键方法可能会更好吗?对于大多数方法,只需选择一个接口进行测试?