AWS · ML 博客

使用 Amazon Nova Act 实现智能体 QA 自动化加速软件交付 – 第 2 部分

Accelerating software delivery with agentic QA automation using Amazon Nova Act – Part 2

二〇二六年七月十五日 · 英文原文

QA Studio基于Amazon Nova Act构建的智能体QA自动化方案,通过测试套件将单个用例组织为可批量并行执行的回归测试集合,每个用例在独立AWS Fargate工作节点上并发运行。CLI工具qa-studio支持OAuth 2.0客户端凭证认证,提供--base-url、--var等环境覆盖机制,通过退出码0/1/2区分测试失败与基础设施错误,并集成GitHub Actions、GitLab CI、Jenkins等CI/CD平台。

生产质量保证(QA)工作流需要的不仅仅是单个测试的执行。你必须将测试组织成可批量运行的回归测试套件,并将其集成到持续集成和持续交付(CI/CD)流水线中,以便测试结果能够自动控制部署。在上一篇文章中,我们介绍了 QA Studio,这是一个基于 Amazon Nova Act 构建的智能体 QA 自动化参考解决方案。我们展示了如何用自然语言定义单个用例,通过 AI 驱动的视觉导航按需运行它们,并借助完整的轨迹可见性检查执行产物。在本文中,我们将扩展这一基础,展示 QA Studio 如何通过测试套件(组织和并行化执行)以及命令行界面(将智能体测试引入自动化 CI/CD 流水线)来应对批量回归测试和流水线集成。

用于组织化回归测试的测试套件

使用 QA Studio,你可以将单个用例(每个用例验证一个特定的用户旅程)分组到称为测试套件的集合中,这些套件可以一起运行。这些测试套件支持跨功能区域的结构化回归测试。套件以批处理方式并行执行:当套件运行时,每个用例在其自己的 AWS Fargate 工作节点上的 Amazon Elastic Container Service(Amazon ECS)任务中独立执行。由于每个用例在其自己的 Fargate 工作节点上运行,一个包含 20 个测试的套件可以并发执行,而不是顺序执行。与串行执行相比,这减少了套件的总持续时间。你可以按功能区域、发布阶段或测试目的来组织套件。示例包括:每次部署时验证关键路径的冒烟测试、覆盖整个应用的回归套件,以及在发布前验证跨功能工作流的集成测试。

创建和管理测试套件

你在 QA Studio Web 界面中创建测试套件,方法是提供名称、描述和可选标签,然后将现有用例添加到套件中。每个用例保留其自己的配置,包括起始 URL、变量、密钥和标头。当套件执行时,这些配置会独立应用于每个用例。

图 1 — 显示用例和执行历史的测试套件详情页面

套件执行与结果

当套件执行时,QA Studio 会为每个用例创建独立的执行记录,并将其分派到工作队列。套件执行页面提供了一个聚合视图:有多少用例成功、失败或仍在运行。你可以深入查看单个执行结果,以检查任何失败测试的轨迹日志、截图和会话记录。每个套件维护自己的执行历史,为你提供回归稳定性的纵向视图。持续通过会增强对被测功能的信心,而间歇性失败则突显需要关注的领域。

图 2 — 显示聚合状态和单个用例结果的套件执行结果

使用 QA Studio CLI 进行 CI/CD 集成

QA Studio Web 界面非常适合交互式测试创建和按需执行。CI/CD 流水线需要不同的接口:具有结构化输出的命令行执行、非交互式身份验证,以及与流水线编排器集成的退出码。QA Studio CLI(qa-studio)提供了这个接口。它连接到与 Web 应用程序相同的 API 后端。但它不是将测试分派到 Fargate 工作节点,而是在 CLI 执行的机器(例如 CI/CD 运行器)上使用 Amazon Nova Act 运行测试。结果会报告回 QA Studio 部署。

安装与身份验证

QA Studio CLI 是项目 GitHub 仓库的一部分。克隆仓库,然后将 CLI 作为 Python 包安装,并带上可选的运行器依赖项:

pip install -e "./qa-studio-cli[runner]"

对于 CI/CD 环境,CLI 支持 OAuth 2.0 客户端凭证身份验证。你在 QA Studio Web 界面中创建一个具有所需作用域(api/suite.readapi/suite.writeapi/executions.readapi/executions.writeapi/usecases.readapi/usecases.execute)的 OAuth 客户端,然后将凭证配置为流水线环境变量:

export OAUTH_CLIENT_ID="your-client-id"
export OAUTH_CLIENT_SECRET="your-client-secret"
export OAUTH_TOKEN_ENDPOINT="https://your-cognito-domain.auth.region.amazoncognito.com/oauth2/token"

