8

我正在尝试使用 JMeter 对网站的编辑功能进行性能测试。但是,我尝试测试表单中的 200 多个项目的步骤。我显然希望所有项目都与向用户显示的表单相同(不包括我打算更改的表单)。我知道这可以使用正则表达式提取器(请参阅问题JMeter - MVC:包含动态数据的表单发布模型)但是这需要为表单中的每个元素手动设置,这是巨大的!

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

任何帮助将非常感激。

4

3 回答 3

2

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

step1) 创建所有值 = true 的“Debug PostProcessor”

  • Jmeter 属性 = true
  • Jmeter变量=真
  • 采样器属性 = true
  • 系统属性 = true

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

我使用 firebug 找出所有必需的 post 参数。要知道如何使用它,请点击此链接 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("=====================");

希望这可以帮助。

于 2013-06-20T19:25:41.853 回答
2

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

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

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

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

正则表达式提取器示例

  1. 可以选择添加 Debug Post Processor。如果这样做,您应该能够确认存在带有您选择的参考名称前缀的变量(在上面的示例中,您应该期望变量fieldList_matchNr,fieldList_1_g1fieldList_1_g2

  2. 添加一个 Beanshell Post Processor,将参数添加到后续 POST 请求的表单数据中

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

Beanshell 后处理器:

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("=====================");
于 2014-10-21T20:16:33.317 回答
2

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

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

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

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

于 2013-06-21T08:34:24.803 回答