使用 Karate 框架在 GitHub 中自动创建分支

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

我正在尝试使用 Karate 框架在 GitHub 中自动创建分支。要求如下:

  1. 检查存储库中是否已存在分支。

  2. 如果分支存在,请将其删除,然后创建一个同名的新分支。

  3. 如果分支不存在,直接创建分支。

    我尝试了以下方法:

  • 使用 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
    错误。

  • 确保流程稳健并处理边缘情况,例如权限或网络错误。

需要指导或如何实施的示例?

automation karate gherkin
1个回答
0
投票

您可以在空手道中使用条件逻辑。我相信下面的例子会给你一些想法。文档: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
© www.soinside.com 2019 - 2024. All rights reserved.