目前我们正在开发一个应用程序并将其部署在我的本地计算机上。现在我正在使用jmeter进行负载测试,它运行没有问题。我遇到的问题是,当我尝试在另一台使用不同服务器的计算机上运行相同的测试时,它无法正常工作。
我观察到 html元素id 在使用JSF的不同服务器上是不同的。(问题是表单提交不起作用)。有没有办法用jmeter克服这个问题,因为我想在不同的服务器上运行相同的测试脚本。
答案 0 :(得分:1)
从先前响应中提取动态值并将其添加到下一个请求的过程称为相关性。 JMeter提供各种Pre Processors和Post Processors以允许即时修改请求。
示例用例:
第1点:您的脚本无需更改
第2点:
添加XPath Extractor作为GET请求的子代,并按如下方式填充:
INPUT
//input/@name | //input[@type='hidden']
此提取器将获取所有<input>
HTML元素并将其存储为JMeter变量
INPUT_1=javax.faces.ViewState
INPUT_2=loginForm_SUBMIT
INPUT3=...
...
使用以下代码
添加Beanshell预处理器作为下一个请求的子代import java.util.Iterator;
import java.util.Map;
Iterator iter = vars.getIterator();
while (iter.hasNext())
{
Map.Entry e = (Map.Entry)iter.next();
if (e.getValue() != null)
{
if (e.getKey().toString().startsWith("INPUT_") && e.getValue().toString().length() >0)
{
sampler.addArgument(e.getValue().toString(),"VALUE OF YOUR INPUT");
}
}
}
上面的代码将获取前缀为INPUT_
的所有变量,并将其作为参数添加到下一个请求中。
有关Apache JMeter中Beanshell脚本的更多信息,请参阅How to use BeanShell: JMeter's favorite built-in component指南,了解使用Beanshell脚本和使用公开给Beanshell测试元素的JMeter对象可以做些什么。