2. 什么是 Basic 认证?

Basic 认证是最简单的访问控制方法,用于保护 Web 资源。它通过客户端发送一个 HTTP 头实现:

Authorization: Basic <credentials>

其中 credentials 是用户名和密码组成的字符串,用冒号 : 分隔后进行 Base64 编码。

当浏览器弹出窗口要求输入凭证(而非 HTML 表单)时,就是在使用 Basic 认证:

浏览器认证弹窗

如果直接用 JMeter 测试受保护的资源,服务器会返回 HTTP 401(未授权)响应,并在响应头中包含 WWW-Authenticate: Basic,表明需要 Basic 认证:

HTTP 401 响应头

3. 在 JMeter 中实现 Basic 认证的简单方法

3.1. 直接添加 Authorization 头

最粗暴的方式是直接在请求头中添加认证信息。使用 HTTP Header Manager 组件即可轻松实现,该组件必须作为 HTTP Request 的子组件:

测试计划结构

HTTP Header Manager 的配置界面,添加如下键值对:

  • 名称:Authorization
  • 值:Basic base64编码的凭证

Header Manager 配置

提示:可用在线工具(如 Base64 编码工具)生成编码字符串。注意值要以 Basic 开头(注意空格)。

配置正确后,服务器应返回 HTTP 200 状态码。

3.2. 用 JSR223 PreProcessor 动态编码凭证

如果需要动态生成编码(比如多用户测试),可以用 JSR223 PreProcessor 组件。将其放在 HTTP Header Manager 之前:

JSR223 PreProcessor 位置

在组件中执行以下 Java 脚本:

import org.apache.commons.codec.binary.Base64;

String username = vars.get("username");
String password = vars.get("password");
String credentials = username + ":" + password;
byte[] encodedUsernamePassword = Base64.encodeBase64(credentials.getBytes());
vars.put("base64Credentials", new String(encodedUsernamePassword));

需提前在 User Defined Variables 中定义 usernamepassword 变量:

用户定义变量

最后在 HTTP Header Manager 中使用变量:

  • 名称:Authorization
  • 值:Basic ${base64Credentials}

动态 Header 配置

这样就能轻松切换不同用户凭证,避免硬编码的坑。

4. 使用 HTTP Authorization Manager

JMeter 专门提供了 HTTP Authorization Manager 组件简化认证配置。该组件支持多域名和多认证协议,需作为 Thread Group 的子组件,且位于 HTTP Request 之前:

Authorization Manager 位置

在配置界面输入:

  • Base URL:目标域名(如 https://api.example.com
  • 用户名和密码
  • 认证机制选择 BASIC

Authorization Manager 配置

技巧:用户名和密码字段支持变量(如 ${username}),密码字段虽显示为掩码,但直接输入变量名即可生效。

配置后,HTTP Request 会自动添加 Authorization 头,无需手动处理。

5. 在 Authorization Manager 中使用多组凭证

有时需要测试不同角色的访问权限(如管理员/普通用户)。可通过 CSV 文件批量管理凭证

  1. 创建 CSV 文件(如 credentials.csv):

    username,password,role
    admin,admin123,ADMIN
    user,user123,USER
    
  2. 添加 CSV Data Set Config 组件(作为 Thread Group 的子组件):

    • 文件名:${csv_file_path}
    • 变量名:username,password,role
    • 分隔符:,
    • 忽略首行:勾选(因首行是列名)

    CSV 配置

  3. HTTP Authorization Manager 中使用变量:

    • 用户名:${username}
    • 密码:${password}
  4. 关键配置:设置 Thread Group 的循环次数 ≥ CSV 行数,确保每轮测试使用不同凭证。

这样就能在测试中自动轮换不同用户凭证,高效验证权限控制逻辑。

6. 总结

本文介绍了 HTTP Basic 认证的工作原理,以及在 JMeter 中实现认证的三种方法:

  • 直接硬编码 Authorization 头(简单粗暴)
  • JSR223 PreProcessor 动态生成凭证(灵活但稍复杂)
  • 使用 HTTP Authorization Manager(官方推荐,支持多凭证)

对于多用户测试场景,配合 CSV 文件和 CSV Data Set Config 可大幅提升效率。实际项目中建议优先使用 Authorization Manager,避免重复造轮子。

示例代码已托管在 GitHub,欢迎参考。


原始标题:Basic Authentication in JMeter