我正在尝试使用 Karate DSL 有条件地调用 API。我的目标是:
发出 GET API 请求来检查用户是否存在。 如果用户存在(即响应状态为200),则调用DELETE API删除该用户。
我尝试在 Karate DSL 中使用
if
语句来有条件地调用 DELETE
API(如果用户存在)。我最初的方法是:
GET
请求来检查用户是否存在。GET
响应状态为200
,则继续调用DELETE
API。这是我尝试过的代码:
Given headers authorization
And headers contentType
And url host + '/user'
When method GET
Then status 200 || status 404
* if (responseStatus == 200){
* url host + '/internal/user'
* method DELETE
Then status 200
* karate.log('Deleted user')
}
但是,我收到了
mismatched input '}' expecting <EOF>
错误。当我删除 {}
块周围的花括号 if
时,我遇到了与条件逻辑和请求结构相关的更多错误。
我希望代码仅在
DELETE
请求返回 GET
状态时有条件地执行 200
API 调用。如果用户不存在(即 GET
请求返回 404
),则应跳过 DELETE
API 调用。我希望条件检查和 API 调用流程顺利,没有语法问题。
我不认为空手道支持功能文件内的这种多行条件逻辑,就像您在 JS 或 Java 中所想到的那样。为了实现这一目标,我认为您需要将删除逻辑移动到其自己的功能文件内,并将其与条件逻辑组合在一行上。
首先,为删除逻辑创建一个单独的功能文件。删除用户.feature
Feature: Delete User
Scenario: Delete a user
Given url host + '/internal/user'
When method DELETE
Then status 200
* karate.log('Deleted user')
然后您可以在条件逻辑中使用此功能文件,以便在用户存在时调用
Feature: Check and Delete User
Scenario: Check if user exists and delete if present
Given headers authorization
And headers contentType
And url host + '/user'
When method GET
Then status 200 || status 404
* if (responseStatus == 200) karate.call('delete-user.feature')
这里是相关空手道文档的链接
如果您需要将附加数据传递到被调用的功能中