首页 > 解决方案 > 是否可以参数化 Post 请求有效负载,然后在 Jmeter 中将其编码为 base64

问题描述

背景是我想为 Google pub/sub 制作一个 REST。其中数据需要遵循这种格式:

链接到 Pub/Sub 格式的文档

我当前的解决方案是,在将请求发送到端点之前,我使用 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,例如:

示例

标签: jmeterbase64

解决方案


  1. 不要使用 Beanshell,因为 JMeter 3.1 你应该使用 JSR223 测试元素和 Groovy 语言编写脚本

  2. __base64Encode () 函数可通过自定义 JMeter 函数插件包使用JMeter 插件管理器安装

  3. 如果您的 CSV 文件引用了其他 JMeter 函数或变量,则可以通过包装到__eval() 函数中来解决它们,例如:

    • 读取文件:

      ${__FileToString(somefile.csv,,)}
      
    • 读取文件并解析其中的任何函数或变量:

      ${__eval( ${__FileToString(somefile.csv,,)})
      
    • 读取文件,解析任何函数或变量并对结果进行 Base64 编码:

      ${__base64Encode(${__eval( ${__FileToString(somefile.csv,,)})},)}
      

    演示:

    在此处输入图像描述


推荐阅读