接口测试 jmeter 运行 js 脚本反向 arraybuffer 的问题

xrandy · 2021年07月30日 · 最后由 xrandy 回复于 2021年08月04日 · 1998 次阅读
var buffer = new ArrayBuffer(44)
var headerLength = new DataView(buffer, 0, 4)
var version = new DataView(buffer, 4, 4)
var passport = new DataView(buffer, 8, 8)
var sessionId = new DataView(buffer, 16,8)
var type = new DataView(buffer, 24, 4)
var id = new DataView(buffer, 28, 8)
var ip = new DataView(buffer, 36, 4)
var cmd = new DataView(buffer, 40, 4)
headerLength.setInt32(0,44)
cmd.setInt32(0,1000)
var view  = new Int8Array(buffer)
var arrbuffer = view.buffer
var cmdDataView = new DataView(arrbuffer,40,4)
var res_cmd = cmdDataView.getInt32(0)
console.log(res_cmd)

以上代码单独运行能拿到 res_cmd=1000,但放在 jmeter 中运行就取的值不对,请教各位大佬

修改下问题,经测试错误跟取样器没关系。而是在 jmeter 里面 我使用了 setInt32 这个方法,所有打印出来的值就取的是最后一个 setInt32 的值,比如以上代码:
headerLength.setInt32(0,44)
cmd.setInt32(0,1000)
这时候取 cmd 的值打印出来是 1000,但是换个顺序如下:
cmd.setInt32(0,1000)
headerLength.setInt32(0,44)
这时候取 cmd 的值打印出来就是 44,感觉是 log.info 打印出来的值始终是最后一次 setInt32 的值,我试了使用 setInt8 也是一样的。有人遇到相同的问题吗,求教

共收到 8 条回复 时间 点赞

你的 js sampler 是啥?ArrayBuffer 看上去是最新的 js 了

sampler 是 websocket

JSR223 Sampler, language 选 javascript ecma。
console.log(res_cmd) 改写成 log.info(res_cmd)

实测通过,输出 1000

LTV 回复

我也是选的 javascript ecma,但我输出的是 0,jmeter 上肯定是用的 log.info。用的 5.4 和 5.5 的 jmeter 都不对。JDK 是 1.8.0

xrandy 回复

换成 java SE11 也不对

LTV 回复

我用的前置处理程序 PreProcessor 和后置处理程序 PostProcessor 不行,同样的代码我试了下 JSRR223sampler 是可以的。不知道是什么原因....现在只能改用 JSRR223sampler 了。
谢谢你的帮助!

@ 恒温 @ 王 问题有更新麻烦看下,谢谢

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册