如何编写包含AWS SDK调用的JMeter脚本
在JMeter中通过AWS SDK获取授权参数与令牌
前提确认
确保aws-java-sdk-core、aws-java-sdk-sts等核心依赖包已放置在JMeter的lib/或lib/ext/目录下,重启JMeter生效。
实现步骤
1. 添加JSR223 Sampler
在测试计划中添加JSR223 Sampler,选择Groovy作为脚本语言(Groovy在JMeter中性能最优,且对Java SDK兼容性最好)。
2. 编写Groovy脚本获取临时授权凭证
以下是两种常见场景的代码示例:
场景1:获取基础临时会话令牌(GetSessionToken)
import com.amazonaws.auth.DefaultAWSCredentialsProviderChain import com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClientBuilder import com.amazonaws.services.securitytoken.model.GetSessionTokenRequest import com.amazonaws.services.securitytoken.model.GetSessionTokenResult // 初始化STS客户端,自动读取环境变量、~/.aws/credentials或IAM角色凭证 def stsClient = AWSSecurityTokenServiceClientBuilder.standard() .withCredentials(DefaultAWSCredentialsProviderChain.getInstance()) .withRegion("us-east-1") // 替换为你的AWS区域 .build() // 发起临时令牌请求 def request = new GetSessionTokenRequest() def result = stsClient.getSessionToken(request) // 提取授权参数并存储到JMeter变量 def credentials = result.getCredentials() vars.put("AWS_ACCESS_KEY", credentials.getAccessKeyId()) vars.put("AWS_SECRET_KEY", credentials.getSecretAccessKey()) vars.put("AWS_SESSION_TOKEN", credentials.getSessionToken()) vars.put("AWS_TOKEN_EXPIRE", credentials.getExpiration().toString()) // 日志输出验证 log.info("成功获取临时凭证:AccessKey=${credentials.getAccessKeyId()}")
场景2:扮演IAM角色获取授权凭证(AssumeRole)
如果需要通过IAM角色获取跨账号/权限隔离的授权参数,使用以下代码:
import com.amazonaws.auth.DefaultAWSCredentialsProviderChain import com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClientBuilder import com.amazonaws.services.securitytoken.model.AssumeRoleRequest def stsClient = AWSSecurityTokenServiceClientBuilder.standard() .withCredentials(DefaultAWSCredentialsProviderChain.getInstance()) .withRegion("us-east-1") .build() // 配置角色信息 def targetRoleArn = "arn:aws:iam::123456789012:role/YourTargetRole" // 替换为目标角色ARN def sessionName = "JMeter-Role-Session-" + System.currentTimeMillis() // 发起角色扮演请求 def assumeRoleRequest = new AssumeRoleRequest() .withRoleArn(targetRoleArn) .withRoleSessionName(sessionName) def roleResult = stsClient.assumeRole(assumeRoleRequest) def roleCredentials = roleResult.getCredentials() // 存储角色授权参数到JMeter变量 vars.put("ROLE_ACCESS_KEY", roleCredentials.getAccessKeyId()) vars.put("ROLE_SECRET_KEY", roleCredentials.getSecretAccessKey()) vars.put("ROLE_SESSION_TOKEN", roleCredentials.getSessionToken())
3. 验证结果
- 添加View Results Tree监听器,查看Sampler的日志输出,确认授权参数是否正常返回。
- 添加Debug Sampler,可以直接查看JMeter变量中存储的所有授权参数值。
内容的提问来源于stack exchange,提问作者Everest
相关产品推荐
相关产品推荐

