如何创建场景
在 BDD 中,我们创建一个包含上下文、事件和结果的场景。
上下文是场景开始的状态。因此,在您的情况下,您有两个服务,并且可能在这些服务中创建了一些可能会改变响应的东西。那些成为你的“Given”。
假设您的服务正在处理用户详细信息。 (根据对您的场景重要的任何信息,相应地调整这些信息。)
Given the REST service has a user 'Chandra Prakash'
And the SOAP service has a user 'Chandra Prakash'
在 BDD 中的大多数情况下,我们在每个场景中只发生一个事件。如果有互动或时间流逝之类的东西,可能会有两个事件,我认为这也很重要。所以我们调用这两个服务,事件就变成了你的“时间”。
When we ask the REST service for all users with family name 'Prakash'
And we ask the SOAP service for all users with family name 'Prakash'
最后一点是结果,我们看是否得到了对我们很重要的价值。
Then both services should have found a user 'Chandra Prakash'.
这些行一起成为功能文件中的场景。
我不会只使用一种场景来验证两者是否相同,而是寻找系统功能的示例,并为每个示例使用一种场景。但是,如果您希望最后一次调用只是检查它们是否相同,那就可以了。
将场景连接到自动化
您发现的大多数 Cucumber 示例都将使用 Selenium 之类的东西在网页上实现自动化,但您没有。您有一个 API,而不是 UI。您正在提出一个系统如何使用另一个系统的示例。
您的自动化将在 Givens 中设置数据,然后在 Whens 中根据需要调用 REST 服务或 SOAP 服务。
如果您通过Cucumber's tutorial 工作,然后使用他们的技术将场景连接到这两个服务,您将得到您想要的。
请注意,Cucumber 对于不同的语言有不同的风味,因此请选择适合自己的风味。
场景与验收标准
一般来说,我喜欢问,“你能给我举个例子吗?”那么,您能给我举个例子说明 REST 服务和 SOAP 服务是做什么的吗?如果答案是业务人员和非技术人员感兴趣的,那么你可以写下这个例子。尝试使用特定的细节,就像我在这里使用用户和他们的名字所做的那样,而不是像一般的那样
Given the REST service has a user with a particular family name
When we ask the REST service for users with that family name
Then it should retrieve them
这不是一个场景,即使它是良好的接受标准。我们希望我们的场景是具体的和令人难忘的。尝试使用企业能够识别的真实数据。
黄瓜与纯代码
我发现了一个小问题。
听起来您正在做的可能是技术集成测试,而不是系统行为的示例。如果是这种情况,并且没有对场景感兴趣的非技术利益相关者,那么 Cucumber 可能是矫枉过正。在您的语言的单元级框架中创建一些东西就足够了(例如 JUnit for Java 等)。我通常会创建一个小 DSL,如下所示:
GivenThePetshop.IsRunning();
WhenTheAccessories.AreSelected("Rubber bone", "Dog Collar (Large)");
ThenTheBasket.ShouldContain("Rubber bone", 1.50);
ThenTheBasket.ShouldContain("Dog Collar (Large)", 10.00)
ThenTheBasket.ShouldHaveTotal(11.50);
但是,如果您不在其他任何地方重复使用这些步骤,则不需要这样做;您可以将“Given,When,Then”放入 cmets 并直接调用代码。
在这种情况下,我会针对 Cucumber 使用以下一些论点:
- 重构纯英文比重构代码更难
- 它引入了另一层抽象,使代码更难理解
- 这是另一个可供开发人员学习的框架
- 在 CI 系统等中进行设置也需要时间。
但是,如果你不能反击,使用 Cucumber 不会是世界末日。
进行一些对话!
找出例子的最好方法是问别人,“你能给我一个例子吗?”所以我会找到最了解业务流程的人,并询问他们。
即使这只是一个集成测试,也请这样做,因为他们将能够帮助您考虑系统行为不同的其他示例。每一个都变成另一个场景。
你去吧!如果您确实需要 StackOverflow 无法提供的帮助,BDD 和 Cucumber 都有邮件列表,还有很多示例。