CLI 会自动请求和缓存访问令牌,并在它们过期时刷新。无需交互式浏览器登录。

运行测试和套件

qa-studio run 命令执行单个用例或整个测试套件:

# 运行单个测试
qa-studio run --usecase-id test-123

# 运行测试套件
qa-studio run --suite-id suite-456

环境和变量覆盖

CI/CD 流水线通常需要针对不同环境运行相同的测试。CLI 支持多种覆盖机制,可以在不更改 QA Studio 中存储的测试定义的情况下修改测试行为。--base-url 标志替换起始 URL 的域名,同时保留路径和查询参数。这样,单个测试就可以针对开发、预发布或生产环境:

# 针对预发布环境运行
qa-studio run --suite-id suite-456 --base-url https://staging.example.com

# 针对生产环境运行
qa-studio run --suite-id suite-456 --base-url https://production.example.com

--var 标志覆盖用例中定义的模板变量。测试步骤中使用 {{VariableName}} 语法引用的变量会在运行时被替换。这支持环境特定的配置,而无需重复测试定义:

# 覆盖特定环境的凭证
qa-studio run --usecase-id test-123 \
  --var username=staging_user \
  --var password=staging_pass \
  --var api_key=staging_key_123

--region 标志控制浏览器运行的 AWS 区域,--model-id 选择 Amazon Nova Act 模型版本:

qa-studio run --usecase-id test-123 \
  --region eu-central-1 \
  --model-id nova-act-v1.0

标头和密钥

用例可以定义自定义 HTTP 标头,这些标头会在测试执行期间随每个请求一起发送。这对于被测应用所需的身份验证令牌、功能标志或自定义标识符非常有用。标头在用例设置中配置,并在 Web 界面和 CLI 执行期间自动应用。

密钥为密码、API 密钥或令牌等敏感值提供安全存储。密钥存储在 AWS Secrets Manager 中,并进行静态加密。QA Studio 的设计确保密钥值不会写入执行日志或历史记录。测试步骤通过名称引用密钥,实际值在运行时检索。这种分离意味着 CI/CD 流水线可以执行需要凭证的测试,而无需在流水线配置或日志中暴露这些凭证。

退出码与流水线集成

CLI 使用直接映射到流水线成功和失败状态的退出码:

退出码 含义 流水线行为
0 所有测试通过 流水线继续
1 一个或多个测试失败 流水线失败(测试失败)
2 CLI 错误(身份验证、配置、API) 流水线失败(基础设施错误)

这种三状态模型允许流水线区分测试失败(退出码 1)和基础设施问题(退出码 2)。你可以为每种情况配置不同的通知或重试策略。

--format 标志控制输出格式。默认的 json 格式提供结构化输出,便于程序化消费。human 格式为流水线日志提供可读的摘要:

qa-studio run --suite-id suite-456 --format human

在执行期间,CLI 会在 QA Studio 中创建执行记录,实时更新步骤状态,并上传包括轨迹日志和会话记录在内的产物。你可以从 Web 界面监控 CLI 触发的执行,与手动触发的运行一起,维护统一的执行历史,无论测试是如何启动的。

图 3 — 显示测试结果的 CLI 执行输出

CI/CD 平台示例

以下示例演示了 QA Studio 与常见 CI/CD 工具的集成。每个示例假设 OAuth 客户端凭证和 AWS 凭证已存储为流水线密钥。

GitHub Actions

name: QA Tests
on:
  push:
    branches: [main]
  pull_request:
    branches: [main]
jobs:
  smoke-tests:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.11'
      - name: Install QA Studio CLI
        run: pip install -e "./qa-studio-cli[runner]"
      - name: Configure AWS Credentials
        uses: aws-actions/configure-aws-credentials@v4
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: us-east-1
      - name: Run Smoke Tests
        env:
          OAUTH_CLIENT_ID: ${{ secrets.OAUTH_CLIENT_ID }}
          OAUTH_CLIENT_SECRET: ${{ secrets.OAUTH_CLIENT_SECRET }}
          OAUTH_TOKEN_ENDPOINT: ${{ secrets.OAUTH_TOKEN_ENDPOINT }}
        run: |
          qa-studio run \
            --suite-id ${{ vars.SMOKE_TEST_SUITE_ID }} \
            --base-url https://staging.example.com \
            --format human
      - name: Upload Artifacts
        if: always()
        uses: actions/upload-artifact@v3
        with:
          name: test-artifacts
          path: ~/.qa-studio/artifacts/

产物上传步骤中的 if: always() 条件确保即使测试失败,测试记录和日志也能被保留,为你提供调查失败所需的调试上下文。

GitLab CI

stages:
  - test

