View a markdown version of this page

使用亚马逊 Bedrock 自动生成 Lambda 测试事件 AgentCore - AWS 规范指引

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用亚马逊 Bedrock 自动生成 Lambda 测试事件 AgentCore

亚马逊网络服务的 Ishita Gupta 和 Kriti Gupta

Summary

这种模式提供了一 AI-powered 种使用 Amazon Bedrock 的生成式 AI 功能自动为 AWS Lambda 函数生成全面测试用例的方法。该模式实现了部署在 Amazon Bedrock 上的三代理架构(分析器、生成器和验证器), AgentCore 该架构分析实际的 Lambda 函数代码以提取 input/output 模式,并使用真实数据生成正、负和边缘测试场景。

该架构建立了一个智能工作流程,分析器代理使用 Amazon Bedrock 获取和分析 Lambda 代码,生成器代理根据学习的模式创建测试用例,验证器代理通过重复数据删除和排名确保质量。亚马逊 DynamoDB-based 内存存储支持从用户反馈中持续学习,随着时间的推移提高测试生成的准确性。亚马逊 Cognito 通过基于 JSON 网络令牌 (JWT) 的 API 授权提供安全的用户身份验证。Amazon Bedrock Guardrails 为所有亚马逊 Bedrock API 调用提供即时攻击筛选、敏感信息编辑和内容安全执法功能。关键功能:

  • Multi-Language 支持:Python、Java JavaScript/TypeScript、C# 和 Ruby Lambda 函数

  • 智能代码分块:自动将大型代码库拆分为可管理的区块以供分析

  • 并行处理:并行 Amazon Bedrock API 要求更快地生成测试(5 个并行工作程序用于代码分析,并行生成每区块测试)

  • Target-Specific 分析:重点关注 Lambda 代码中的特定函数、类或文件

  • 模式学习:具有特定目标和全局模式存储的亚马逊 DynamoDB-based 内存存储

  • 避免拒绝:从被拒绝的测试用例中学习,避免常见错误

  • 延续机制:通过自动延续处理不完整的亚马逊 Bedrock 响应。

  • 忽略模式:从分析中排除测试文件、依赖关系和非代码文件。

  • 无服务器部署:通过身份验证在 Amazon Bedrock AgentCore 上运行 Cognito-based

  • 安全护栏:Amazon Bedrock Guardrails 用于即时攻击筛选、个人身份信息 (PII) 编辑、内容安全以及拒绝屏蔽所有 AI 通话的话题

    这种模式非常适合希望加速 Lambda 测试、提高测试覆盖率并通过 AI-assisted 测试生成保持高代码质量的开发团队和组织。这种模式使用 AWS 托管服务来简化测试创建,通过学习提高质量,并进行扩展以满足不断变化的测试需求。

先决条件和限制

先决条件

