我正在尝试使用 JMeter 对网站的编辑功能进行性能测试。但是,我尝试测试表单中的 200 多个项目的步骤。我显然希望所有项目都与向用户显示的表单相同(不包括我打算更改的表单)。我知道这可以使用正则表达式提取器(请参阅问题JMeter - MVC:包含动态数据的表单发布模型)但是这需要为表单中的每个元素手动设置,这是巨大的!
有没有办法让 JMeter 回发所有表单元素而不必单独设置每个元素?或任何插件来做到这一点?
任何帮助将非常感激。
我正在尝试使用 JMeter 对网站的编辑功能进行性能测试。但是,我尝试测试表单中的 200 多个项目的步骤。我显然希望所有项目都与向用户显示的表单相同(不包括我打算更改的表单)。我知道这可以使用正则表达式提取器(请参阅问题JMeter - MVC:包含动态数据的表单发布模型)但是这需要为表单中的每个元素手动设置,这是巨大的!
有没有办法让 JMeter 回发所有表单元素而不必单独设置每个元素?或任何插件来做到这一点?
任何帮助将非常感激。
定义正则表达式提取器后,
step1) 创建所有值 = true 的“Debug PostProcessor”
当您检查此后处理器时,您会在列表中找到所有后参数值。尝试找到适合与 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("=====================");
希望这可以帮助。
好问题。经过大量搜索,我发现奇怪的是 Jmeter 不能更优雅地支持这一点,并且需要相当多的解决方法来简单地回发在先前的 GET 请求中收到的表单数据。
我发现 ShGiji 的回答有点难以理解,不得不四处寻找设置正则表达式提取器等。以下是我采取的步骤。
设置正则表达式提取器,以从 GET 请求的响应中检索参数
要强制 Jmeter 从正则表达式提取器生成列表,匹配编号应设置为 -1(如此处所述)。请注意,您还需要捕获参数名称和值,因此您最终应该得到类似这样的东西......
可以选择添加 Debug Post Processor。如果这样做,您应该能够确认存在带有您选择的参考名称前缀的变量(在上面的示例中,您应该期望变量fieldList_matchNr
,fieldList_1_g1
等fieldList_1_g2
)
添加一个 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("=====================");
另一种方法是使用 JMeter 的代理功能。
您可以使用 JMeter(与其自动提交 HTTP 请求的能力不同)在浏览器中记录您的操作。然后,您可以访问该站点并提交表单。Jmeter 将记录一个 HTTP 请求采样器,提取所有表单元素并使用您提交的值填充。如果您在 JMeter 测试中需要一些不同的值,那么您可以将这些值编辑为正确的值。完成后,您可以将其保存为测试计划,然后运行它。
这只有在您想编辑少量元素时才真正起作用。如果您需要每个元素提交的值与浏览器中提交的值不同,那么上述方法会更好。
http://jmeter.apache.org/usermanual/jmeter_proxy_step_by_step.pdf