如何处理带有空手道测试签名的请求?

How to handle requests with signatures on karate tests?

首先,感谢构建空手道,它对测试 API 和 UI 非常有用。我们正在使用它来测试我们的许多端点,但我们想知道是否有一种方法或哪种方法是处理带有签名的请求的最佳方法作为 header.[=12= 请求的一部分]

在我们的例子中,我们有两个 header:

有没有办法根据请求body内容在请求执行前注入签名值?

在这里您可以看到两个请求示例

示例 1:

   * url 'https://dev.sample.com'
   * path '/api/user/getAll' 
   * header Content-Type = 'application/json'
   * header ApiKey = 'XXX' 
   * header Signature = 'YYY'
    And request {  }
    When method POST
    Then status 200    

示例 2:

   * url 'https://dev.sample.com'
   * path '/api/user/getAll' 
   * header Content-Type = 'application/json'
   * header ApiKey = 'XXX' 
   * header Signature = 'ZZZ'
    And request { name: 'John' }
    When method POST
    Then status 200    

谢谢

空手道有一个用于生成 headers 的“钩子”,但截至目前它还没有“意识到”当前构建的请求 body + headers:https://github.com/intuit/karate#configure-headers

我们在这里收到了类似的请求,正在考虑添加此功能:How to retrieve raw request contents before making a REST call in Karate DSL?

也许 OAuth 示例可以为您提供当前案例的前进方向:https://whosebug.com/a/55055111/143475

随时提出增强请求,我们可以将其纳入下一个版本(在您的帮助下进行测试)。我在想 - 如果您能够从 header JS 函数中调用 karate.get('request') 会怎么样。

但是现在你需要做的就是做这样的事情:

* def body = { some: 'json' }
* karate.set('requestBody', body)
* url someUrl
* request body
* method post

并且在header.js函数中

function fn() {
  var body = karate.get('requestBody');
  var sign = Utils.sign(body);
  return { Signature: sign };  
}

编辑:这将在空手道 1.0 之后实现:https://github.com/intuit/karate/issues/1385