首页 > 解决方案 > 使用 JMeter 修剪和拆分 JSON 响应正文

问题描述

我正在尝试使用 JMeter 测试 REST API。我的领导告诉我使用 JMeter 对每个 API 进行负载测试。目前我正在测试一个 Get API 请求,并且我得到了下面的 JSON 响应正文。

" https://api.rewards.com:/lists/v1/listcontainer/1?ts=20190221004021&auth=EngineeringSolutions:ydvMMlY2uxiKG0yuwh1IbVgR2mfqTQaQncTEaMr+Ef0= "

现在我必须将此 JSON 正文传递给另一个 HTTP 请求并测试 API。

我的问题:

  1. 如何从 JSON 响应正文中修剪双引号字符?
  2. 如何使用拆分方法获取 ts 和 auth 的值,例如 (ts=20190221004021 and auth=EngineeringSolutions:ydvMMlY2uxiKG0yuwh1IbVgR2mfqTQaQncTEaMr+Ef0=)

我知道我可以使用正则表达式提取器或 BeanShell 预处理器来执行所有操作,但我不知道该怎么做。谁能指导我如何修剪和拆分 JSON 响应?

标签: jmeter-5.0

解决方案


  1. 您不会删除双引号,它们是 JSON 语法的一部分。
  2. 在 URL 中拆分查询字符串的方法有很多,这里有两种方法。

var url = "https://api.rewards.com:/lists/v1/listcontainer/1?ts=20190221004021&auth=EngineeringSolutions:ydvMMlY2uxiKG0yuwh1IbVgR2mfqTQaQncTEaMr+Ef0=";

//method 1: pure js
var queries = url.match(/(.+)\?(.+)/)[2].split("&");
var params  = {};

for (let i=0; i<queries.length; i++){
  var item = queries[i].match(/([0-9A-Za-z]+)=(.+)/);
  params[item[1]] = item[2]
}

console.log(JSON.stringify(params,null,2));

//method 2: new in ES6
var queryStr  = url.match(/(.+)\?(.+)/)[2];
var urlParams = new URLSearchParams(queryStr);
var params    = {};

for (let item of urlParams.entries())
  params[item[0]] = item[1];
  
console.log(JSON.stringify(params,null,2));


推荐阅读