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

如何用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条目数

  1. 添加一个JSR223 Sampler,选择Groovy语言(性能表现最优)
  2. 编写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()
  1. 运行该Sampler,确认before_count变量已被正确赋值

步骤2:执行批量API请求

  1. 用CSV Data Set Config或Directory Listing Config批量读取JSON请求文件:
    • 用CSV的话,把每个JSON内容单独存为一行(注意转义引号)
    • 用Directory Listing的话,遍历存放JSON文件的文件夹,再通过JSR223脚本读取文件内容
  2. 添加HTTP Request Sampler,配置API端点、请求方法,将读取到的JSON内容填入请求体
  3. 用线程组或循环控制器控制批量请求的执行次数,确保所有请求都发送完成

步骤3:记录API请求后的DynamoDB条目数

  1. 再添加一个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:断言验证条目数是否增加

  1. 添加一个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}")
}
  1. 运行测试时,若断言失败,JMeter会直接抛出错误,即可判定API未正确写入数据到DynamoDB

额外注意事项

  • 如果API是异步处理逻辑(请求发送后后台异步写入DB),需添加固定定时器或JSR223定时器,等待一段时间后再查询DB条目数
  • 确保AWS账号拥有dynamodb:DescribeTable(或dynamodb:Scan)的操作权限,否则会触发权限错误
  • 测试环境需尽量隔离,避免其他程序写入目标表干扰结果

内容的提问来源于stack exchange,提问作者thatsmycode

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 08:25:01