簡體   English   中英

無法識別 JS 文件中的緩沖區(使用空手道框架進行 API 測試自動化)

[英]Buffer in JS file isn't recognized (API tests automation with Karate Framework)

我們正在使用空手道框架自動化我們的測試。 在我們的一項功能中,我們需要解碼一個令牌並在響應中獲得一個范圍。 一切正常,除了 js 中的這段代碼。

function(token) {
    return JSON.parse(new Buffer(token.split('.')[1],'base64').toString('ascii')).scope;
}

錯誤:

Caused by: <eval>:2 ReferenceError: "Buffer" is not defined
Caused by: jdk.nashorn.internal.runtime.ECMAException

在官方教程中說 javascript 是空手道的“原生”,所以我們不明白為什么 Buffer 不被識別? 我們應該怎么做? 謝謝你的幫助

我能夠使用以下代碼成功將 JWT 令牌有效負載 base64Decode 到 JSON,而無需 Java 方法:

  Background:
    * def parseJwt =
  """
  function(token) {
      var base64Url = token.split('.')[1];
      var base64Str = base64Url.replace(/-/g, '+').replace(/_/g, '/');
      var Base64 = Java.type('java.util.Base64');
      var decoded = Base64.getDecoder().decode(base64Str);
      var String = Java.type('java.lang.String')
      return new String(decoded)
  };
  """

  Scenario: JWT Token
    Given path  'jwt/authenticate'
    And header x-goog-authenticated-user-email = 'email'
    And request {}
    When method get
    Then status 200
    * json result = parseJwt(responseHeaders['Set-Cookie'][0])
    * match result == {permissions: [1,2,3], iss: "us", exp: "#number", email: "email"}

注意:似乎確實需要使用json而不是def因為如果將字符串解析為 json 本身,Karate 會做得更好。 此外,您可以像本示例中那樣從標頭而不是 cookie 獲取令牌,如果是這樣,只需更改您正在查找的 responseHeader。

我很確定Buffer是高級/非標准或 NodeJS,因此 JVM JS 引擎 (Nashorn) 可能不支持它。

這是我的建議。 對於這種情況,請使用 Java 實用程序來完成這項工作。

例如,查看使用 Base64 編碼的文檔中的Karate basic-auth 示例

如果真的很復雜,只需創建一個Java靜態函數,作為附帶好處進行測試會容易得多。 希望這可以幫助 !

關於職位空手道:使用不記名令牌的請求問題 | 空手道在響應中顯示“org/apache/commons/codec/binary/Base64”而不是 HTTP 401

我的查詢被標記為重復,因此發布了我們在項目中找到的答案/解決方案。

我們在空手道核心中對錯誤進行了一些調試。 似乎缺少依賴項。

在此處輸入圖片說明

我們在 POM.xml 中添加了依賴

<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.15</version>
</dependency>

后來問題解決了,我們開始得到HTTP 401。我不確定它是否可以添加到空手道核心。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM