如何使用jMeter对基本的auth保护域进行测试?

时间:2015-09-29 21:13:36

标签: jmeter performance-testing basic-authentication

我正在运行apache / nginx webservers的暂存群集,其中域具有基本身份验证受限访问权限。我的目标是用jmeter测试集群的性能。

为了通过身份验证,我添加了jmeter的HTTP身份验证控制器。这是有效的,但每个请求都显示apache的两个logentries。一个200和一个401.这是正常行为,因为第一次请求必须对用户进行身份验证。不幸的是,jmeter会在每次请求时执行此操作。

如何确保每个线程/用户仅请求访问一次。或者更好的是,如果没有每个用户需要进行身份验证,我怎么能授予jmeter访问权限。我相信这会影响测试结果。

感谢您对此提出任何暗示。

1 个答案:

答案 0 :(得分:0)

这听起来像是一个JMeter bug,因为它具有适当的权限#34;授权"提供标题不应该是WWW-Authenticate挑战。如果您可以通过JMeter Bugzilla提交,或通过JMeter Users Mailing List标记,那就太棒了

与此同时,您可以使用以下方法之一来解决这个问题:

  1. 直接将凭据注入URL - 如果JMeter进入" Path"输入字段如:

    http://username:password@host.domain/path
    

    Basic Auth 1 - credentials in URL

  2. 使用Beanshell Scripting构建适当的"授权"标题即时。为此:

    • 确保HTTP Header Manager存在。如果不是 - 将其添加到测试计划级别或作为需要进行身份验证的HTTP请求的子级
    • Beanshell PreProcessor添加为需要进行身份验证的HTTP请求的子项
    • 提供用空格分隔的用户名和密码,通过"参数"输入
    • 将以下代码放入预处理器"脚本"区域

      import org.apache.jmeter.protocol.http.util.Base64Encoder;
      import org.apache.jmeter.protocol.http.control.Header;
      
      String encodedCredentials = Base64Encoder.encode(bsh.args[0] + ":" + bsh.args[1]);
      sampler.getHeaderManager().add(new Header("Authorization", "Basic " + encodedCredentials));
      

    Beanshell PreProcessor - authentication

  3. 你不应该再在任何地方收到任何401代码了。