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

如何将Karate Framework自动化脚本与DynamoDB连接以验证数据?

用Karate Framework连接DynamoDB验证数据行

1. 添加必要依赖

如果使用Maven,在pom.xml中添加AWS DynamoDB SDK v2的依赖(轻量化且推荐):

<dependency>
    <groupId>software.amazon.awssdk</groupId>
    <artifactId>dynamodb</artifactId>
    <version>2.25.0</version> <!-- 替换为最新稳定版本 -->
</dependency>
<dependency>
    <groupId>software.amazon.awssdk</groupId>
    <artifactId>regions</artifactId>
    <version>2.25.0</version>
</dependency>

2. 配置AWS凭证

确保测试环境能合法获取AWS权限,推荐方式:

  • 设置环境变量 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY
  • 在测试机器上配置 ~/.aws/credentials 文件
  • 若测试环境为EC2/ECS,直接绑定IAM角色自动获取凭证

3. 编写Karate测试脚本

方式一:直接调用Java客户端查询

创建verifyUserRegistration.feature文件:

Feature: 验证DynamoDB中用户注册状态

  Scenario: 检查Users表中的Nick是否存在
    * def DynamoDbClient = Java.type('software.amazon.awssdk.services.dynamodb.DynamoDbClient')
    * def Region = Java.type('software.amazon.awssdk.regions.Region')
    * def client = DynamoDbClient.builder().region(Region.US_EAST_1).build() // 替换为你的DynamoDB区域

    * def GetItemRequest = Java.type('software.amazon.awssdk.services.dynamodb.model.GetItemRequest')
    * def request = GetItemRequest.builder()
        .tableName('Users')
        .key(Map.of('username', Map.of('S', 'Nick'))) // 假设表的主键为username(字符串类型)
        .build()

    * def response = client.getItem(request)
    * def userExists = !response.item().isEmpty()

    Then assert userExists == true
    And print '用户Nick已注册'

方式二:封装Java工具类(复用性更强)

编写一个Java工具类封装DynamoDB操作:

import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
import software.amazon.awssdk.services.dynamodb.model.GetItemRequest;
import software.amazon.awssdk.regions.Region;
import java.util.Map;

public class DynamoDBUtils {
    private static final DynamoDbClient client = DynamoDbClient.builder()
            .region(Region.US_EAST_1)
            .build();

    public static boolean userExists(String tableName, String username) {
        GetItemRequest request = GetItemRequest.builder()
                .tableName(tableName)
                .key(Map.of("username", Map.of("S", username)))
                .build();
        return !client.getItem(request).item().isEmpty();
    }
}

在Karate脚本中调用工具类:

Feature: 验证用户注册状态

  Scenario: 检查Nick是否在Users表中
    * def DynamoDBUtils = Java.type('com.yourpackage.DynamoDBUtils') // 替换为工具类的实际包路径
    * def isRegistered = DynamoDBUtils.userExists('Users', 'Nick')
    Then assert isRegistered == true

注意事项

  • 确保查询的键与DynamoDB表的主键定义匹配(复合主键需同时提供分区键和排序键)
  • 测试账号需拥有dynamodb:GetItem权限
  • 本地测试可使用LocalStack模拟DynamoDB,此时客户端需配置端点:
    DynamoDbClient.builder()
        .endpointOverride(URI.create("http://localhost:4566"))
        .region(Region.US_EAST_1)
        .build()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 15:02:38