如何用JMeter测试AWS DynamoDB?验证API请求后表项增量
在JMeter中验证DynamoDB条目数变化的方案
前置准备
- 给JMeter添加AWS支持:要么通过插件管理器安装AWS DynamoDB Plugin,要么手动将AWS SDK for Java的依赖包放到JMeter的
lib目录下 - 配置AWS权限:可以在JMeter的
用户定义的变量中设置AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY;如果JMeter运行在EC2实例上,直接给实例挂载带DynamoDB操作权限的IAM角色会更安全
步骤1:记录API请求前的DynamoDB条目数
- 添加一个JSR223 Sampler,选择Groovy语言(性能表现最优)
- 编写Groovy代码调用DynamoDB的
describeTable接口获取近似条目数(适合快速验证,大表场景也不会有性能问题):
import software.amazon.awssdk.services.dynamodb.DynamoDbClient import software.amazon.awssdk.services.dynamodb.model.DescribeTableRequest // 初始化DynamoDB客户端 def dynamoClient = DynamoDbClient.create() def targetTable = "你的目标表名称" // 请求表信息 def tableReq = DescribeTableRequest.builder().tableName(targetTable).build() def tableResp = dynamoClient.describeTable(tableReq) // 将条目数存入JMeter变量 vars.put("before_count", tableResp.table().itemCount().toString()) // 关闭客户端 dynamoClient.close()
- 运行该Sampler,确认
before_count变量已被正确赋值
步骤2:执行批量API请求
- 用CSV Data Set Config或Directory Listing Config批量读取JSON请求文件:
- 用CSV的话,把每个JSON内容单独存为一行(注意转义引号)
- 用Directory Listing的话,遍历存放JSON文件的文件夹,再通过JSR223脚本读取文件内容
- 添加HTTP Request Sampler,配置API端点、请求方法,将读取到的JSON内容填入请求体
- 用线程组或循环控制器控制批量请求的执行次数,确保所有请求都发送完成
步骤3:记录API请求后的DynamoDB条目数
- 再添加一个JSR223 Sampler,代码逻辑和步骤1一致,仅将变量名改为
after_count:
import software.amazon.awssdk.services.dynamodb.DynamoDbClient import software.amazon.awssdk.services.dynamodb.model.DescribeTableRequest def dynamoClient = DynamoDbClient.create() def targetTable = "你的目标表名称" def tableReq = DescribeTableRequest.builder().tableName(targetTable).build() def tableResp = dynamoClient.describeTable(tableReq) vars.put("after_count", tableResp.table().itemCount().toString()) dynamoClient.close()
提示:如果需要精确计数(比如表数据量小或要求绝对准确),可以将
describeTable替换为scan请求并设置Select=COUNT,但大表场景下scan会有性能损耗,需谨慎使用
步骤4:断言验证条目数是否增加
- 添加一个JSR223 Assertion,编写代码对比前后条目数:
def before = Integer.parseInt(vars.get("before_count")) def after = Integer.parseInt(vars.get("after_count")) if (after <= before) { AssertionResult.setFailure(true) AssertionResult.setFailureMessage("DynamoDB条目数未增加!请求前:${before},请求后:${after}") }
- 运行测试时,若断言失败,JMeter会直接抛出错误,即可判定API未正确写入数据到DynamoDB
额外注意事项
- 如果API是异步处理逻辑(请求发送后后台异步写入DB),需添加固定定时器或JSR223定时器,等待一段时间后再查询DB条目数
- 确保AWS账号拥有
dynamodb:DescribeTable(或dynamodb:Scan)的操作权限,否则会触发权限错误 - 测试环境需尽量隔离,避免其他程序写入目标表干扰结果
内容的提问来源于stack exchange,提问作者thatsmycode
相关产品推荐
相关产品推荐

