【问题标题】:Facing issues with storing variable results in JMeter面临在 JMeter 中存储变量结果的问题
【发布时间】:2021-12-24 12:57:05
【问题描述】:

我必须使用后处理器将所有匹配结果存储在一个文件中。以下是响应正文。我能够提取所有匹配的结果并将其存储在文件中。

events":[
               {
                 "idWorkflow":3,
                 "idCase":3754,
                 "idWorkitem":4059,
                 "displayName":"Inform RPA to Register SOP in CRM",
                 "type":"activity",
                  "date":"05/21/2021 13:38",
                 "status":"closed",
                 "assignee":"f3044857-7233-449c-9abe-f44e48616c8e",
                 "containsMoreAssignees":false
                },
                {
                  "idWorkflow":21,
                  "idCase":3454,
                  "idWorkitem":3790,
                  "displayName":"Get & evaluate CDWH Data",
                  "type":"activity",
                  "date":"05/21/2021 13:38",
                  "status":"closed",
                  "assignee":"f3044857-7233-449c-9abe-f44e48616c8e",
                  "containsMoreAssignees":false
                   }`

在上面的响应正文中,我需要以正确的顺序提取所有“displayName”和“date”字段值。 预期结果:“通知 RPA 在 CRM 中注册 SOP” - 05/21/2021 13:38 “获取和评估 CDWH 数据”- 2021 年 5 月 21 日 13:38 下面是我的代码

  import java.text.SimpleDateFormat;
                 import java.io.FileOutputStream;
                 import java.util.Map;
                 import java.util.Set;
                  def resultCount = vars.get("c_date_matchNr")
                  def activity = vars.get("c_displayName_matchNr")
                    for (int i = 1; i <= resultCount.toInteger(); i++) {
                        records = vars.get("c_date_" + i)
                        for (int j = 1; j <= activity.toInteger(); j++) {
                            list = vars.get("c_displayName_" + j)

                            FileWriter fstream = new FileWriter("C:/final.csv", true);
                            BufferedWriter out = new BufferedWriter(fstream);
                            out.write(records);
                            out.write("-");
                            out.write(list);
                            out.write(System.getProperty("line.separator"));
                            out.close();
                            fstream.close();
                        }

                    }

上面的代码存储了结果,但同一行打印了多次。有人可以解释一下这段代码有什么问题吗,或者在 JMeter 中是否有其他替代方法可以做到这一点

【问题讨论】:

    标签: jmeter performance-testing


    【解决方案1】:

    使用Debug Sampler and View Results Tree listener combination 查看c_displayNamec_date 变量变量的值,可能是变量具有重复值的情况。

    另一种方法是parsing the response completely in Groovy,不使用任何其他后处理器:

    new groovy.json.JsonSlurper().parse(prev.getResponseData()).events.each { event ->
        new File('c:/final.csv') << event.get('displayName') << '-' << event.get('date') << System.getProperty('line.separator')
    } 
    

    如果您使用多个用户/迭代运行测试,您将看到不止一次的“活动”,而且数据可能由于race condition 而损坏,因此考虑使用可能是一个更好的主意即Flexible File Writer

    【讨论】:

    • 当然,德米特里。我会考虑灵活的文件写入器选项。有没有办法使用灵活的文件写入器选项在文件中仅存储变量响应(例如:“c_display name”)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多