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

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

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 条回复 时间 点赞
烂柯人 回复

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

eryi 回复

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

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

jacksboy 回复

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

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

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

vars.putObject 试试呢

jacksboy 回复

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

jacksboy 回复

为啥不建议 原因

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

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