2. 什么是 Basic 认证?
Basic 认证是最简单的访问控制方法,用于保护 Web 资源。它通过客户端发送一个 HTTP 头实现:
Authorization: Basic <credentials>
其中 credentials
是用户名和密码组成的字符串,用冒号 :
分隔后进行 Base64 编码。
当浏览器弹出窗口要求输入凭证(而非 HTML 表单)时,就是在使用 Basic 认证:
如果直接用 JMeter 测试受保护的资源,服务器会返回 HTTP 401(未授权)响应,并在响应头中包含 WWW-Authenticate: Basic
,表明需要 Basic 认证:
3. 在 JMeter 中实现 Basic 认证的简单方法
3.1. 直接添加 Authorization 头
最粗暴的方式是直接在请求头中添加认证信息。使用 HTTP Header Manager
组件即可轻松实现,该组件必须作为 HTTP Request
的子组件:
在 HTTP Header Manager
的配置界面,添加如下键值对:
- 名称:
Authorization
- 值:
Basic base64编码的凭证
提示:可用在线工具(如 Base64 编码工具)生成编码字符串。注意值要以
Basic
开头(注意空格)。
配置正确后,服务器应返回 HTTP 200 状态码。
3.2. 用 JSR223 PreProcessor 动态编码凭证
如果需要动态生成编码(比如多用户测试),可以用 JSR223 PreProcessor
组件。将其放在 HTTP Header Manager
之前:
在组件中执行以下 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
中定义 username
和 password
变量:
最后在 HTTP Header Manager
中使用变量:
- 名称:
Authorization
- 值:
Basic ${base64Credentials}
这样就能轻松切换不同用户凭证,避免硬编码的坑。
4. 使用 HTTP Authorization Manager
JMeter 专门提供了 HTTP Authorization Manager
组件简化认证配置。该组件支持多域名和多认证协议,需作为 Thread Group
的子组件,且位于 HTTP Request
之前:
在配置界面输入:
- Base URL:目标域名(如
https://api.example.com
) - 用户名和密码
- 认证机制选择
BASIC
技巧:用户名和密码字段支持变量(如
${username}
),密码字段虽显示为掩码,但直接输入变量名即可生效。
配置后,HTTP Request
会自动添加 Authorization
头,无需手动处理。
5. 在 Authorization Manager 中使用多组凭证
有时需要测试不同角色的访问权限(如管理员/普通用户)。可通过 CSV 文件批量管理凭证:
创建 CSV 文件(如
credentials.csv
):username,password,role admin,admin123,ADMIN user,user123,USER
添加
CSV Data Set Config
组件(作为Thread Group
的子组件):- 文件名:
${csv_file_path}
- 变量名:
username,password,role
- 分隔符:
,
- 忽略首行:勾选(因首行是列名)
- 文件名:
在
HTTP Authorization Manager
中使用变量:- 用户名:
${username}
- 密码:
${password}
- 用户名:
关键配置:设置
Thread Group
的循环次数 ≥ CSV 行数,确保每轮测试使用不同凭证。
这样就能在测试中自动轮换不同用户凭证,高效验证权限控制逻辑。
6. 总结
本文介绍了 HTTP Basic 认证的工作原理,以及在 JMeter 中实现认证的三种方法:
- 直接硬编码
Authorization
头(简单粗暴) - 用
JSR223 PreProcessor
动态生成凭证(灵活但稍复杂) - 使用
HTTP Authorization Manager
(官方推荐,支持多凭证)
对于多用户测试场景,配合 CSV 文件和 CSV Data Set Config
可大幅提升效率。实际项目中建议优先使用 Authorization Manager
,避免重复造轮子。
示例代码已托管在 GitHub,欢迎参考。