如何在json响应中替换字符串并将其发送到jmeter

时间:2016-10-14 00:32:20

标签: json regex jmeter beanshell

在JSON响应中替换字符串的最佳方法是什么?就我而言,我需要用正则表达式提取响应。提取的值保存为savedItems,在保存的项目中,我需要搜索下面的字符串并替换然后再次发布。在2个请求中,首先请求获取然后发送第2个请求(替换字符串)。

我正在尝试在正则表达式提取器中使用BellShell PostProcessor并尝试替换,但它似乎不起作用。

Original string: rate":10.370681}
Replace with this: rate":10.370681,"$rowSelect":false,"$rowState":"invalid":false,"dirty":false,"added":false}

有可能100 - 500被替换所以任何推荐?我仍然是豆壳的新手并尝试使用以下代码,但还没有运气:)

debug();

try {
String savedItems = vars.get("Saved_Item");

String updatedSavedItems =  savedItems.replaceAll("rate":10//.370681//}", "rate":10//.370681,"//$rowSelect":false,"//$rowState"://{"invalid":false,"dirty":false,"added":false//}");

vars.put("UPDATED", updatedSavedItems);
}

catch (Throwable ex) {
 log.error("Problem in Beanshell", ex);
 throw ex;
 }

1 个答案:

答案 0 :(得分:0)

为什么不查看 jmeter.log 文件?

根据String.replaceAll()方法文档:

  

请注意,替换字符串中的反斜杠()和美元符号($)可能会导致结果与将其视为文字替换字符串时的结果不同;见Matcher.replaceAll。如果需要,使用Matcher.quoteReplacement(java.lang.String)来抑制这些字符的特殊含义。

所以你需要修改你的替换线并用2个反斜杠来逃避美元符号,如:

String updatedSavedItems = savedItem.replaceAll("rate\":10", " rate\":10.370681,\"\\$rowSelect\":false,\"\\$rowState\":\"invalid\":false,\"dirty\":false,\"added\":false}");

演示:

Beanshell Replace

更多信息:https://www.blazemeter.com/blog/queen-jmeters-built-componentshow-use-beanshell