我正在尝试使用 Karate 框架在 GitHub 中自动创建分支。要求如下:
检查存储库中是否已存在分支。
如果分支存在,请将其删除,然后创建一个同名的新分支。
如果分支不存在,直接创建分支。
我尝试了以下方法:
使用 Karate 的
Scenario
向 GitHub 的 REST API (GET
) 发出 GET /repos/{owner}/{repo}/branches/{branch}
请求以检查分支是否存在。
如果分支存在,则尝试发出
DELETE
请求将其删除,然后发出 POST
请求创建新分支。
但是,我在将此流程集成到单个场景中时遇到了问题。例如,我不确定如何根据分支的存在状态有条件地执行
DELETE
和 POST
请求(来自 GET
的响应)。
此外,当我尝试创建分支而不先检查其是否存在时,我遇到以下错误:
422 Unprocessable Entity: Reference already exists
POST
请求失败时会发生这种情况,因为 GitHub 阻止重复创建分支。相关代码片段:
Feature: Automate GitHub Branch Creation
Scenario: Create or Replace Branch in GitHub
Given url 'https://api.github.com/repos/{owner}/{repo}/branches/{branch}'
And header Authorization = 'Bearer <your_token>'
When method GET
Then status 200
# How can I conditionally handle DELETE and POST requests here?
错误消息/日志:
422 Unprocessable Entity: Reference already exists
我需要帮助在空手道功能文件中实现此功能。具体来说,我想:
检查分支是否存在。
根据分支的存在有条件地执行
DELETE
和 POST
请求。
通过正确处理分支存在来避免
422 reference already exists
错误。
确保流程稳健并处理边缘情况,例如权限或网络错误。
需要指导或如何实施的示例?
您可以在空手道中使用条件逻辑。我相信下面的例子会给你一些想法。文档:https://github.com/karatelabs/karate?tab=readme-ov-file#conditional-logic
Scenario: If else conditional logic with multiple and condition using ternary operator
Given url 'https://reqres.in/api/users'
And request {"name": "morpheus","job": "leader"}
When method post
* match responseStatus == 201
* def filename = responseStatus == 201 && response.name == 'morpheus'? 'QueryAndPathParameter.feature' : 'ResponseKeywords.feature'
* def result = call read(filename)
QueryAndPathParameter.feature
Feature: query and path parameter Feature
Background:
* configure ssl = true
Scenario: query parameter
Given url 'https://reqres.in/api/users'
And param page = '2'
When method get
Then status 200
ResponseKeywords.feature
Feature: Response keywords feature
Scenario: responseStatus
Given url 'https://reqres.in/api/users/2'
When method get
Then print 'response status is:', responseStatus
Then match responseStatus == 200
Then assert responseStatus == 200
Then assert responseStatus == 200 || responseStatus == 204
Then match responseStatus == 200 || responseStatus == 204