jmeter - 是否可以参数化 Post 请求有效负载,然后在 Jmeter 中将其编码为 base64
问题描述
背景是我想为 Google pub/sub 制作一个 REST。其中数据需要遵循这种格式:
我当前的解决方案是,在将请求发送到端点之前,我使用 BeanShell PreProcessor 脚本将有效负载编码为 base64。此解决方案有效,但我想参数化有效负载中的数据,而不是将整个有效负载作为测试数据插入 csv 文件中。
BeanShell PreProcessor 用于在发送消息之前对其进行编码:
import org.apache.jmeter.protocol.http.util.Base64Encoder;
String csv_payload = vars.get("csv_payload");
String csv_payload_encoded = Base64Encoder.encode(csv_payload);
vars.put("csv_payload_encoded", csv_payload_encoded);
从 Post 请求中的 csv 文件填充的有效负载:
{
"messages": [
{
"data":"${csv_payload_encoded}",
}
]
}
存储在请求中发送的 csv 文件中的有效负载数据示例:
{"identId":"123456","requestId":null,"payload":{"header":{"requestid":1,"timeStamp":1617873956,"version":"0.0.0.1","eventId":0001,"creatorId":0,"messageTTL":34560},"body":{"checkid":001,"checkData":{"diagnosticsData":{"troubleSource":0,"data":"[2020-01-01 16:00:53.707961][[lat[0]][long[0]][alt[0]][canbetrust[0]][mars[0]]][signal[5]][TEM2 wake up]"}}}}}
请求发送到 google pub/sub 的编码负载示例:
{
"messages": [
{
"data":"eyJpZGVudElkIjoiMTIzNDU2IiwicmVxdWVzdElkIjpudWxsLCJwYXlsb2FkIjp7ImhlYWRlciI6eyJyZXF1ZXN0aWQiOjEsInRpbWVTdGFtcCI6MTYxNzg3Mzk1NiwidmVyc2lvbiI6IjAuMC4wLjEiLCJldmVudElkIjowMDAxLCJjcmVhdG9ySWQiOjAsIm1lc3NhZ2VUVEwiOjM0NTYwfSwiYm9keSI6eyJjaGVja2lkIjowMDEsImNoZWNrRGF0YSI6eyJkaWFnbm9zdGljc0RhdGEiOnsidHJvdWJsZVNvdXJjZSI6MCwiZGF0YSI6IlsyMDIwLTAxLTAxIDE2OjAwOjUzLjcwNzk2MV1bW2xhdFswXV1bbG9uZ1swXV1bYWx0WzBdXVtjYW5iZXRydXN0WzBdXVttYXJzWzBdXV1bc2lnbmFsWzVdXVtURU0yIHdha2UgdXBdIn19fX19",
}
]
}
如果有任何反馈,我将不胜感激或任何其他改进建议,以便我能够继续将有效负载参数化和编码为 base64,例如:
解决方案
不要使用 Beanshell,因为 JMeter 3.1 你应该使用 JSR223 测试元素和 Groovy 语言编写脚本
__base64Encode () 函数可通过自定义 JMeter 函数插件包使用JMeter 插件管理器安装
如果您的 CSV 文件引用了其他 JMeter 函数或变量,则可以通过包装到__eval() 函数中来解决它们,例如:
读取文件:
${__FileToString(somefile.csv,,)}
读取文件并解析其中的任何函数或变量:
${__eval( ${__FileToString(somefile.csv,,)})
读取文件,解析任何函数或变量并对结果进行 Base64 编码:
${__base64Encode(${__eval( ${__FileToString(somefile.csv,,)})},)}
演示:
推荐阅读
- c# - 不能隐式转换类型
- c# - 粒子系统,在使用 Play() 和 Stop() 函数时,构建后不起作用
- javascript - 尝试创建一个添加功能,因此当我单击添加按钮时,它会将项目添加到项目符号列表并在其旁边创建一个复选框
- layout - 从 JasperReports Server v 6.3 升级到 v 7.5 后的布局问题
- javascript - Drupal 分类中的国家代码显示为标志
- android - 使用 JNI 从 c++ 回调到 Kotlin:Android
- python - 多个数据帧之间的相关性如何?蟒蛇熊猫
- share - “在 JSON 中,位置 0 处出现意外的令牌 <”,同时实施社交分享短代码
- google-sheets - 谷歌表格:基于今天()和日期单元格的行的条件格式
- python - 将图像输入模型进行预测 - CNN 脑肿瘤检测