问答 jmeter beanshell 中怎么传递 byte 类型,vars.put() 只支持 string 类型参数

烂柯人 · 2022年01月11日 · 最后由 eryi 回复于 2022年01月13日 · 3948 次阅读

import com.xxtang2.CloudPYencry;
import com.xxtang2.DesEncryption;
String url=vars.get("url_time");
String time=CloudPYencry.getTime(url);
String input=vars.get("data");
byte[] result=input.getBytes();
byte[] result_encry=DesEncryption.encrypt(result,time);
vars.put("data",result_encry);

如上最后一行,将数据加密以后传给消息体 data,但是 vars.put() 只支持 string 类型,服务在加密处理时又限定了 post 内参数是 byte 类型,有啥好方法解决吗

共收到 10 条回复 时间 点赞

不建议用 beanshell,请坚持用 groovy,几乎等同于 java

jacksboy 回复

为啥不建议 原因

jacksboy 回复

如果在 JSR223 PreProcessor 定义的变量是 input 怎么使用这个变量呢,我在 HTTP 请求中直接使用 ${data}获取不了值

vars.putObject 试试呢

楼上正解, vars.putObject(String key, Object value) 可以设置非字符串类型的变量

1 性能,国外专门做过性能比较,groovy->java->beanshell
2 语言的流行度: beanshell 虽说支持 java,但对 java 的支持程度完全没有 groovy 好,而且几乎已经不再更新了,groovy 还有 jenkins,gradle 等等一些框架再用,而且还在更新
3 易用性: 如果你会用 java,那么你可以说基本上就会用 groovy,groovy 只是再某些细节上针对 java 做了优化

jacksboy 回复

groovy 这种处理值以后传值也是通过 vars.putObject() 解决吗

base64 把 byte 转成 string,然后再转回去

eryi 回复

服务的接口特殊限制哇,这边要是加密的话,这边入参是 byte 类型

烂柯人 回复

vars.put("data", new String(data));

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