要成功实现此模式,请确保满足以下条件:

  • 活跃的 AWS 账户 -有权访问 Lambda 函数、调用亚马逊基岩模型、创建 DynamoDB 表、管理 Cognito 用户池和部署亚马逊基岩代理的 AWS 账户。 AgentCore

  • 亚马逊 Bedrock 模型访问权限 -您的 AWS 区域启用了 Anthropic Claude Sonnet 4 (us.anthropic.claude-sonnet-4-6)。有关设置说明,请参阅 Amazon Bedrock 文档中的模型访问权限。

  • 开发环境包括:

    - Python 3.11 或更高版本

    - AWS CLI 已安装和配置

    - 用于克隆存储库的 Git

  • AWS Lambda 函数 -至少部署了一个带有可访问源代码以供分析的 Lambda 函数。该函数必须在部署包中包含源文件(.py、.js、.js、.java、.cs、.rb),而不仅仅是编译后的字节码。

  • 支持的 Lambda 运行时:

    -Python 3.x(所有版本)

    - Node.js (JavaScript/TypeScript)

    -Java 8、11、17、21(需要部署包中包含.java 源文件)

    -.NET Core/.NET 6+ (C#)(需要部署包中的 .cs 源文件)

    -Ruby 2.7、3.2

限制

  • 这需要在美国东部一区访问亚马逊 Bedrock 模型才能获得 Claude Sonnet 4.6。AWS Lambda 函数可以位于任何区域。

  • Amazon DynamoDB 中的模式数据将在 90 天后过期(可通过生存时间 (TTL) 进行配置),以保持相关性并控制成本。

  • Java 和 C# Lambda 函数必须在部署包中包含源文件(.java、.cs)。 Compiled-only 无法分析软件包(.class,.dll)。

  • 系统实现了内存中每个用户的速率限制(每 60 秒 5 个请求)。对于具有多个 AgentCore 实例的分布式部署,为了保持一致性,需要将速率限制移至 DynamoDB 或 Redis。

  • 某些 AWS 服务并非在所有 AWS 区域都可用。有关区域可用性,请参阅按区域划分的 AWS 服务。有关特定端点,请参阅服务端点和配额页面,然后选择相应服务的链接。

产品版本

架构

目标架构

下图显示了该模式的架构和工作流程:

在此工作流程中:

  1. 用户提供输入:开发人员与本地运行的 Streamlit UI (app.py) 进行交互,提供 Lambda 函数名称、用于生成测试的可选自定义指令、目标筛选器以关注特定 functions/classes /文件,忽略模式以排除测试文件或依赖关系。

  2. Cognito 身份验证:应用程序使用 Cognito 对请求进行身份验证并将 JWT(ID/Access 令牌)返回给 Streamlit。

  3. AgentCore API 调用:Streamlit 使用不记名令牌 + 负载(函数名称、过滤器、指令、忽略模式)调用 AgentCore API。

  4. JWT 验证: AgentCore API 使用 Cognito 令牌签名验证 JWT。

  5. 请求路由:AgentCore API 将请求路由到 Lambda 测试生成器工作流程(AgentCore 运行时)。

  6. 代码分析请求:分析器代理发起请求以获取目标 Lambda 函数的代码和元数据。

  7. 用于 Lambda 访问的 AWS 身份验证:Boto3 使用 AgentCore 执行角色向 AWS 进行身份验证,请求读取访问权限。

  8. AWS Lambda 代码检索和处理:IAM 角色授权访问 Lambda 函数代码并将其作为 ZIP 文件获取,提取源文件,过滤掉依赖关系(node_modules、venv 等)和非代码文件,应用用户定义的忽略模式,并将代码分块成可管理的部分。

  9. 亚马逊基岩身份验证:Boto3 亚马逊 Bedrock 客户端使用 AWS IAM 进行身份验证以获取亚马逊 Bedrock 访问权限,请求调用模型权限以使用 Anthropic Claude Sonnet 4.6。

  10. AI-Powered 代码分析:IAM 角色使用 Anthropic Claude Sonnet 4(us.anthropic.claude-sonnet-4-6)授权代码块并将其发送到亚马逊 Bedrock(us-east-1),应用亚马逊基岩护栏进行即时攻击过滤和内容安全。Amazon Bedrock 执行 Regex + LLM 增强分析,从代码中提取实际的输入模式(例如,事件 ['正文']、标头 ['授权'])、输出模式(例如 StatusCode、响应正文结构)、依赖关系、错误处理模式和边缘案例。

  11. 分析结果已打包:Analyzer Agent 将分析结果打包成一个包含代码块、输入模式、输出模式、依赖关系、错误模式和元数据的 AnalysisResult 对象,然后将其传递给 Generator 代理。

  12. 测试生成过程开始:Generator Agent 接收分析结果并发起生成测试用例的请求,首先查询 DynamoDB 内存存储以获取历史模式以供学习。

  13. 用于内存访问的亚马逊 DynamoDB 身份验证:Boto 3 DynamoDB 客户端向 AWS IAM 进行身份验证,以获取读取访问权限,以检索存储的模式。

  14. 历史模式从数据库中检索:IAM 角色授权和查询 DynamoDB 内存存储表(lambda-testcase-memory),以获取特定 Lambda 函数先前接受的模式和拒绝的模式(因拒绝原因而失败的测试)。

  15. 用于生成测试的亚马逊基岩身份验证:Boto3 亚马逊基岩客户端再次使用 AWS IAM 进行身份验证,以获得亚马逊 Bedrock 访问权限以生成测试用例。

  16. AI 测试用例生成:IAM 角色授权分析结果并将结合内存模式的分析结果发送到亚马逊 Bedrock。Amazon Bedrock 根据实际代码模式生成带有真实输入事件的测试用例架构,创建阳性测试(35%)、负面测试(35%)和边缘案例(30%)。为了提高效率,逐块并行生成,应用从内存中学到的模式,避免被拒绝的模式,并在需要时生成大代码库。所有 Bedrock converse () 调用都包括用于即时攻击过滤、个人身份信息编辑和拒绝话题强制执行的 GuardrailConfig。

  17. 测试验证开始:Generator Agent 将生成的候选测试用例传递给验证器代理,进行质量控制、重复数据删除和最终选择。

  18. 验证过程已配置:Validator Agent 接收考生并启动验证流程,请求访问 DynamoDB 内存存储进行评分和验证。

  19. 用于验证的 DynamoDB 身份验证:B oto3 DynamoDB 客户端使用 AWS IAM 进行身份验证,以获取对查询内存模式的读取权限,以进行验证评分。

  20. 评估测试质量:IAM 角色授权并使用 DynamoDB 内存存储根据先前的模式成功率、功能覆盖率和代码复杂性对测试用例进行评分。Validator 执行结构验证,使用模式哈希进行重复数据删除,自信地对处理函数和错误处理进行质量评分,进行多样性选择以涵盖不同的区块和测试类型,并选择前 N 个质量最高、最多样化的测试用例。

  21. 最终测试用例返回至 AgentCore:Validator Agent 将最终经过验证的测试用例以及元数据(置信度分数、描述、输入事件、类别)返回给主协调器,由主协调器对其进行格式化并将其返回给 Amazon Bedrock API AgentCore

  22. 结果传送到 UI: AgentCore API 将生成的测试返回到 Streamlit 用户界面,以显示分析摘要、生成元数据和测试用例详细信息。

  23. 用户评论并提供反馈:开发人员审阅 Streamlit UI 中显示的测试用例,评估每项测试的质量和相关性,接受良好的测试用例或拒绝带有特定拒绝原因(missing_auth_headers、wrong_status_code、不真实的数据、missing_required_fields、incorrect_event_source 等)和解释拒绝情况的可选自定义注释,然后提交反馈。

  24. 反馈提交给系统:Streamlit 用户界面将收集的反馈(accepted/rejected 状态、拒绝原因、自定义备注)发送到 AgentCore API(save_feedback)。

  25. AgentCore 路由反馈: AgentCore API 调用验证器代理,该代理包含在 DynamoDB 中存储反馈的逻辑。

  26. 反馈存储过程开始:验证器代理启动存储反馈的过程。

  27. DynamoDB 写入权限已通过身份验证:Boto3 DynamoDB 客户端使用 AWS IAM(AgentCore 执行角色)进行身份验证,以获得存储反馈模式的写入访问权限。

  28. 存储学习模式:IAM 角色授权用户反馈并将其存储在 DynamoDB 内存存储表中。每个模式都使用复合分区键(function_name #target_function 或 function_name #GLOBAL)、复合排序键(FEEDBACK# accepted/rejected #PATTERN #hash)、用于重复数据删除的模式哈希、测试类型、输入模式结构、反馈状态、拒绝原因(如果被拒绝)、自定义备注、使用次数、成功率、时间戳以及 90 天自动清理的 TTL 进行存储。这些存储的数据使系统能够从用户反馈中学习并改进未来的测试生成。

自动化和扩展

此模式使用 AWS 托管服务自动扩展。Amazon Bedrock 按需处理 AI 推理,具有 20 万个代币上下文窗口,每次调用 6.4 万个代币输出,而 Amazon DynamoDB 使用按需计费,可自动根据流量模式进行调整。该系统使用并行处理来提高速度,分析器代理同时进行 5 次基岩调用来分析代码块(max_workers=5),而生成器代理ThreadPoolExecutor 与 5 个并行工作程序并行处理区块。延续机制通过自动重试请求来处理不完整的响应。速率限制(每位用户每 60 秒 5 个请求)可防止因过多 Bedrock API 调用而滥用成本。

成本优化包括删除超过 90 天的模式的 TTL-based 清理、使用 begins_with () 进行即时查找而无需进行表扫描的复合键查询,以及将DynamoDB写入操作减少大约 90% 的 BatchWriteItem 操作。性能取决于函数大小,小型函数(低于 10 个文件)在 30—60 秒内生成 10 个测试用例,中型函数(10—50 个文件)需要 1—3 分钟,大型函数(50 多个文件)需要 3—5 分钟,尽管使用目标筛选器专注于特定的代码段可将时间缩短 50-70%。

工具

AWS 服务

  • 亚马逊 Bedrock — 通过 Anthropic Claude Sonnet 4 提供生成式 AI 功能,用于代码分析、测试生成、验证和拒绝汇总。始终使用 us-east-1 区域进行模型访问。

  • Amazon Bedrock AgentCore — 提供无服务器代理运行时间,用于部署和托管具有自动扩展、 OAuth-based 授权和 CloudWatch 可观察性的测试生成后端。

  • Amazon Bedrock Guardrails — 对所有 Bedrock API 调用提供 ML-based 安全筛选,包括即时攻击检测(高强度)、内容过滤、个人身份信息匿名化(电子邮件、电话、姓名)、封锁 AWS 访问 keys/private keys/JWT 令牌和拒绝主题执行(漏洞代码生成、原始源代码输出)。通过... CloudFormation 部署

  • AWS CloudFormation — 自动完成基础设施配置,包括 DynamoDB 表、Cognito 用户池、带版本控制的亚马逊基岩护栏以及的 IAM 执行角色。 AgentCore

  • Amazon Cognito — 通过基于电子邮件的注册、JWT 令牌发行和后端安全 API 授权来提供用户身份验证。 AgentCore

  • Amazon DynamoDB — 存储已接受和拒绝的测试模式,并提供使用情况统计信息,以便持续学习和改进。使用复合键(function_target、pattern_sk)进行零扫描查询和特定目标模式存储。

  • AWS Lambda — 用于分析的函数代码来源, GetFunction API 检索代码和配置。该工具支持 Python Node.js、Java、.NET 和 Ruby 运行时。

其他工具

  • Python 3.11+ — 用于应用程序和代理编排的运行时环境。

  • Streamlit — 用于身份验证、测试生成、反馈收集和系统状态监控的 Web-based 用户界面。

  • Boto3 — 适用于 Python 的 AWS 开发工具包,用于与 Lambda、亚马逊 Bedrock、DynamoDB 和 Cognito 服务进行交互。

代码存储库

此模式的代码可在 Github- Lambda 测试事件生成器中找到。

最佳实践

此模式实现了以下最佳实践:

  • 对 AWS Lambda(只读)、亚马逊 Bedrock(调用)、亚马逊 DynamoDB()和亚马逊 Cognito(身份验证query/write)访问使用最低权限 IAM 策略

  • 实施具有全局回退功能的特定目标模式学习,以提高测试准确性。

  • 启用 DynamoDB TTL 以自动清理旧模式(90 天),以控制存储成本。

  • 使用带有复合键(function_target、pattern_sk)的零扫描查询来快速检索模式。

  • 应用忽略模式将测试文件、依赖关系和非代码文件排除在分析之外。

  • 通过抽象语法树 (AST) 解析 (Python) 和正则表达式模式(Java、C#、JS、Ruby)使用多语言代码分块。

  • 使用实际值(而不仅仅是结构)存储模式,以实现真正的重复数据消除。

  • 在 Amazon Bedrock 上部署后端 AgentCore ,实现无服务器扩展和托管基础设施。

  • 通过对每个 API 请求进行 JWT 令牌验证,通过 Amazon Cognito 对用户进行身份验证。

  • 对所有 converse () 调用应用亚马逊 Bedrock Guardrails,以进行即时攻击过滤、个人身份信息编辑、敏感数据封锁(AWS 密钥、私钥、JWT)和拒绝主题执行。

  • 在返回给用户之前对分析结果进行清理——所有原始源代码块都将从响应中移除,从而确保 Lambda 源代码永远不会离开运行时 AgentCore 边界。

  • 使用正则表达式模式和长度限制(函数名称最多 170 个字符,自定义指令最多 2000 个字符,最多 50 个忽略模式)验证所有 API 输入,以防止注入和滥用。

  • 实施每用户速率限制(每 60 秒 5 个请求),以防止因过多 Bedrock API 调用而滥用成本。

  • 在返回给用户之前对错误消息进行清理-内部文件路径、AWS SDK 详细信息和基础设施信息永远不会在错误响应中暴露。

考虑以下其他最佳实践:

  • 在拒绝测试用例时提供具体的反馈理由,以提高学习准确性。

  • 对同一功能进行迭代(2-3 次)生成测试,以允许系统学习和改进。

  • 当您需要特定的测试场景或数据格式时,提供自定义说明。

  • 启用 IAM 访问分析器来监控资源权限并识别意外访问。

  • 在分析大型代码库之前,先从小型 Lambda 函数开始了解系统。

  • 定期查看 IAM 政策并删除未使用的权限。

  • 使用强密码策略并启用 Cognito AdvancedSecurityMode 进行威胁检测。

操作说明

Task说明所需技能

克隆存储库。

将 GitHub 存储库克隆到本地系统并导航到项目目录:

git clone https://github.com/aws-samples/sample-lambda-test-event-generator.git cd sample-lambda-test-event-generator

该存储库包含 Python 应用程序、 CloudFormation 模板和配置文件。

应用程序开发人员

配置 AWS 证书。

配置您的 AWS 证书,以使 AWS CLI 能够与您的 AWS 账户进行交互,并使应用程序能够访问您要测试的 Lambda 函数。

您可以使用 AWS CLI 配置命令执行此操作:

aws configure

当系统提示时,请提供以下信息:

  • AWS 访问密钥 ID:您的 AWS 访问密钥

  • AWS 私有访问密钥:您的 AWS 私有访问密钥

  • 默认区域名称:您要部署资源的 AWS 区域(例如,us-east-1

  • 默认输出格式:首选输出格式(例如,json

应用程序开发人员
Task说明所需技能

使用部署基础架构 CloudFormation。

  1. 使用提供的模板部署完整的后端基础设施(DynamoDB、Cognito、IAM 角色)。 CloudFormation 在 CLI 中运行以下命令:

    aws cloudformation create-stack \ --stack-name lambda-test-generator-infra \ --template-body file://cloudformation/complete-infrastructure.yaml \ --capabilities CAPABILITY_NAMED_IAM \ --region us-east-1
  2. 等待堆栈部署完成:

    aws cloudformation wait stack-create-complete \ --stack-name lambda-test-generator-infra \ --region us-east-1
  3. 检索所有输出:

    aws cloudformation describe-stacks \ --stack-name lambda-test-generator-infra \ --query 'Stacks[0].Outputs' \ --output table

创建了什么:

  • 启用 TTL、时间点恢复和服务器端加密的 DynamoDB 表。

  • Cognito 用户池,支持电子邮件身份验证、 AdvancedSecurityMode 强制执行、可选 MFA (TOTP) 和仅限管理员的用户创建。

  • Amazon Bedrock Guardrail 具有即时攻击筛选、个人身份信息编辑、内容筛选和拒绝的话题屏蔽功能。

  • AgentCore 具有最低权限策略(包括基石:权限)的 IAM 执行角色。ApplyGuardrail

注意

堆栈创建所有必需的资源。在继续下一步之前,请确保 CloudFormation 模板成功完成。

应用程序开发人员

导出配置变量。

将 CloudFormation 堆栈输出中的所有值导出为环境变量:

export AGENTCORE_ROLE_ARN=$(aws cloudformation describe-stacks \ --stack-name lambda-test-generator-infra \ --query 'Stacks[0].Outputs[?OutputKey==`AgentCoreExecutionRoleArn`].OutputValue' \ --output text) export DISCOVERY_URL=$(aws cloudformation describe-stacks \ --stack-name lambda-test-generator-infra \ --query 'Stacks[0].Outputs[?OutputKey==`DiscoveryUrl`].OutputValue' \ --output text) export CLIENT_ID=$(aws cloudformation describe-stacks \ --stack-name lambda-test-generator-infra \ --query 'Stacks[0].Outputs[?OutputKey==`ClientId`].OutputValue' \ --output text) export DYNAMODB_TABLE=$(aws cloudformation describe-stacks \ --stack-name lambda-test-generator-infra \ --query 'Stacks[0].Outputs[?OutputKey==`DynamoDBTableName`].OutputValue' \ --output text) export COGNITO_POOL_ID=$(aws cloudformation describe-stacks \ --stack-name lambda-test-generator-infra \ --query 'Stacks[0].Outputs[?OutputKey==`UserPoolId`].OutputValue' \ --output text) export BEDROCK_GUARDRAIL_ID=$(aws cloudformation describe-stacks \ --stack-name lambda-test-generator-infra \ --query 'Stacks[0].Outputs[?OutputKey==`BedrockGuardrailId`].OutputValue' \ --output text) export BEDROCK_GUARDRAIL_VERSION=$(aws cloudformation describe-stacks \ --stack-name lambda-test-generator-infra \ --query 'Stacks[0].Outputs[?OutputKey==`BedrockGuardrailVersion`].OutputValue' \ --output text)

这些变量将在后续步骤中用于 AgentCore 配置和创建 .env 文件。

AWS 管理员
Task说明所需技能

创建虚拟环境。

  1. 创建并激活 Python 虚拟环境以隔离项目依赖关系:

    python3 -m venv venv source venv/bin/activate
  2. 从需求文件中安装所需的 Python 包:

    pip install -r requirements.txt

    这将安装所有必要的库,包括用于 AWS 开发工具包的 boto3、用于环境配置的 python-dotenv、用于集成的 bedrock-agentcore-runtime 以及用于用户界面的 Streamlit。 AgentCore

    注意

    每次打开新的终端会话来运行应用程序时,都必须激活(使用source venv/bin/activate)虚拟环境。

应用程序开发人员

配置和部署 AgentCore。

  • 配置代 AgentCore 理:

    agentcore configure \ --entrypoint main.py \ --name lambda_test_generator \ --requirements-file requirements.txt \ --region us-east-1 \ --execution-role $AGENTCORE_ROLE_ARN
  • 出现提示时:

    1. 部署类型:1(直接代码部署-不需要 Docker)

    2. Python 版本:2(PYTHON_3_11 或选择您的特定的 Python 版本)

    3. S3 存储桶:按 Enter(自动创建)

    4. OAuth 授权者:是

    5. 发现 URL:粘贴 $DISCOVERY_URL 值

    6. 客户端 ID:粘贴 $CLIENT_ID 值

    7. 听众:按 Enter(留空)

    8. 范围:按 Enter(留空)

    9. 自定义声明:按 Enter(留空)

    10. 请求标头:是

    11. 标题:授权

    12. 内存:s(跳过-使用 DynamoDB)

  • 部署代理:

    agentcore deploy \ --env DYNAMODB_TABLE_NAME=$DYNAMODB_TABLE \ --env AWS_REGION=us-east-1 \ --env BEDROCK_GUARDRAIL_ID=$BEDROCK_GUARDRAIL_ID \ --env BEDROCK_GUARDRAIL_VERSION=$BEDROCK_GUARDRAIL_VERSION
  • 获取 AgentCore 运行时 ID 和端点:

    RUNTIME_ID=$(agentcore status | grep "Agent ARN:" | sed 's/.*runtime\///' | sed 's/[│ ].*//') AGENTCORE_ENDPOINT="https://bedrock-agentcore-runtime.us-east-1.amazonaws.com/agents/${RUNTIME_ID}/endpoints/DEFAULT"
应用程序开发人员

为本地开发创建 .env 文件。

在项目根目录中创建包含所有配置值的 .env 文件:

cat > .env << EOF AWS_REGION=us-east-1 DYNAMODB_TABLE_NAME=$DYNAMODB_TABLE COGNITO_POOL_ID=$COGNITO_POOL_ID COGNITO_CLIENT_ID=$CLIENT_ID COGNITO_REGION=us-east-1 AGENTCORE_ENDPOINT=$AGENTCORE_ENDPOINT BEDROCK_GUARDRAIL_ID=$BEDROCK_GUARDRAIL_ID BEDROCK_GUARDRAIL_VERSION=$BEDROCK_GUARDRAIL_VERSION EOF

测试与 AWS 服务的连接:

aws dynamodb describe-table --table-name $DYNAMODB_TABLE aws bedrock list-foundation-models --region us-east-1

这两个命令都应返回成功的响应。如果您遇到权限错误,请验证 IAM 策略的配置是否正确。

应用程序开发人员
Task说明所需技能

创建新的 Cognito 用户。

出于安全考虑,Cognito 用户池配置为仅限管理员创建的用户,因此用户无法自行注册。使用从 CloudFormation 堆栈输出中导出的 Cognito 池 ID 和客户端 ID 通过 AWS CLI 创建用户。创建新用户(user@example.com替换为您的电子邮件):

aws cognito-idp admin-create-user \ --user-pool-id $COGNITO_POOL_ID \ --username user@example.com \ --user-attributes Name=email,Value=user@example.com Name=email_verified,Value=true \ --temporary-password '[PASSWORD]!' \ --region us-east-1

设置永久密码(至少 8 个字符,必须包含大写、小写和数字):

aws cognito-idp admin-set-user-password \ --user-pool-id $COGNITO_POOL_ID \ --username user@example.com \ --password '[PASSWORD]!' \ --permanent \ --region us-east-1

在下一步中,使用这些凭据通过 Streamlit 用户界面登录。

应用程序开发人员
Task说明所需技能

启动 Streamlit 用户界面。

启动应用程序:

streamlit run app.py

用户界面将在您的默认浏览器中打开,网址为 http://localhost:8501

使用在上一步中创建的凭据登录

应用程序开发人员

配置生成选项

在 UI 中,配置以下选项:

  1. Lambda 函数名称或 ARN:输入目标 Lambda 函数标识符

  2. 目标过滤器(可选):指定要关注的函数、类或文件(例如、validate_userUserServiceauth.py

  3. 忽略模式(可选):添加要排除的文件或文件夹模式,每行一个:

    • tests/-忽略测试目录

    • *.test.js-忽略测试文件

    • mock_data/-忽略模拟数据

  4. 自定义说明(可选):添加特定的测试要求

应用程序开发人员

生成测试用例。

单击 “生成测试用例” 按钮。系统将:

  1. AgentCore 使用 Cognito JWT 令牌进行身份验证。

  2. 从 AWS 获取 Lambda 代码。

  3. 应用忽略模式排除不需要的文件。

  4. 使用特定语言的策略对代码进行分块。

  5. 如果已指定,则应用目标过滤器。

  6. 使用亚马逊 Bedrock 分析代码。

  7. 向 DynamoDB 查询学习模式。

  8. 生成测试用例。

  9. 验证测试用例并对其进行排名。

应用程序开发人员

查看生成的测试。

查看每个生成的测试用例,其中包括:

  • 类型:正值(有效输入)、负值(无效输入)或边缘(边界条件)

  • 描述:测试验证了什么

  • 测试数据:实际的测试事件有效载荷

DevOps 工程师,应用程序开发人员

提供反馈。

对于每个测试用例,提供反馈:

要接受测试用例,请执行以下操作:

  • 点击 “接受” 按钮

要拒绝测试用例,请执行以下操作:

  1. 点击 “拒绝” 按钮

  2. 从下拉列表中选择拒绝原因或添加自定义原因

  3. 点击 “提交拒绝” 按钮

测试工程师

将反馈保存到存储器中。

查看所有测试用例后:

  1. 单击 “将所有反馈保存到存储器” 按钮

  2. 系统确认所有被驳回的案例都已提交理由

  3. 反馈将发送到 AgentCore API,后者会路由到验证器代理。

  4. 反馈使用模式哈希批量存储到 DynamoDB,用于重复数据消除。

  5. 查看显示 accepted/rejected 计数的反馈摘要

测试工程师

反复进行改进。

为同一功能再生成 2-3 次测试以提高质量:

  • 系统从 DynamoDB 检索学习到的模式

  • 根据您的反馈,每次迭代的质量都会提高

  • 使用目标过滤器对特定组件进行集中测试

  • 使用忽略模式排除无关的代码并提高生成质量

注意

反复使用学习系统会变得更加有效。每个反馈周期都有助于 AI 了解您的测试偏好,并为您的 Lambda 函数生成更相关的测试用例。

应用程序开发人员
Task说明所需技能

直接调用 AgentCore API。

要实现自动化和集成,请使用带有 Cognito 身份验证的 API 调用直接调用 AgentCore 后端。

获取 Cognito 代币:

TOKEN=$(agentcore identity get-cognito-inbound-token)

调用测试生成:

agentcore invoke --bearer-token "$TOKEN" '{"action": "generate_test_cases", "function_name": "your-lambda-function", "num_test_cases": 10,"custom_instructions": "Focus on authentication scenarios", "target_filter": "validate_user","ignore_patterns": ["tests/", "*.test.js"] }'

或者使用 curl:

curl -X POST "$AGENTCORE_ENDPOINT" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "action": "generate_test_cases", "function_name": "your-lambda-function", "num_test_cases": 10}'
应用程序开发人员
Task说明所需技能

监控 DynamoDB 模式并跟踪成本。

  1. 查询 DynamoDB 表以查看可接受的模式并了解系统学到了什么:

    aws dynamodb query \ --table-name $DYNAMODB_TABLE \ --key-condition-expression "function_target = :ft AND begins_with(pattern_sk, :prefix)" \ --expression-attribute-values '{":ft":{"S":"my-function#GLOBAL"},":prefix":{"S":"FEEDBACK#accepted"}}'

    my-function替换为您的实际 Lambda 函数名称以查看特定于该函数的模式。

  2. 跟踪资源消耗以优化成本:

    • AWS 成本管理器:监控 Bedrock、DynamoDB 和 Lambda 服务的总体支出

    • 亚马逊 Bedrock:在 Bedrock 控制台中查看代币使用量和 API 调用指标

    • DynamoDB:检查请求指标、已用容量和存储使用情况。

    • AgentCore: 监控代理运行时指标和调用次数 CloudWatch

  3. 使用 CloudWatch 日志诊断问题和监控系统行为:

    • AgentCore 日志:

      aws logs tail /aws/bedrock-agentcore/runtimes/lambda_test_generator --follow
    • 应用程序错误:查看应用程序级错误和异常

    • 基石 API 响应:分析 AI 模型响应和代币消耗

    • DynamoDB 操作:监控 read/write 模式和限制事件

注意

定期监控有助于识别成本优化机会,并确保系统继续有效地学习。您的 DynamoDB 表上的 TTL 配置会自动清理旧模式,从而帮助管理一段时间内的存储成本。

AWS 管理员
Task说明所需技能

删除已部署的资源。

要删除所有已部署的资源,请执行以下操作:

删除代 AgentCore 理:

agentcore destroy

删除 CloudFormation 堆栈(删除 DynamoDB 表、Cognito 用户池和 IAM 角色):

aws cloudformation delete-stack \ --stack-name lambda-test-generator-infra \ --region us-east-1
AWS 管理员

问题排查

问题解决方案

获取 Lambda 代码时出现 “访问被拒绝” 错误

  • 验证目标 Lambda 函数lambda:GetFunctionConfiguration的 IAM 权限(包括lambda:GetFunction和)

  • 检查您的 AWS CLI 证书

    aws sts get-caller-identity

“DynamoDB 写入错误”

  • 验证.env文件中的表名是否与部署的表名相匹配

  • 检查 CloudFormation 输出:

    aws cloudformation describe-stacks --stack-name lambda-test-generator-infra --query 'Stacks[0].Outputs[?OutputKey=DynamoDBTableName].OutputValue' --output text
  • 或者直接验证:

    aws dynamodb describe-table --table-name $DYNAMODB_TABLE

未生成测试用例

可能的原因和解决方案:

  • 无法访问 Lambda 函数代码:检查 IAM 权限以获取 Lambda 访问权限

  • Lambda 部署包仅包含编译后的代码.class.dll无法分析没有源文件的文件

  • 按忽略模式过滤掉的所有文件:查看并调整您的忽略模式

  • 自定义指令过于严格:简化或删除自定义指令

  • 验证 Lambda 函数是否存在:

    aws lambda get-function --function-name <name>

Java/C# Lambda 显示 “未找到源代码”

Java 和 C# Lambda 需要部署包中的源文件:

Java(Maven):

  1. 将源代码包含配置添加到pom.xml(参见docs/JAVA_SETUP.md

  2. 重建并重新部署您的 Lambda 函数

C# (.NET):

  1. 在编译配置中包含.cs文件(参见docs/CSHARP_SETUP.md

  2. 重建并重新部署您的 Lambda 函数

DynamoDB 写入错误

  • 检查 DynamoDB 权限和表状态:

  • 验证 IAM 策略是否包含dynamodb:PutItemdynamodb:BatchWriteItem

  • 检查表格状态:

    aws dynamodb describe-table --table-name $DYNAMODB_TABLE

    表名包含堆栈名称后缀。使用 CloudFormation 输出或 .env 文件中的值。

  • 启用 DynamoDB CloudWatch 日志以查看详细的错误消息

测试生成速度慢

优化生成速度:

  1. 使用目标过滤器专注于特定功能(快 50-70%)

  2. 添加忽略模式以排除测试文件、依赖项和无关的代码

  3. 通过在分析前过滤掉不必要的文件来减小代码大小

AgentCore: “未找到代理”

验证代理是否已部署:

agentcore status agentcore configure list

AgentCore: 运行时出现 “权限被拒绝”

验证执行角色的策略是否正确:

aws iam list-role-policies --role-name agentcore-exec-lambda-test-generator-infra

Cognito: “用户名或密码无效”

验证您的凭证是否正确。您可以使用 Streamlit 用户界面的 “创建账户” 流程或通过 AWS CLI 创建新用户:

aws cognito-idp admin-create-user --user-pool-id <POOL_ID> --username <username> --temporary-password '<password>' --region us-east-1
aws cognito-idp admin-set-user-password --user-pool-id <POOL_ID> --username <username> --password '<password>' --permanent --region us-east-1

日志中的 “未配置基岩护栏” 警告

验证BEDROCK_GUARDRAIL_ID AgentCore 部署中是否设置了BEDROCK_GUARDRAIL_VERSION环境变量。

检查 CloudFormation 输出:

aws cloudformation describe-stacks --stack-name lambda-test-generator-infra --query 'Stacks[0].Outputs[?OutputKey==`BedrockGuardrailId`].OutputValue' --output text

“超出速率限制” 错误

系统将每位用户每 60 秒限制为 5 个请求。等待指定的时间再重试。对于具有更高吞吐量需求的生产用途,请在 main.py 中进行调整RATE_LIMIT_MAX_REQUESTSRATE_LIMIT_WINDOW常量。

相关资源

AWS 文档