使用相同的JMeter测试脚本在多台服务器上测试JSF应用程序

时间:2014-07-23 06:06:57

标签: jsf testing jmeter

目前我们正在开发一个应用程序并将其部署在我的本地计算机上。现在我正在使用jmeter进行负载测试,它运行没有问题。我遇到的问题是,当我尝试在另一台使用不同服务器的计算机上运行相同的测试时,它无法正常工作。
我观察到 html元素id 在使用JSF的不同服务器上是不同的。(问题是表单提交不起作用)。有没有办法用jmeter克服这个问题,因为我想在不同的服务器上运行相同的测试脚本。

1 个答案:

答案 0 :(得分:1)

从先前响应中提取动态值并将其添加到下一个请求的过程称为相关性。 JMeter提供各种Pre ProcessorsPost Processors以允许即时修改请求。

示例用例:

  1. 向GET请求发送包含许多输入的JSP页面
  2. 提取所有输入名称并在必要时填充值
  3. 使用在第2点中提取的值填充下一个请求的动态字段
  4. 发送POST请求
  5. 第1点:您的脚本无需更改

    第2点

    添加XPath Extractor作为GET请求的子代,并按如下方式填充:

    • 参考名称:INPUT
    • XPath查询://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对象可以做些什么。