如何在JMeter中处理动态请求 - 每次运行可能会/可能不会发生

时间:2014-10-16 05:36:28

标签: jmeter

在Web应用程序中:

单页有不同的部分/分区 每个部分都使用筛选查询帮助检索数据。

如果没有匹配的结果,部分将仅发送以下请求: 请求1:域/搜索/ jobs / csuser__search2_1413357426.1559

如果查询返回任何匹配的结果,部分将发送以下两个请求: 请求1:域/搜索/ jobs / csuser__search2_1413357426.1559 请求2:域/搜索/工作/ csuser__search2_1413357426.1559 / results_preview

如何管理请求2,每次运行可能会或可能不会发生。

目前我手动录制整个网络电话,删除不必要的电话和电话。为' N' 循环计数运行它。如果任何部分具有匹配结果,我怎样才能确保测试运行请求2 还应该注意我在第一次执行时可能没有记录。

2 个答案:

答案 0 :(得分:0)

您可以使用Beanshell PostProcessorIf Controller的组合来解决此问题:

  1. 添加Beanshell PostProcessor作为查询请求的子项
  2. 将以下代码放入PostProcessor的“脚本”区域:

    int length = prev.getSubResults().length;
    if (length > 1) {
        String path = prev.getSubResults()[length - 1].getURL().getPath();
        if (path.contains("results_preview")) {
            vars.put("resultPresent", "true");
        }
    } else {
        vars.put("resultPresent", "false");
    }
    
  3. 在请求后添加一个If Controller

  4. 根据您在以下情况下输入的情况,如果控制器的“条件”输入
    • ${resultPresent}==true - 如果查询返回结果,将执行子项
    • ${resultPresent}==false - 如果查询未返回任何匹配的内容,则会执行子项
  5. Beanshell代码执行以下操作:

    • 检查执行了多少请求
      • 如果有多于1个请求,则提取最后一个请求的路径
        • 如果路径包含“results_preview”,则变量resultPresent的值设置为“true”
      • 如果只有1个请求,则resultPresent变量为false

    参考文献:

答案 1 :(得分:0)

正如迪米特里所说。处理器应该在(后)请求后运行1.然后if控制器将根据处理器的结果进行操作。第二部分仅在条件不是“假”时运行。