5

大家好 我们正在开发一个可通过 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 接口进行测试。

在 cucumber 中,可以使用 -R 来运行功能来指示步骤文件的位置,但是在 SpecFlow 中,我还没有找到绕过步骤文件的方法,因此我可以让相同的功能运行不同的步骤。

我宁愿不必为每个场景编写 3 次以更改要使用的步骤实现。

所以,有两个问题:1)我如何为预期完全相同的场景的 3 个不同接口运行 3 次功能?2)如何每次选择正确的步骤文件?

解决(1)可能会解决(2)。

4

4 回答 4

11

我的一位同事给了我们一个很好的解决方案:场景大纲:

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 个单元测试,这就是我所追求的。

更多信息:管理相关场景组

于 2011-05-30T11:21:34.810 回答
1

我唯一想到的是使用场景大纲,它允许定义一系列场景,然后通过在表格中提供不同的参数来执行它的变体。

但我不确定这是对主要针对输入变化而不是基础设施设置的场景大纲的合理使用。

另一个问题,如果 SpecFlow 是配置此类步骤的正确位置,是否应该在不同的级别上测试这些细节(基础设施集成测试和组件的单元测试),因此 Gherkin 仅用于端到端用例验收测试. 前段时间我坚持认为 SpecFlow 是此类测试的错误工具,但我看到 Gherkin 在所有级别上都成功使用,所以也许你的问题提出了一个很好的观点,即如何采用 SpecFlow(和 Gherkin)来启用这种无需重复代码的测试。

于 2011-05-21T11:24:25.487 回答
0

SpecFlow 具有一个称为标记的概念。您可以使用标签装饰步骤。

不幸的是,您仍然需要使用三个不同的@tags 的场景。

然后,您StepScopeAttribute在方法或类上设置 表示此方法/类的范围为特定功能/场景/标签。作者这里有一个示例项目:

https://github.com/techtalk/SpecFlow/tree/master/Tests/FeatureTests/ScopedSteps

于 2011-05-20T11:09:29.477 回答
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

每个步骤定义可以包括三个单独的接口。

但是,我会质疑您的方法是否明智。假设单独的接口共享相同的业务逻辑,是否真的有可能只有三个中的一个会失败?跨所有接口测试少量关键方法,而对于大多数方法只选择一个接口进行测试,会不会更好?

于 2011-05-21T00:15:11.830 回答