jmeter 创建多个账号,多账号登录,多个用户分别访问接口

本文描述了一个自动化测试流程,包括创建多个用户账号,设置登录线程并动态配置参数,使用CSV文件存储账号密码,正则提取接口返回的token,并将token保存到本地文件。后续查询接口时从本地文件读取token值。整个流程旨在优化和自动化测试操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、创建多组账号

1、创建多个用户,录制新增用户接口 

二、登录

1、设置登录的线程数

2、动态配置参数,值部分取3中 csv配置的变量名称

3、添加【csv数据文件设置】,csv取本地文件,本地文件格式为 【账号,密码】 格式,多个账号密码时 换行。 

4、正则提取接口返回里的字符串中包含需要的字符串

5、将所有的token导出到本地文件中 

 三、查询接口读取本地token文件

1、接口下添加【csv数据文件设置】,选择本地文件,命名【变量名称】

 2、接口请求头中动态赋值token值

至此整个流程配置完成,点击页面上方执行即可。

### 如何使用 JMeter 对带有账号密码认证的登录接口进行压力测试 对于需要通过账号密码完成登录并获取 `token` 的场景,可以按照以下方式设置 JMeter 测试计划: #### 设置 RSA 加密前置处理器 为了满足登录接口对密码进行 RSA 加密的需求,在 HTTP 请求之前需添加一个 **JSR223 前置处理器** 来执行加密逻辑。以下是具体操作步骤以及代码示例。 1. 添加 JSR223 前置处理器至登录请求节点。 2. 编写 Groovy 脚本来实现 RSA 密码加密功能[^1]。 ```groovy // 获取用户名和明文密码 def username = vars.get('username') def password = vars.get('password') // 定义公钥字符串 (通常由服务端提供) String publicKeyStr = '-----BEGIN PUBLIC KEY-----\n' + 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...\n' + '-----END PUBLIC KEY-----' // 将公钥转换为 KeySpec 并初始化 Cipher 实例 import java.security.KeyFactory; import java.security.spec.X509EncodedKeySpec; import javax.crypto.Cipher; byte[] publicKeyBytes = publicKeyStr.getBytes(); X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicKeyBytes); KeyFactory kf = KeyFactory.getInstance("RSA"); Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.ENCRYPT_MODE, kf.generatePublic(keySpec)); // 执行加密并将结果转为 Base64 字符串 byte[] encryptedPasswordBytes = cipher.doFinal(password.getBytes()); String encryptedPassword = org.apache.commons.codec.binary.Base64.encodeBase64String(encryptedPasswordBytes); vars.put('encrypted_password', encryptedPassword); // 存储加密后的密码供后续使用 log.info("Encrypted Password: ${encryptedPassword}"); ``` 此脚本会将原始密码加密,并将其存储到变量 `${encrypted_password}` 中以便在实际请求中引用。 --- #### 提取 Token 和保存至 CSV 文件 成功调用登录接口后,服务器返回的数据可能包含用于其他 API 访问的身份验证令牌 (`token`)。此时可以通过 JSON 提取器来捕获该值,并利用 BeanShell 或者 JSR223 后置处理器将其持久化到外部文件中。 1. 在登录请求之后附加一个 **JSON 提取器** 组件。 - 名称为:TokenExtractor - 表达式路径:$.data.token (假设响应结构如此) - 默认值为空字符串 "" 2. 创建一个新的 **JSR223 后置处理器** 用来把提取出来的 token 写入本地磁盘上的 CSV 文档内^。 ```groovy // 从上一步骤取得 token 数据 def extractedToken = vars.get('TokenExtractor') if (!extractedToken.isEmpty()) { def csvFilePath = '/path/to/tokens.csv' def fileContent = "${__time(YyyyMMddHHmmss)},${extractedToken}\n" new File(csvFilePath).append(fileContent) // 追加模式追加数据 log.info("Saved token to CSV: $fileContent") } else { log.warn("No valid token found!") } ``` 上述片段实现了按时间戳记录每次产生的有效 token 到指定位置的功能。 --- #### 处理跨线程组间共享 Token 当多个线程组都需要依赖同一个动态生成的 token 时,则需要用到 Inter-Thread Communication 插件支持的消息队列机制[^3]。 1. 下载对应版本的 jmeter-plugins-manager.jar 放置于 `$JMETER_HOME/lib/ext/` 目录下重启生效; 2. 使用插件管理工具搜索安装 "Inter-Thread Communication" 插件; 3. 构建生产者消费者模型传递 token 值给目标线程组消费。 --- ### 注意事项 - 确认所有涉及敏感信息的操作均符合安全策略规定,比如妥善保管私钥材料不泄露等。 - 如果遇到性能瓶颈或者资源耗尽情况调整 JVM 参数优化运行环境配置[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值