17

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

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

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

是否可以使用插件来解析它,还是我需要使用正则表达式来解析它?

4

6 回答 6

10

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

测试计划概述:

在此处输入图像描述

ULP_JSON 后处理器:

在此处输入图像描述

如果控制器:

在此处输入图像描述

这是运行结果:

在此处输入图像描述

如您所见,使用普通的 JMeter 是可能的

如果你想学习 JMeter,这本书由项目的 3 位开发人员编写,将为你提供帮助。

于 2014-01-18T22:48:09.537 回答
6

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

这是我使用的插件:http: //jmeter-plugins.org/wiki/JSONPathExtractor/和给定的表达式适用于它。

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

于 2013-10-02T13:19:33.280 回答
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/

于 2013-09-01T19:40:02.623 回答
3

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

像这样:

正则表达式提取器

于 2016-08-02T14:54:31.260 回答
0

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

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

于 2016-11-26T18:08:38.473 回答
0

休息获取服务样本:

{
    "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();
于 2019-08-02T10:29:50.253 回答