Amazon Nova Act 合成监控实战:视觉驱动的 UI 自动化测试
文章元数据
SEO 标题: Amazon Nova Act 合成监控实战:视觉驱动的 UI 自动化测试方案
摘要: Amazon Nova Act 通过多模态 AI 处理 UI 截图驱动浏览器自动化,替代脆弱的 DOM 选择器,在浏览器工作流中展示超 90% 准确度。本文基于 AWS 官方博客实战合成监控场景,涵盖架构组件(Bedrock AgentCore、CloudWatch、EventBridge)、工作流定义、部署步骤和成本优化。
目录
- 传统 UI 自动化的维护困境
- Amazon Nova Act 视觉驱动方案
- 合成监控核心应用场景
- 五层架构组件解析
- 工作流定义:act() 与布尔模式验证
- 完整部署流程与代码示例
- CloudWatch 监控与告警配置
- 成本优化与误报控制
- 安全隔离与合规保障
- 参考资源与后续实践
1. 传统 UI 自动化的维护困境
传统浏览器自动化工具(Selenium、Playwright、Puppeteer)依赖 CSS 选择器或 XPath 定位元素:
# 传统方法:脆弱的选择器依赖
driver.find_element(By.CLASS_NAME, "checkout-button").click()
driver.find_element(By.ID, "product-price").text
核心痛点:
- 高维护成本:前端重构后 CSS 类/ID 变更,脚本大规模失效
- 跨页面不一致:同一功能在不同页面使用不同选择器
- 动态内容脆弱:A/B 测试、个性化推荐导致选择器随机失效
- 测试数据污染:需维护独立测试环境和数据集
AWS 官方博客指出,传统方法"当 CSS 类更改时中断",团队需持续投入人力维护测试脚本。
2. Amazon Nova Act 视觉驱动方案
核心原理
Amazon Nova Act 是 多模态大语言模型,通过处理 UI 截图而非 DOM 选择器执行浏览器自动化。它"使用自然语言动作,在大多数情况下适应 UI 变化"。
对比示例
传统方法:
driver.find_element(By.XPATH, "//button[contains(@class,'btn-primary')]").click()
Nova Act 方法:
nova_act.act("Click the checkout button")
关键优势:
- 语义理解:识别"结账按钮"的功能意图,而非具体实现
- 视觉定位:基于截图中的按钮视觉特征,容忍 CSS 变更
- 自适应:前端重构后无需更新脚本(仅需功能位置不变)
准确度数据
AWS 官方博客披露,Nova Act"在浏览器工作流中展示超 90% 准确度"。需注意该数据来自官方演示结果,实际生产环境需独立验证。
3. 合成监控核心应用场景
合成监控通过 定时模拟真实用户操作 验证关键业务流程,目标是"在客户遇到问题之前通过连续验证关键工作流来检测问题"。
适用行业与场景
| 行业 | 典型监控流程 | 业务影响 |
|---|---|---|
| 电商 | 产品搜索 → 加购 → 结账 → 支付 | 支付网关故障导致订单丢失 |
| 金融服务 | 登录 → 账户查询 → 转账 | 交易流程中断影响资金流动 |
| 旅游和酒店 | 搜索航班 → 选择座位 → 预订确认 | 预订系统失败损失高价值订单 |
| SaaS | 注册 → 邮箱验证 → 订阅升级 | 注册转化漏斗断裂影响 MRR |
| 医疗 | 预约挂号 → 时间选择 → 确认预约 | 预约系统故障影响患者体验 |
为什么需要合成监控
- 真实用户监控(RUM)的局限:只能在用户遇到问题后被动发现
- 健康检查的盲区:HTTP 200 不代表业务流程可用
- 第三方依赖风险:支付网关、物流 API、CDN 故障需主动探测
4. 五层架构组件解析
Nova Act 合成监控方案由五个 AWS 服务协作:
┌─────────────────────────────────────────────────────────┐
│ EventBridge Scheduler (定时触发) │
└────────────────────┬────────────────────────────────────┘
│ 每 5 分钟触发一次
▼
┌─────────────────────────────────────────────────────────┐
│ Bedrock AgentCore Runtime (无服务器执行) │
│ ├─ 会话隔离 (Firecracker 微虚拟机) │
│ ├─ 浏览器工具 (隔离的远程浏览器环境) │
│ └─ Nova Act 推理调用 │
└────────────────────┬────────────────────────────────────┘
│ 失败时
▼
┌─────────────────────────────────────────────────────────┐
│ SNS (通知路由) │
│ ├─ Email │
│ ├─ Slack/Teams │
│ └─ 事件响应工具 (PagerDuty/Opsgenie) │
└─────────────────────────────────────────────────────────┘
监控与观测
┌─────────────────────────────────────────────────────────┐
│ CloudWatch (指标和告警) │
│ ├─ 调用次数、持续时间、失败率 │
│ ├─ 死信队列深度 │
│ └─ 计划运行缺失告警 │
└─────────────────────────────────────────────────────────┘
组件职责详解
4.1 Amazon Nova Act
- 输入:自然语言指令("点击结账按钮")
- 输出:浏览器操作序列
- 视觉推理:处理 UI 截图识别元素位置
- 语言推理:理解操作意图与上下文
4.2 Bedrock AgentCore Runtime
- 无服务器执行:按需启动会话,无需维护基础设施
- 会话隔离:Firecracker 微虚拟机确保测试独立性
- 浏览器工具:为每次测试提供隔离的远程浏览器环境
- 网络模式:默认公共网络访问,支持 VPC 配置限制特定域
4.3 EventBridge Scheduler
- 定时触发:按 cron 表达式或固定速率触发测试
- 目标配置:AgentCore Runtime 工作流 ARN
- 失败处理:死信队列捕获调用失败
4.4 CloudWatch
- 指标收集:调用次数、持续时间、错误率
- 告警配置:死信队列深度、计划运行缺失
- 日志留存:工作流执行日志供故障排查
4.5 SNS
- 失败通知:仅在工作流失败时发布
- 订阅端点:Email、Slack、PagerDuty 等
- 消息内容:旅程类型、目标 URL、完成步骤、失败步骤
5. 工作流定义:act() 与布尔模式验证
核心 API 方法
5.1 act() — 执行操作与验证
# 自然语言驱动 UI 交互
nova_act.act("Click the 'Add to Cart' button")
nova_act.act("Enter 'test@example.com' in the email field")
nova_act.act("Scroll down to the footer")
# 布尔模式验证(基于博客示例推断)
# 注意:官方 API 文档尚未明确此用法,以下为根据博客"布尔模式"描述推断
result = nova_act.act("Verify the shopping cart count shows '1'", mode="boolean")
if not result:
raise AssertionError("购物车数量验证失败")
特点:
- 无需指定选择器,模型自动识别目标元素
- 支持复杂操作(如"选择第二个产品卡片")
- 容忍 UI 变化(按钮文案从"Buy Now"改为"立即购买"仍可识别)
- 布尔验证模式可用于断言检查(具体 API 以官方文档为准)
典型六步电商流程示例
def test_checkout_workflow():
"""
合成监控流程:产品搜索 → 加购 → 结账 → 支付
预期执行时间:2-4 分钟
"""
# Step 1: 导航到首页
nova_act.act("Navigate to https://example-shop.com")
# Step 2: 搜索产品
nova_act.act("Enter 'wireless headphones' in the search box")
nova_act.act("Click the search button")
# 检查点 1: 验证搜索结果(使用布尔模式,以官方文档为准)
has_results = nova_act.act("Verify product results are displayed", mode="boolean")
if not has_results:
notify_failure("搜索结果为空", completed_steps=2)
return
# Step 3: 选择产品
nova_act.act("Click the first product in the results")
# Step 4: 加入购物车
nova_act.act("Click the 'Add to Cart' button")
# 检查点 2: 验证购物车状态
cart_updated = nova_act.act("Verify the cart icon shows '1' item", mode="boolean")
if not cart_updated:
notify_failure("购物车未更新", completed_steps=4)
return
# Step 5: 进入结账
nova_act.act("Click the cart icon")
nova_act.act("Click the 'Proceed to Checkout' button")
# 检查点 3: 验证结账页面
on_checkout = nova_act.act("Verify the page shows 'Shipping Information' section", mode="boolean")
if not on_checkout:
notify_failure("未到达结账页", completed_steps=5)
return
# Step 6: 填写测试数据(不实际支付)
nova_act.act("Enter 'John Doe' in the name field")
nova_act.act("Enter 'test@example.com' in the email field")
# 检查点 4: 验证表单可填写
form_valid = nova_act.act("Verify the 'Continue to Payment' button is enabled", mode="boolean")
if not form_valid:
notify_failure("结账表单验证失败", completed_steps=6)
return
# 成功完成,无需发布 SNS
print("✓ Checkout workflow completed successfully")
设计原则
AWS 建议"代理将自然语言动作分组为逻辑旅程步骤,在关键检查点使用断言":
- 3-5 个高价值工作流:避免详尽覆盖导致维护负担
- 有意义的结果验证:检查购物车数量而非每个 DOM 元素
- 单次尝试执行:最小化浏览器会话成本
- 步骤级重试(可选):需要更低误报率的团队可添加
6. 完整部署流程与代码示例
前置条件
- AWS 账户并启用 Bedrock、AgentCore、EventBridge、SNS 服务
- 安装 AWS CLI 和
actCLI 工具 - IAM 权限:
bedrock:InvokeModel、agentcore:<em>、events:</em>、sns:Publish
部署步骤
步骤 1:定义工作流代码
创建 synthetic_monitor.py:
import boto3
from datetime import datetime
def monitor_workflow():
"""
合成监控主函数
"""
try:
# 执行业务流程测试
test_checkout_workflow()
# 成功时无操作(无需发布 SNS)
return {
'statusCode': 200,
'body': 'Workflow completed successfully'
}
except AssertionError as e:
# 失败时发布 SNS
publish_failure_notification(str(e))
return {
'statusCode': 500,
'body': f'Workflow failed: {str(e)}'
}
def publish_failure_notification(error_message):
sns = boto3.client('sns')
topic_arn = 'arn:aws:sns:us-east-1:ACCOUNT_ID:synthetic-monitor-alerts'
sns.publish(
TopicArn=topic_arn,
Subject='🚨 Synthetic Monitor Alert',
Message=f"""
Workflow: Checkout Journey
Target URL: https://example-shop.com
Failure Time: {datetime.utcnow().isoformat()}
Error: {error_message}
Action Required: Investigate the checkout flow immediately.
"""
)
步骤 2:部署到 AgentCore Runtime
# 创建工作流
act workflow create \
--name synthetic-checkout-monitor \
--file synthetic_monitor.py
# 部署到 AgentCore
act workflow deploy \
--name synthetic-checkout-monitor \
--region us-east-1
# 获取工作流 ARN(用于 Scheduler 目标)
act workflow show \
--name synthetic-checkout-monitor \
--output json | jq -r '.arn'
返回 ARN 示例:
arn:aws:agentcore:us-east-1:123456789012:workflow/synthetic-checkout-monitor
步骤 3:配置 EventBridge Scheduler
# 创建 SNS 主题
aws sns create-topic \
--name synthetic-monitor-alerts \
--region us-east-1
# 订阅 Email 通知
aws sns subscribe \
--topic-arn arn:aws:sns:us-east-1:ACCOUNT_ID:synthetic-monitor-alerts \
--protocol email \
--notification-endpoint ops-team@example.com
# 创建定时任务(每 5 分钟执行一次)
aws scheduler create-schedule \
--name synthetic-checkout-monitor-schedule \
--schedule-expression "rate(5 minutes)" \
--flexible-time-window Mode=OFF \
--target Arn=arn:aws:agentcore:us-east-1:ACCOUNT_ID:workflow/synthetic-checkout-monitor,RoleArn=arn:aws:iam::ACCOUNT_ID:role/EventBridgeSchedulerRole
步骤 4:使用 CDK 自动化部署(推荐生产)
import * as cdk from 'aws-cdk-lib';
import * as events from 'aws-cdk-lib/aws-events';
import * as targets from 'aws-cdk-lib/aws-events-targets';
import * as sns from 'aws-cdk-lib/aws-sns';
import * as subscriptions from 'aws-cdk-lib/aws-sns-subscriptions';
export class SyntheticMonitorStack extends cdk.Stack {
constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// SNS 主题
const alertTopic = new sns.Topic(this, 'SyntheticMonitorAlerts', {
displayName: 'Synthetic Monitor Failure Alerts',
});
alertTopic.addSubscription(
new subscriptions.EmailSubscription('ops-team@example.com')
);
// EventBridge 规则
const rule = new events.Rule(this, 'SyntheticMonitorSchedule', {
schedule: events.Schedule.rate(cdk.Duration.minutes(5)),
});
rule.addTarget(new targets.AgentCoreWorkflow({
workflowArn: 'arn:aws:agentcore:us-east-1:ACCOUNT_ID:workflow/synthetic-checkout-monitor',
}));
// CloudWatch 告警
const dlqAlarm = new cloudwatch.Alarm(this, 'SchedulerDLQAlarm', {
metric: rule.metricFailedInvocations(),
threshold: 1,
evaluationPeriods: 1,
});
dlqAlarm.addAlarmAction(new cwactions.SnsAction(alertTopic));
}
}
7. CloudWatch 监控与告警配置
推荐告警策略
告警 1:死信队列深度
目的:捕获 Scheduler 调用失败(网络问题、权限错误、配额超限)
aws cloudwatch put-metric-alarm \
--alarm-name synthetic-monitor-scheduler-dlq \
--alarm-description "Scheduler failed to invoke workflow" \
--metric-name ApproximateNumberOfMessagesVisible \
--namespace AWS/SQS \
--statistic Sum \
--period 300 \
--threshold 1 \
--comparison-operator GreaterThanThreshold \
--evaluation-periods 1 \
--alarm-actions arn:aws:sns:us-east-1:ACCOUNT_ID:synthetic-monitor-alerts
告警 2:计划运行缺失
目的:检测 Scheduler 本身失效或被禁用
aws cloudwatch put-metric-alarm \
--alarm-name synthetic-monitor-missing-runs \
--alarm-description "No workflow executions in the last 15 minutes" \
--metric-name Invocations \
--namespace AWS/AgentCore \
--statistic Sum \
--period 900 \
--threshold 1 \
--comparison-operator LessThanThreshold \
--evaluation-periods 1 \
--treat-missing-data breaching \
--alarm-actions arn:aws:sns:us-east-1:ACCOUNT_ID:synthetic-monitor-alerts
关键指标监控
| 指标 | 命名空间 | 说明 | 正常范围 |
|---|---|---|---|
| Invocations | AWS/AgentCore | 工作流调用次数 | 与 Scheduler 频率一致 |
| Duration | AWS/AgentCore | 单次执行时长 | 2-4 分钟(六步流程) |
| Errors | AWS/AgentCore | 失败次数 | < 10%(目标) |
| ThrottledRequests | AWS/Bedrock | Nova Act 限流 | 0(需增加配额) |
日志查询示例
# 查询最近失败的工作流
aws logs filter-log-events \
--log-group-name /aws/agentcore/synthetic-checkout-monitor \
--filter-pattern "ERROR" \
--start-time $(date -u -d '1 hour ago' +%s)000
# 统计步骤级成功率
aws logs insights query \
--log-group-name /aws/agentcore/synthetic-checkout-monitor \
--start-time $(date -u -d '24 hours ago' +%s) \
--end-time $(date -u +%s) \
--query-string '
fields @timestamp, completed_steps
| stats count() by completed_steps
| sort completed_steps desc
'
8. 成本优化与误报控制
成本构成分析
以 每 5 分钟运行一次、六步流程、单次 2-4 分钟 为例:
- 月度调用次数:约 8,640 次(按 30 天计算,60/5 × 24 × 30)
- 总浏览器时长:259-518 小时/月
| 服务 | 单价(参考) | 月度用量 | 预估成本 |
|---|---|---|---|
| AgentCore Runtime | 按调用计费 | 约 8,640 次 | 见定价页 |
| AgentCore 浏览器工具 | 按分钟计费 | 17,280-34,560 分钟 | 见定价页 |
| Nova Act 推理 | 按输入/输出 token | ~6 张截图/次 | 见定价页 |
| EventBridge Scheduler | $1/百万次调用 | 约 8,640 次 | ~$0.01 |
| SNS | $0.50/百万次发布 | <1,000 次(失败) | ~$0.001 |
注意:主要成本驱动来自 浏览器会话时长 和 Nova Act 推理调用。优化方向:
- 减少步骤数(专注核心路径)
- 降低运行频率(关键流程 5 分钟,次要流程 30 分钟)
- 避免等待超时(优化页面加载速度)
误报控制策略
问题:传统 UI 测试误报率高
- 加载延迟导致元素未渲染
- A/B 测试随机展示不同 UI
- 第三方广告/分析脚本阻塞
- CDN 缓存未更新
Nova Act 优势:视觉容错
- 等待元素出现后再交互(内置智能等待)
- 识别功能意图而非具体实现("结账按钮"而非特定 CSS 类)
- 适应小幅 UI 调整(按钮位置微调、颜色变化)
推荐配置
- 专注 3-5 个高价值工作流:避免详尽覆盖
- 验证有意义的结果:检查订单确认页而非每个 DOM 元素
- 单次尝试执行:最小化浏览器会话成本
- 步骤级重试(可选):容忍瞬时网络抖动
def act_with_retry(instruction, max_retries=2):
for attempt in range(max_retries):
try:
nova_act.act(instruction)
return
except Exception as e:
if attempt == max_retries - 1:
raise
time.sleep(2)
9. 安全隔离与合规保障
会话隔离机制
- Firecracker 微虚拟机:每次测试在独立虚拟机中执行
- 完全内存清理:会话结束时清除 cookies、浏览器缓存、LocalStorage
- 暂时会话:"默认情况下每个会话以完全内存清理终止,防止 cookie、浏览器缓存和 LocalStorage 在运行之间持久化"
凭证管理
import boto3
def get_test_credentials():
"""
从 Secrets Manager 获取测试账户凭证
"""
client = boto3.client('secretsmanager')
response = client.get_secret_value(SecretId='synthetic-monitor/test-account')
return json.loads(response['SecretString'])
# 使用
creds = get_test_credentials()
nova_act.act(f"Enter '{creds['username']}' in the username field")
nova_act.act(f"Enter '{creds['password']}' in the password field")
网络访问控制
- 公共网络模式:默认,适合监控互联网公开服务
- VPC 模式:通过 VPC 配置限制访问特定内部域
act workflow deploy \
--name synthetic-monitor \
--vpc-config SubnetIds=subnet-xxx,SecurityGroupIds=sg-yyy
合规性
- HIPAA 合规:AWS 博客确认"Amazon Nova Act is now HIPAA eligible"(截至 2026 年 5 月)
- 数据留存:CloudWatch 日志可配置留存期(1 天 - 10 年)
- 访问控制:IAM 强制最小权限(仅允许特定工作流调用)
10. 参考资源与后续实践
官方资源
- AWS 博客文章:Implementing synthetic monitoring using Amazon Nova Act
- Nova Act 产品页:Build reliable agents to automate production UI workflows at scale
- 官方文档:What is Amazon Nova Act?
- 监控指南:Monitoring Amazon Nova Act
- HIPAA 合规声明:Amazon Nova Act is now HIPAA eligible
后续实践方向
1. 渐进式部署策略
- 第 1 周:部署单个核心流程(如结账),dry-run 模式验证准确度
- 第 2 周:添加 2-3 个次要流程(登录、搜索、支付),启用真实告警
- 第 3-4 周:根据误报率调整检查点,优化运行频率
2. 多区域监控
const regions = ['us-east-1', 'eu-west-1', 'ap-southeast-1'];
regions.forEach(region => {
new SyntheticMonitorStack(app, `SyntheticMonitor-${region}`, {
env: { region },
});
});
3. 与 CI/CD 集成
# .github/workflows/pre-deploy-check.yml
name: Pre-Deploy Synthetic Check
on:
pull_request:
branches: [main]
jobs:
synthetic-check:
runs-on: ubuntu-latest
steps:
- name: Run synthetic monitor
run: |
aws agentcore invoke-workflow \
--workflow-arn ${{ secrets.WORKFLOW_ARN }} \
--wait-for-completion
- name: Block merge if failed
if: failure()
run: exit 1
4. 成本优化实验
- 对比不同运行频率的故障检测时效
- 测试步骤合并对准确度的影响
- 评估批量运行 vs 单次运行的成本差异
局限性与注意事项
- 准确度依赖 UI 稳定性:动态内容过多(如实时股票价格)可能影响识别
- 截图处理开销:每步需上传截图到 Nova Act,网络延迟影响总时长
- 自然语言歧义:复杂指令需明确描述("点击左侧第二个蓝色按钮"优于"点击那个按钮")
- 成本随频率线性增长:高频监控需评估 ROI(5 分钟 vs 30 分钟)
行动召唤(CTA)
Amazon Nova Act 通过视觉驱动的 AI 方案解决了传统 UI 自动化的维护困境,90% 准确度的早期数据显示其生产可行性。如果您的团队面临以下场景,建议立即试点:
- UI 测试维护成本高:前端频繁重构导致脚本失效
- 关键业务流程需 7×24 监控:电商结账、金融交易、SaaS 注册
- 第三方依赖风险高:支付网关、物流 API、CDN 故障需主动探测
建议起步路径:
- 选择 1 个核心流程(3-6 步),使用 AWS Free Tier 测试
- 配置 CloudWatch 告警和 SNS 通知,运行 1 周收集基线数据
- 根据误报率调整检查点,逐步扩展到 3-5 个高价值工作流
对于需要传统选择器精度的场景(如自动化表单填写、数据抓取),仍建议使用 Playwright/Selenium。Nova Act 与传统工具互补使用,可构建更健壮的监控体系。
关键词:Amazon Nova Act, 合成监控, UI 自动化, 视觉驱动测试, AWS Bedrock, AgentCore Runtime, CloudWatch 监控, 浏览器自动化, Synthetic Monitoring, 多模态 AI
Sources:
