Karate DSL:基于用户存在的条件 API 调用导致“输入不匹配 '}'”错误

问题描述 投票:0回答:1

我正在尝试使用 Karate DSL 有条件地调用 API。我的目标是:

发出 GET API 请求来检查用户是否存在。 如果用户存在(即响应状态为200),则调用DELETE API删除该用户。

我尝试在 Karate DSL 中使用

if
语句来有条件地调用
DELETE
API(如果用户存在)。我最初的方法是:

  1. 发出
    GET
    请求来检查用户是否存在。
  2. 如果
    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 调用流程顺利,没有语法问题。

testing karate dsl karate-call-single
1个回答
0
投票

我不认为空手道支持功能文件内的这种多行条件逻辑,就像您在 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')
 

这里是相关空手道文档的链接

空手道条件逻辑文档

如果您需要将附加数据传递到被调用的功能中

空手道通话文档

© www.soinside.com 2019 - 2024. All rights reserved.