Jmeter提取字段/解析JSON响应

时间:2013-09-01 19:26:17

标签: regex json parsing jmeter

我在响应正文中有以下JSON格式

[
    {
        "Name" : "Prashant",
        "City" : "Sydney"
    },
    {
        "Name" : "Yogi",
        "City" : "London"
    }
]

检查此数组是否有任何记录的更好方法是什么?如果是,则为第一个数组索引提供“名称”。我正在为jMeter使用jp @ gc JSON提取器插件。

是否可以使用插件解析此问题,还是需要使用正则表达式进行解析?

6 个答案:

答案 0 :(得分:8)

为JMeter 使用Ubik Load Pack JSON插件,这是JMeter自3.0版(捐赠的插件)的一部分,并且名为JSON Extractor,您可以这样做:

测试计划概述:

enter image description here

ULP_JSON PostProcessor:

enter image description here

如果是控制器:

enter image description here

以下是运行结果:

enter image description here

因此,您可以通过我们的解决方案看到它是可能的

答案 1 :(得分:6)

我不确定你的插件,但如果它支持JSON路径表达式,它应该是可能的。
试试这个表达式:$.[0].Name

这是我使用的插件:http://jmeter-plugins.org/wiki/JSONPathExtractor/并且给定的表达式可以使用它。

您可以在此处找到有关JSON路径表达式的更多信息:http://goessner.net/articles/JsonPath/index.html#e2

答案 2 :(得分:5)

在JMeter中使用JSON并不容易,因为JMeter很久以前就是在JSON发明之前设计的。 然而,有一些扩展使生活更轻松:

http://www.ubik-ingenierie.com/blog/extract-json-content-efficiently-with-jmeter-using-json-path-syntax-with-ubik-load-pack/

答案 3 :(得分:3)

我们可以添加一个正则表达式提取器来从响应中获取值。

喜欢这个:

Regular expression extractor

答案 4 :(得分:0)

如果可能,请始终使用Regular Expression Extractor。尽量避免使用JSON / XPATH /其他提取器。它们看起来很容易使用。但是他们消耗更多的记忆和时间。它会影响测试计划的性能。

来源http://www.testautomationguru.com/jmeter-response-data-extractors-comparison/

答案 5 :(得分:0)

Rest Get服务示例:

{
    "ObjectIdentifiers": {
        "internal": 1,
        "External1": "221212-12121",
        "External3": "",
        "Name": "koh"
    },
    "PartyType": "naturalPerson",
    "NaturalPerson": {
        "idNo": "221212-12121",
        "Title": "Mr",
        "Name": "koh",
        "FirstName": "",

我们在项目中对使用jmeter解析json响应有类似的要求。要求是验证json响应中的所有字段,并从外部数据源提供该字段的期望值。

在这种情况下,我发现JSR223 PostProcessor非常有用,因为我们能够以此实现Groovy脚本。它是Jmeter最新版本的默认插件


编辑:

下面是代码段:

//get the JSON response from prev sampler
String getResponse = prev.getResponseDataAsString();

//parse the response and convert to string
JSONParser parser = new JSONParser(JSONParser.MODE_JSON_SIMPLE);
String parResponse = parser.parse(getResponse);

String preResponse = parResponse.toString();

JsonObject NaturalPerson = JsonObject.readFrom(preResponse);


//replace all commas with a semi-colon
String csvResponse = preResponse.replaceAll(",", ";");

//log response to file
logFileName = "C:/apache-jmeter-5.1.1/Web_Service_Output.csv";
BufferedWriter outLog = new BufferedWriter(new FileWriter(logFileName, true));
outLog.write(csvResponse + "\n");
outLog.close();