You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写包含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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 07:03:24