JMeter,发布所有表单数据

时间:2013-02-13 18:34:45

标签: performance http jmeter performance-testing jmeter-plugins

我正在尝试使用JMeter对网站的编辑功能进行性能测试。 然而,我尝试测试的步骤回复了表单中的200多个项目。 我显然希望所有项目都与向用户显示的表单相同(不包括我打算更改的表单)。我知道这可以使用正则表达式提取器(参见问题JMeter - MVC : Form posting model that contains dymanic data)但是这需要为表单中的每个元素手动设置,这是巨大的!

有没有办法让JMeter回发所有表单元素而不必单独设置每个表单元素?或任何插件来做到这一点?

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:2)

定义正则表达式提取器后,

step1)使用所有values = true

创建“Debug PostProcessor”
  • Jmeter Properties = true
  • Jmeter Variable = true
  • Sampler properties = true
  • 系统属性= true

检查此后处理器时,您将在列表中找到所有“后置参数”值。尝试找到适合与Post请求一起发送的那些,并使用API​​来设置paramName和paramVal,如下所示。

我用firebug找出所有必需的帖子参数。要了解如何使用它,请点击此链接 http://community.blazemeter.com/knowledgebase/articles/80479-how-to-use-jmeter-for-login-authentication

step2)使用此脚本创建“Beanshell预处理器”。其中“hiddenList”是正则表达式提取器的引用名称。

log.info("=====================");

         count =  Integer.valueOf (vars.getObject("hiddenList_matchNr") ) ;

        log.info("Number of hidden fields in previous sampler: " + count);



        for (i=1; i <= count; i++) { 
            paramName = vars.getObject("hiddenList_"+ i + "_g1");
            paramVal = vars.getObject("hiddenList_"+ i + "_g2");  
            log.info("Adding request parameter: " + paramName + " = " + paramVal);
            sampler.addArgument(paramName, paramVal);
        } 

        log.info("=====================");

希望这会有所帮助。

答案 1 :(得分:2)

另一种方法是使用JMeter的代理功能。

您可以使用JMeter(与其自动执行HTTP请求的能力分开)在浏览器中记录您的操作。然后,您可以访问该网站并提交表单。 Jmeter将记录HTTP请求采样器,提取所有表单元素并使用您提交的值填充。如果您在JMeter测试中需要一些不同的值,那么在浏览器中提交的内容之后,您可以将这些值编辑为正确的值。完成后,您可以将其保存为测试计划,然后运行它。

只有在您想要编辑少量元素时才会真正起作用。如果您需要提交的每个元素的值与您在浏览器中提交的值不同,那么上述方法会更好。

http://jmeter.apache.org/usermanual/jmeter_proxy_step_by_step.pdf

答案 2 :(得分:2)

好问题。经过大量的搜索后,我发现奇怪的是Jmeter并不能更优雅地支持它,并且需要一个解决方法来简单地回发在之前的GET请求中收到的表单数据。

我发现ShGiji的答案有点难以理解,不得不四处寻找设置正则表达式提取器等。以下是我采取的步骤。

  1. 设置正则表达式提取器,从GET请求的响应中检索参数

    要强制Jmeter从正则表达式提取器生成列表,匹配编号应设置为-1(如文档here所示)。请注意,您还需要捕获参数名称和值,因此您最终应该得到类似的内容......

  2. Regular Expression Extractor example

    1. (可选)添加“调试后处理器”。如果您这样做,您应该能够确认存在具有所选参考名称前缀的变量(在上面的示例中,您应该期望变量fieldList_matchNrfieldList_1_g1fieldList_1_g2等。 )

    2. 添加Beanshell后置处理器,将参数添加到后续POST请求的表单数据

      以下脚本适用于Jmeter 2.11(撰写本文时的最新版本)。请注意使用Integer.parseInt而不是Integer.valueOf

    3. Beanshell Post Processor:

      log.info("=====================");
      
      count = Integer.parseInt(vars.getObject("fieldList_matchNr"));
      log.info("Number of order details fields: " + count);
      
      for (i=1; i <= count; i++) { 
        paramName = vars.getObject("fieldList_" + i + "_g1");
        paramVal = vars.getObject("fieldList_" + i + "_g2");  
        log.info("Adding request parameter: " + paramName + " = " + paramVal);
        sampler.addArgument(paramName, paramVal);
      }
      
      log.info("=====================");