【问题标题】:Jmeter extracting fields/parsing JSON responseJmeter 提取字段/解析 JSON 响应
【发布时间】:2013-09-01 19:26:17
【问题描述】:

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

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

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

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

【问题讨论】:

  • jmeter 是否提供任何编程语言?我试图找到一些关于它的信息,似乎是纯 GUI 的东西。
  • 如果不是,这个问题似乎与 SO 无关。
  • 它有If、While、For、Switch等控件但以可视化的方式,所以它有一种GUI DSL
  • 如果可能,请始终使用Regular Expression Extractor。尽量避免使用 JSON / XPATH / 其他提取器。它们可能看起来很容易使用。但是它们会消耗更多的内存和时间。它将影响您的测试计划的性能。 来源testautomationguru.com/…
  • 查看这个完整的指南,解释如何使用 Json 提取器从 Json 响应中提取数据:octoperf.com/blog/2017/03/09/…

标签: regex json parsing jmeter


【解决方案1】:

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

测试计划概述:

ULP_JSON 后处理器:

如果控制器:

这是运行结果:

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

如果您想学习 JMeter,该项目的 3 位开发人员的 book 将为您提供帮助。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 在这种特定情况下可能是$[0].Name,因为数组是数据的根。
    【解决方案3】:

    在 JMeter 中使用 JSON 并不容易,因为 JMeter 早在 JSON 发明之前就已经设计好了。 然而,有一些扩展可以让生活更轻松:

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

    【讨论】:

    • 你确定你试过我们的插件(商业),我们没有你作为客户,也没有试用者。您一定对 JMeter Plugins json 插件感到困惑,请参阅下面的答案
    • 非商业解决方案怎么样? Ubik 垃圾邮件这个网站足够了
    • Ubik 已将其商业插件贡献给 Apache JMeter,并已集成为 JSON Extractor。顺便说一句,自 2018 年 6 月以来,Ubik-Ingenierie 是 ApacheJMeter 的 10 个版本的重要贡献者,请参阅 jmeter.apache.org/changes.html#Thanks 所以你关于垃圾邮件的评论不是很好也不公平。查看热门回答者并发表您的意见。
    【解决方案4】:

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

    像这样:

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        【解决方案6】:

        Rest 获取服务示例:

        {
            "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 版本的默认插件


        编辑:

        下面是sn-p的代码:

        //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();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-06-03
          • 1970-01-01
          • 2019-10-11
          • 1970-01-01
          • 1970-01-01
          • 2013-03-27
          相关资源
          最近更新 更多