smoke-tests:
  stage: test
  image: python:3.11
  before_script:
    - pip install -e "./qa-studio-cli[runner]"
  script:
    - |
      qa-studio run \
        --suite-id $SMOKE_TEST_SUITE_ID \
        --base-url https://staging.example.com \
        --format human
  variables:
    AWS_DEFAULT_REGION: us-east-1
  artifacts:
    when: always
    paths:
      - ~/.qa-studio/artifacts/
    expire_in: 7 days
  only:
    - main
    - merge_requests

regression-tests:
  stage: test
  image: python:3.11
  before_script:
    - pip install -e "./qa-studio-cli[runner]"
  script:
    - |
      qa-studio run \
        --suite-id $REGRESSION_SUITE_ID \
        --timeout 7200 \
        --format human
  variables:
    AWS_DEFAULT_REGION: us-east-1
  artifacts:
    when: always
    paths:
      - ~/.qa-studio/artifacts/
    expire_in: 7 days
  only:
    - schedules

GitLab CI 变量(OAUTH_CLIENT_IDOAUTH_CLIENT_SECRETOAUTH_TOKEN_ENDPOINTAWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY)应在项目设置中配置为受保护和掩码的 CI/CD 变量。regression-tests 作业使用 GitLab 计划触发器,仅在由流水线计划触发时运行,而不是在代码推送时运行。

Jenkins

pipeline {
    agent any
    environment {
        AWS_DEFAULT_REGION = 'us-east-1'
    }
    stages {
        stage('Setup') {
            steps {
                sh '''
                    python3.11 -m venv venv
                    . venv/bin/activate
                    pip install -e "./qa-studio-cli[runner]"
                '''
            }
        }
        stage('Smoke Tests') {
            steps {
                withCredentials([
                    string(credentialsId: 'oauth-client-id', variable: 'OAUTH_CLIENT_ID'),
                    string(credentialsId: 'oauth-client-secret', variable: 'OAUTH_CLIENT_SECRET'),
                    string(credentialsId: 'oauth-token-endpoint', variable: 'OAUTH_TOKEN_ENDPOINT'),
                    string(credentialsId: 'aws-access-key-id', variable: 'AWS_ACCESS_KEY_ID'),
                    string(credentialsId: 'aws-secret-access-key', variable: 'AWS_SECRET_ACCESS_KEY')
                ]) {
                    sh '''
                        . venv/bin/activate
                        qa-studio run \
                            --suite-id ${SMOKE_TEST_SUITE_ID} \
                            --base-url https://staging.example.com \
                            --format human
                    '''
                }
            }
        }
    }
    post {
        always {
            archiveArtifacts artifacts: '~/.qa-studio/artifacts/**/*', allowEmptyArchive: true
        }
    }
}

Jenkins 使用 withCredentials 块将密钥注入构建环境,而不会在控制台输出中暴露它们。post.always 块无论构建结果如何都会归档测试产物。

结论

测试套件和 CI/CD 集成将 QA Studio 从一个交互式测试创建工具扩展为一个持续质量保证平台。测试套件将回归覆盖组织成可管理的集合,并支持并行执行。CLI 将智能体测试执行带入自动化流水线,支持环境覆盖、安全凭证处理,以及映射到流水线成功和失败状态的退出码。这些能力建立在上一篇文章中描述的基础之上:自然语言测试定义、AI 驱动的视觉导航和端到端轨迹可见性。它们共同展示了如何使用 Amazon Nova Act 的智能体 QA 自动化集成到现有的软件交付工作流中,提供自动化的质量反馈,而无需你维护特定于框架的测试代码。在未来的文章中,我们计划探讨智能体测试自动化如何扩展到移动应用程序。QA Studio 参考解决方案,包括测试套件和 CLI 集成,已在 GitHub 上提供。有关部署说明和详细文档,请参阅项目 README。

关于作者

Vinicius Pedroni Vinicius 是 AWS 旅游与酒店行业的资深解决方案架构师,专注于边缘服务和生成式 AI。Vinicius 还热衷于帮助客户进行云迁移,使他们能够在正确的时机采用正确的策略。

Jan Wiemers Jan 是 AWS 的资深解决方案架构师,与旅游、运输和物流行业的客户合作。他在软件行业拥有超过 20 年的经验,专注于 AI 产品开发生命周期和测试自动化,帮助客户加速构建、测试和部署 AI 驱动的解决方案。

Ryan Canty Ryan 是 Amazon AGI Labs 的解决方案架构师,在设计和扩展企业软件系统方面拥有深厚的专业知识。他与客户合作,使用 Amazon Nova Act(一项可大规模自动化 UI 工作流的 AWS 服务)构建和部署可靠的 AI 智能体集群。

译自 AWS · ML 博客 · 录于 二〇二六年七月十五日