我一直在使用 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
步骤中,我将向GET
我的 API 发送请求,以检查是否可以提供活动。在该When
步骤中,我将请求特定活动(提供其 ID),而在该Then
步骤中,我将执行我的断言。
其他来源指出,不建议在Given
步骤中直接与 API 交互,而只需准备内部数据(如内部创建对象或生成要插入的 id),然后将其发送给Then
实际上应该与外部系统进行交互。
我的问题是:对于该步骤中应该做什么Given
和不应该做什么,是否有具体的规则?例如,如果我考虑在获取具有特定 ID 的活动之前,我应该将其插入,并检查插入是否成功,那么我是否不允许POST
在Given
语句中编写逻辑?如果是这样,这是否意味着Given
对于简单的 API,大多数实现都将是空的?
这是一个见仁见智的问题。
您在安排部分、给定等中准备待测系统。在我看来,您正在使用外部客户端在已经运行的服务器上进行一些黑盒测试。在这种情况下,我不会太担心在给定步骤中执行 POST。除非您可以通过其他渠道检查服务器的状态,例如查看数据库或类似内容。
换句话说,每种情况都是独一无二的,您需要采取必要措施确保实现最终目标,即系统按照最终用户需要的方式运行。同时,如果可能的话,避免将来出现维护噩梦。