无法识别 JS 文件中的缓冲区(API 使用 Karate Framework 测试自动化)
Buffer in JS file isn't recognized (API tests automation with Karate Framework)
我们正在使用 karate 框架自动化我们的测试。在我们的一项功能中,我们需要解码令牌并在响应中获取范围。一切正常,除了 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是空手道'native',所以不明白为什么Buffer不被识别?我们应该做什么?感谢您的帮助
我很确定 Buffer
是高级/非标准或 NodeJS,因此 JVM JS 引擎 (Nashorn) 可能不支持它。
这是我的推荐。对于这种情况,请使用 Java 实用程序完成工作。
例如,查看使用Base64编码的Karate basic-auth example in the doc。
如果它真的很复杂,只需创建一个Java静态函数,作为附带好处,测试起来会容易得多。希望这有帮助!
我能够使用以下代码成功地将 JWT 令牌有效负载 base64 解码为 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 本身会更好。此外,您可以从 header 而不是本例中的 cookie 获取令牌,如果是这样,只需更改您要查找的 responseHeader。
相对于post
我的查询被标记为重复,因此 posting 我们在项目中找到的 answer/solution。
我们在 karate core 中对错误进行了一些调试。似乎缺少依赖项。
我们在POM.xml
中添加了依赖
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.15</version>
</dependency>
之后问题得到解决,我们开始收到 HTTP 401。
我不确定它是否可以添加到空手道核心中。
我们正在使用 karate 框架自动化我们的测试。在我们的一项功能中,我们需要解码令牌并在响应中获取范围。一切正常,除了 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是空手道'native',所以不明白为什么Buffer不被识别?我们应该做什么?感谢您的帮助
我很确定 Buffer
是高级/非标准或 NodeJS,因此 JVM JS 引擎 (Nashorn) 可能不支持它。
这是我的推荐。对于这种情况,请使用 Java 实用程序完成工作。
例如,查看使用Base64编码的Karate basic-auth example in the doc。
如果它真的很复杂,只需创建一个Java静态函数,作为附带好处,测试起来会容易得多。希望这有帮助!
我能够使用以下代码成功地将 JWT 令牌有效负载 base64 解码为 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 本身会更好。此外,您可以从 header 而不是本例中的 cookie 获取令牌,如果是这样,只需更改您要查找的 responseHeader。
相对于post
我的查询被标记为重复,因此 posting 我们在项目中找到的 answer/solution。
我们在 karate core 中对错误进行了一些调试。似乎缺少依赖项。
我们在POM.xml
中添加了依赖<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.15</version>
</dependency>
之后问题得到解决,我们开始收到 HTTP 401。 我不确定它是否可以添加到空手道核心中。