我正在尝试使用JMeter对网站的编辑功能进行性能测试。 然而,我尝试测试的步骤回复了表单中的200多个项目。 我显然希望所有项目都与向用户显示的表单相同(不包括我打算更改的表单)。我知道这可以使用正则表达式提取器(参见问题JMeter - MVC : Form posting model that contains dymanic data)但是这需要为表单中的每个元素手动设置,这是巨大的!
有没有办法让JMeter回发所有表单元素而不必单独设置每个表单元素?或任何插件来做到这一点?
非常感谢任何帮助。
答案 0 :(得分:2)
定义正则表达式提取器后,
step1)使用所有values = true
创建“Debug PostProcessor”检查此后处理器时,您将在列表中找到所有“后置参数”值。尝试找到适合与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的答案有点难以理解,不得不四处寻找设置正则表达式提取器等。以下是我采取的步骤。
设置正则表达式提取器,从GET请求的响应中检索参数
要强制Jmeter从正则表达式提取器生成列表,匹配编号应设置为-1(如文档here所示)。请注意,您还需要捕获参数名称和值,因此您最终应该得到类似的内容......
(可选)添加“调试后处理器”。如果您这样做,您应该能够确认存在具有所选参考名称前缀的变量(在上面的示例中,您应该期望变量fieldList_matchNr
,fieldList_1_g1
,fieldList_1_g2
等。 )
添加Beanshell后置处理器,将参数添加到后续POST请求的表单数据
以下脚本适用于Jmeter 2.11(撰写本文时的最新版本)。请注意使用Integer.parseInt
而不是Integer.valueOf
。
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("=====================");