首页 文章

如何在Jmeter的循环控制器的下一次迭代中使用部分请求来处理累积记录请求?

提问于
浏览
-1

如何处理请求的一部分并在Jmeter的下一个请求中使用它?

我正在尝试记录一个应用程序,登录后我们最初显示100行 . 当我们滚动超过100行时,延迟加载调用将转到服务器并再获取50条记录 .

该调用采用JSON格式 . 对于第一个滚动,它作为请求发送所有100条记录,作为响应,我们得到50条新记录 . 现在,当我们滚动超过150条记录时,请求将所有150条记录作为请求,并且响应再次返回50条新记录 . 下一个滚动将发送累计200条记录的请求 .

现在我试图让循环控制器在循环中进行所有滚动 . 每个延迟加载调用将只提供50个记录,但是对于下一次请求迭代,累积记录数将作为请求发送 .

我的直觉说为此使用预处理器和后处理器 . 因为,我是Jmeter的新手,我不确定为此目的使用哪个预处理器,或者是否还有其他替代方案可以解决这个问题 .

如果是默认页面响应, fgAhi 并且我需要值 A 来传递第一个Json请求 . 所以第一个请求就像 xAy ,响应是 pBq . 现在,对于第二次迭代,我需要请求为 xABy ,响应将为 pCq . 第三个请求将是 xABCy ,响应是 pDq ,依此类推 .

这是一个例子:

默认页面响应正文:

quiz: [{"question": "Question1","answer": "Answer1"},
{"question": "Question2","answer": "Answer2"},
{"question": "Question3","answer": "Answer3"},
{"question": "Question4","answer": "Answer4"}]

循环控制器:JSON请求体的第一次迭代:

quiz: [{"question": "Question1","answer": "Answer1"},
{"question": "Question2","answer": "Answer2"},
{"question": "Question3","answer": "Answer3"},
{"question": "Question4","answer": "Answer4"},getNextTwoQA]`

第一次迭代响应:

quiz: [{question": "Question5","answer": "Answer5"},
{question": "Question6","answer": "Answer6"}]`

JSON请求体的第二次迭代:

quiz: [[{"question": "Question1","answer": "Answer1"},
{"question": "Question2","answer": "Answer2"},
{"question": "Question3","answer": "Answer3"},
{"question": "Question4","answer": "Answer4"},
{"question": "Question5","answer": "Answer5"},
{"question": "Question6","answer": "Answer6"},getNextTwoQA]

第二次迭代响应:

quiz: [{question": "Question7","answer": "Answer7"},
{question": "Question8","answer": "Answer8"}]

JSON请求体的第3次迭代:

quiz: [{"question": "Question1","answer": "Answer1"},
{"question": "Question2","answer": "Answer2"},
{"question": "Question3","answer": "Answer3"},
{"question": "Question4","answer": "Answer4"},
{"question": "Question5","answer": "Answer5"},
{"question": "Question6","answer": "Answer6"},
{question": "Question7","answer": "Answer7"},
{question": "Question8","answer": "Answer8"},getNextTwoQA]

第3次迭代响应:

quiz: [{question": "Question9","answer": "Answer9"},
{question": "Question10","answer": "Answer10"}]

等等

1 回答

  • 0

    IMO您只需要后处理器,它将您需要的数据保存为变量(累积),并且该变量用于采样器的主体 .

    即当第一个请求返回 fgAhi 时,后处理器将 A 保存为 previousRows 变量(名称仅作为示例选择,可以更改为其他任何内容) . 然后在循环内部,Sampler使用 ${previousRows} 变量作为其主体的一部分 . 该采样器还具有后处理器,用于改变变量 previousRows 以将新接收的结果 B 添加到先前保存的 A . 并且由于循环返回到相同的采样器,它将在下一次迭代时自动获取 ${previousRows} 的新值,现在为 AB . 等等 .

    所以基本上流程是这样的:

    First Sampler
      Post-Processor <-- gets data from first response
    Loop Controller
      Scroll Sampler <-- uses `${previousRows}` as part of its request body
        Programmable Post-Processor <-- appends data to `${previousRows}`
    

    可编程后处理器循环返回采样器后,采样器使用新值进行下一次迭代 . 可编程后处理器我指的是任何允许您编写代码的后处理器 . 例如BeanShell后处理器 . 将数据附加到 ${previousRows} 的代码看起来像这样(骨架,需要添加特定的数据操作):

    // Get current value of ${previousRows} variable
    String previousRows = vars.get("previousRows");
    
    // Get result returned by a sampler which contains new data
    String newAddedRows = prev.getResponseDataAsString();
    // you can manipulate response here in any way to get only required data
    
    // Then append previousRows String and newAddedRows 
    // and save as new value of ${previousRows} variable
    // Showing simplest way here, you may need to do further manipulations:
    vars.put("previousRows", previousRows + newAddedRows);
    

    你可以阅读BeanShell Post-Processor here

相关问题