jmeter授权管理器/循环计数

时间:2016-02-03 14:09:42

标签: jmeter

我正在使用JMeter来运行一些Web服务测试,这是我的问题:

  1. 这是我的测试结构:
  2. > Threadgroup
    >         -User Defined Variables
    >         -SOAP/XML-RPC Request1
    >            ->Xpath Extractor
    >            ->Beanshell PostProcessor
    >         -SOAP/XML-RPC Request2
    >             ->HTTP Authorization manager
    >             ->Beanshell PreProcessor
    >         -Debug Sampler
    >       View Results Tree
    
    1. Xpath Extractor处理Request1结果以提取密码,Beanshell PostProcessor将其存储在用户定义变量"授权"。

    2. Beanshell PreProcessor从变量中提取密码,并在授权管理器中为用户设置密码。

    3. AuthManager authmanager = sampler.getAuthManager();
      Authorization authorization = new Authorization();
      authorization.setURL("http://localhost:1130");
      authorization.setUser("user"); 
      authorization.setPass(vars.get("Authorization"));
      authorization.setRealm("gSOAP Web Service");
      authmanager.addAuth(authorization);
      

      一切正常,直到我需要循环组线程。第一个循环工作正常,但执行的其余部分失败。似乎在第二轮中,授权管理器未使用新凭据进行更新,导致以下请求失败。

      我在创建新授权之前尝试清除授权管理器,但它无法正常工作。

      帮助!!

1 个答案:

答案 0 :(得分:0)

addAuth方法(可以在code中看到)只会添加一个Authorization对象(如果它尚不存在)。因此,在第二次添加对象之前,您必须将其删除,如下所示:

AuthManager authmanager = sampler.getAuthManager();
// ... (same as before)
authorization.setRealm("gSOAP Web Service");
for (int i = 0; i < authmanager.getAuthCount(); i++) {
        Authorization oldAuthorization = authmanager.get(i);
        if (oldAuthorization == null) {
            continue;
        }
        if (oldAuthorization.getURL().equals(authorization.getURL())) { 
            authmanager.remove(i);
        }
}
authmanager.addAuth(authorization);