![](/img/trans.png)
[英]Karate - karate.configure('headers', { Accept: 'application/json' }); is not recognized in karate-config.js file. It says missing import statements
[英]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.