是否可以参数化Post请求负载,然后将其编码到Jmeter中的base64

是否可以参数化Post请求负载,然后将其编码到Jmeter中的base64,jmeter,base64,Jmeter,Base64,背景是我想在Google pub/sub上休息一下。在这里,数据需要遵循以下格式: 我目前的解决方案是,在将请求发送到端点之前,使用BeanShell预处理器脚本将有效负载编码到base64。这个解决方案可行,但我想 参数化有效负载中的数据,而不是将整个有效负载作为测试数据插入csv文件中 用于在消息发送前对其进行编码的BeanShell预处理器: import org.apache.jmeter.protocol.http.util.Base64Encoder; String csv_pa

背景是我想在Google pub/sub上休息一下。在这里,数据需要遵循以下格式:

我目前的解决方案是,在将请求发送到端点之前,使用BeanShell预处理器脚本将有效负载编码到base64。这个解决方案可行,但我想 参数化有效负载中的数据,而不是将整个有效负载作为测试数据插入csv文件中

用于在消息发送前对其进行编码的BeanShell预处理器:

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);
{
    "messages": [
        {
            "data":"${csv_payload_encoded}",
          }
      ]
    }
{"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]"}}}}}
{
    "messages": [
        {
            "data":"eyJpZGVudElkIjoiMTIzNDU2IiwicmVxdWVzdElkIjpudWxsLCJwYXlsb2FkIjp7ImhlYWRlciI6eyJyZXF1ZXN0aWQiOjEsInRpbWVTdGFtcCI6MTYxNzg3Mzk1NiwidmVyc2lvbiI6IjAuMC4wLjEiLCJldmVudElkIjowMDAxLCJjcmVhdG9ySWQiOjAsIm1lc3NhZ2VUVEwiOjM0NTYwfSwiYm9keSI6eyJjaGVja2lkIjowMDEsImNoZWNrRGF0YSI6eyJkaWFnbm9zdGljc0RhdGEiOnsidHJvdWJsZVNvdXJjZSI6MCwiZGF0YSI6IlsyMDIwLTAxLTAxIDE2OjAwOjUzLjcwNzk2MV1bW2xhdFswXV1bbG9uZ1swXV1bYWx0WzBdXVtjYW5iZXRydXN0WzBdXVttYXJzWzBdXV1bc2lnbmFsWzVdXVtURU0yIHdha2UgdXBdIn19fX19",
          }
      ]
    }
从Post请求中的csv文件填充的有效负载:

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);
{
    "messages": [
        {
            "data":"${csv_payload_encoded}",
          }
      ]
    }
{"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]"}}}}}
{
    "messages": [
        {
            "data":"eyJpZGVudElkIjoiMTIzNDU2IiwicmVxdWVzdElkIjpudWxsLCJwYXlsb2FkIjp7ImhlYWRlciI6eyJyZXF1ZXN0aWQiOjEsInRpbWVTdGFtcCI6MTYxNzg3Mzk1NiwidmVyc2lvbiI6IjAuMC4wLjEiLCJldmVudElkIjowMDAxLCJjcmVhdG9ySWQiOjAsIm1lc3NhZ2VUVEwiOjM0NTYwfSwiYm9keSI6eyJjaGVja2lkIjowMDEsImNoZWNrRGF0YSI6eyJkaWFnbm9zdGljc0RhdGEiOnsidHJvdWJsZVNvdXJjZSI6MCwiZGF0YSI6IlsyMDIwLTAxLTAxIDE2OjAwOjUzLjcwNzk2MV1bW2xhdFswXV1bbG9uZ1swXV1bYWx0WzBdXVtjYW5iZXRydXN0WzBdXVttYXJzWzBdXV1bc2lnbmFsWzVdXVtURU0yIHdha2UgdXBdIn19fX19",
          }
      ]
    }
请求中发送的csv文件中存储的有效负载数据示例:

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);
{
    "messages": [
        {
            "data":"${csv_payload_encoded}",
          }
      ]
    }
{"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]"}}}}}
{
    "messages": [
        {
            "data":"eyJpZGVudElkIjoiMTIzNDU2IiwicmVxdWVzdElkIjpudWxsLCJwYXlsb2FkIjp7ImhlYWRlciI6eyJyZXF1ZXN0aWQiOjEsInRpbWVTdGFtcCI6MTYxNzg3Mzk1NiwidmVyc2lvbiI6IjAuMC4wLjEiLCJldmVudElkIjowMDAxLCJjcmVhdG9ySWQiOjAsIm1lc3NhZ2VUVEwiOjM0NTYwfSwiYm9keSI6eyJjaGVja2lkIjowMDEsImNoZWNrRGF0YSI6eyJkaWFnbm9zdGljc0RhdGEiOnsidHJvdWJsZVNvdXJjZSI6MCwiZGF0YSI6IlsyMDIwLTAxLTAxIDE2OjAwOjUzLjcwNzk2MV1bW2xhdFswXV1bbG9uZ1swXV1bYWx0WzBdXVtjYW5iZXRydXN0WzBdXVttYXJzWzBdXV1bc2lnbmFsWzVdXVtURU0yIHdha2UgdXBdIn19fX19",
          }
      ]
    }
请求发送到google pub/sub的编码有效负载示例:

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);
{
    "messages": [
        {
            "data":"${csv_payload_encoded}",
          }
      ]
    }
{"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]"}}}}}
{
    "messages": [
        {
            "data":"eyJpZGVudElkIjoiMTIzNDU2IiwicmVxdWVzdElkIjpudWxsLCJwYXlsb2FkIjp7ImhlYWRlciI6eyJyZXF1ZXN0aWQiOjEsInRpbWVTdGFtcCI6MTYxNzg3Mzk1NiwidmVyc2lvbiI6IjAuMC4wLjEiLCJldmVudElkIjowMDAxLCJjcmVhdG9ySWQiOjAsIm1lc3NhZ2VUVEwiOjM0NTYwfSwiYm9keSI6eyJjaGVja2lkIjowMDEsImNoZWNrRGF0YSI6eyJkaWFnbm9zdGljc0RhdGEiOnsidHJvdWJsZVNvdXJjZSI6MCwiZGF0YSI6IlsyMDIwLTAxLTAxIDE2OjAwOjUzLjcwNzk2MV1bW2xhdFswXV1bbG9uZ1swXV1bYWx0WzBdXVtjYW5iZXRydXN0WzBdXVttYXJzWzBdXV1bc2lnbmFsWzVdXVtURU0yIHdha2UgdXBdIn19fX19",
          }
      ]
    }
如果有任何反馈,我将不胜感激或任何其他改进建议 我将如何继续,以便将有效负载参数化并编码为base64,例如:

  • 不要使用Beanshell

  • 可以通过插件包使用

  • 如果您的CSV文件引用了其他JMeter函数或变量,您可以通过将它们包装成以下格式来解析它们:

    • 要读取文件,请执行以下操作:

      ${__FileToString(somefile.csv,,)}
      
    • 要读取文件并解析其中的任何函数或变量,请执行以下操作:

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

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


  • 我通过在测试之前添加一个用户定义的变量来解决这个问题,该变量包含一个参数“payload_before_encoding”,参数为“{example}”,“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,“数据”:“[2020-01-01 16:00:53.707961][[lat[0]][long[0]][alt[0]][CANBERTRUST[0]][mars[0]]]][signal[5]][TEM2唤醒]”}”作为值。通过这样做,我能够在编码之前填充有效负载,方法与前面提到的相同感谢您@Dmitri T通过提供各种解决方案帮助我改进我的解决方案。我在解决方案中选择了uu base64Encode()函数。