我正在使用JMeter来运行一些Web服务测试,这是我的问题:
> 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
Xpath Extractor处理Request1结果以提取密码,Beanshell PostProcessor将其存储在用户定义变量"授权"。
Beanshell PreProcessor从变量中提取密码,并在授权管理器中为用户设置密码。
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);
一切正常,直到我需要循环组线程。第一个循环工作正常,但执行的其余部分失败。似乎在第二轮中,授权管理器未使用新凭据进行更新,导致以下请求失败。
我在创建新授权之前尝试清除授权管理器,但它无法正常工作。
帮助!!
答案 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);