【发布时间】:2023-04-11 09:15:01
【问题描述】:
我正在使用 GATLING 并尝试在 scala 中使用 java 的库“Base64”来发送编码 uder:password 在标头(“授权”)请求中,具有动态值: 我正在尝试执行以下操作:
val register = {
exec(request.asJSON
.check(status.is(200))
.check(jsonPath("$..user").saveAs("user"))
.check(jsonPath("$..password").saveAs("password"))
).pause(1)
}
val myvalue: HttpRequestBuilder = Utils.createPostFormParamsRequest(
"myvalue",
login,
Map("value"-> ("Basic " + Base64.getEncoder.encodeToString((("${user}").getBytes() + ":" + ("${password}").getBytes()).getBytes("utf-8")))),
Map())
我也试过Base64.getEncoder.encodeToString(("${uesr}" + ":" + "${password}").getBytes("utf-8"))))
但似乎 Base64 采用字符串 "${user}" 而不是实际值,因此加密无法正常工作。
我试过了:
val helper = {
exec { session =>
val user : String= (session("user").as[String])
val password : String= (session("password").as[String])
val temp = "Basic " + Base64.getEncoder.encodeToString((user + ":" + password).getBytes("utf-8"))
val temp2: HttpRequestBuilder = Utils.createPostFormParamsRequest(
"bla",
login,
Map("value"-> temp),
Map())
val assert = {
exec(helper.asJSON
.check(status.is(200))
.check(header("answer").saveAs("answer"))
).pause(1)
}
session
}
这里的加密工作正常,但“exec”却不行。
有没有办法在运行时保存值而不需要执行部分?
【问题讨论】:
-
尝试将
val finalToken更改为def finalToken,看看是否有不同。我只是想知道在实例化类时而不是在调用它时(在设置会话变量之后)是否正在解析值。 -
我试过了,还是不行:( @eurotrash
-
在这种情况下,可能是您使用不正确。也许
${}语法只适用于exec。您必须检查相关文档。我将发布一个可能的替代解决方案的答案。 -
它不仅在 exec 中有效,因为我做了以下操作:
val registerReq : HttpRequestBuilder = Utils.createPostBodyRequest( "Register", Constants.REGISTER_API_V3, Map("Content-Type"-> "application/json", "Authorization"-> "${lihitoken}"), ElFileBody("ProtectorRegistrationDTO.json"))它有效 -
是
getBytes()不是getBytes(System.getProperty("file.encoding"))因此依赖于平台,并且对于 UTF-8 可能是错误的。
标签: java scala encoding base64 gatling