0

我正在尝试对公开 API 的测试管理系统进行 GET 调用。我想在作为 OT 中的操作提供的 HTTPRequest 的标头中提供基本身份验证,就像这样。

includes: login.js
actors:
  - actor: WEB
    segments:
      - segment: 1
        actions:
          - script: var xUsername = $env("X_USERNAME");
          - script: var xPassword = $env("X_PASSWORD");
          - script: $log("This is the username " + xUsername);
          - script: $log("This is the password " + xPassword);

          - description: Sample Reading testid
            action: org.getopentest.actions.HttpRequest
            args:
              $checkpoint: true
              $localData:
                testRailCaseInfo: $output.body
              url: https://sub.domain.io/api/v2/get_results/1234
              headers:
                Content-Type: application/json
                Authorization: Basic xUsername xPassword
              verb: GET

这个对吗?

4

1 回答 1

1

这里有两种方法(请注意我没有测试这段代码)。您可以Authorization使用 JavaScript 表达式构建标头值,

- description: Read test ID
  action: org.getopentest.actions.HttpRequest
  args:
      url: https://sub.domain.io/api/v2/get_results/1234
      verb: GET
      headers:
        Content-Type: application/json
        Authorization: |
            $script
            "Basic " + $base64($env("X_USERNAME") + ":" + $env("X_PASSWORD"))

或提前在脚本操作中构建标头值:

- script: |
    // Build the authentication header
    var authHeader =
        "Basic " + $base64($env("X_USERNAME") + ":" + $env("X_PASSWORD"));

- description: Read test ID
  action: org.getopentest.actions.HttpRequest
  args:
      url: https://sub.domain.io/api/v2/get_results/1234
      verb: GET
      headers:
        Content-Type: application/json
        Authorization: $script authHeader         

我可能应该解释一下$script这两个示例中的角色或前缀是什么。当动作参数的值以美元前缀符号(如$json$data$format等)开头时,测试参与者理解表达式是 JavaScript 代码,评估表达式并将结果用作参数的值。当 JS 表达式不以美元前缀符号开头时(例如,我们的表达式分别以"Basic"and开头authHeader),我们必须在表达式前面$script加上一个或多个空格字符,让测试参与者知道后面的字符串是JavaScript 代码,而不仅仅是普通的字符串文字。

至于基本认证方案的格式,你可以在这里找到更多信息:https ://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Authorization 。

于 2019-04-27T02:22:43.023 回答