我一直在使用 Cucumber 以 BDD 方式实现多个 REST API 测试,并且正在考虑这样一种场景:可以通过
Activity
端点检索具有特定 id 的 GET
对象。在互联网上找到的示例首先检查活动列表是否可用,然后再实际检索该特定 ID。
因此,场景(在功能文件中)如下所示:
Scenario: When user requests for an existing activity id, the activity should be returned
Given A list of activities is available
When The user requests for an activity with a specific id
Then The requested activity should be returned
在
Given
步骤中,我将向我的 API 发送 GET
请求,以检查是否可以提供活动。在 When
步骤中,我将请求特定活动(提供其 ID),而在 Then
步骤中,我将执行断言。
其他消息来源指出,不建议在
Given
步骤中直接与API交互,只需准备内部数据(例如内部创建对象或生成要插入的id),然后将其发送到Then
,它实际上应该与外部系统进行交互。
我的问题是:是否有关于
Given
步骤中该做什么、不该做什么的具体规则?例如,如果我认为在获取具有特定 id 的活动之前,我应该将其插入,并检查插入是否成功,那么我是否不允许在 POST
语句中编写 Given
逻辑?如果是这样,这是否意味着大多数 Given
实现对于简单的 API 来说都是空的?
这是一个意见问题。
您在安排部分准备被测系统,给定等。在我看来,您正在使用外部客户端在已经运行的服务器上进行一些黑盒测试。在这种情况下,我不会太担心在给定步骤中执行 POST。除非您可以通过其他渠道检查服务器的状态,也许可以查看数据库或类似的内容。
换句话说,每种情况都是独特的,您需要采取必要的措施来确保实现最终目标,即系统按照最终用户的需要运行。同时,如果可能的话,避免将来的维护噩梦。