可易

用 Amazon Nova Act 的智能体式 QA 自动化加速软件交付(第二部分)

可易团队阅读约 8 分钟

AWS 教程全文中译:QA Studio 通过测试套件组织并并行执行回归测试,通过 CLI 接入 CI/CD 流水线,含 GitHub Actions、GitLab CI、Jenkins 三个平台示例。

目录

使用 Amazon Nova Act 的智能体式 QA 自动化加速软件交付——第二部分

生产级质量保障(Quality Assurance,QA)工作流所需要的远不止单个测试的执行。你必须将测试组织成可以批量运行的回归测试套件(regression suite),并将它们集成到持续集成与持续交付(continuous integration and continuous delivery,CI/CD)流水线中,使测试结果能够自动为部署把关。

在一篇此前的文章中,我们介绍了 QA Studio——一个基于 Amazon Nova Act 构建的智能体式 QA 自动化参考解决方案。我们展示了如何用自然语言定义单个用例、通过 AI 驱动的视觉导航按需运行它们,并以完整的轨迹可见性检查执行产物。

在本文中,我们将在这一基础上进一步扩展,演示 QA Studio 如何通过测试套件(test suite)来组织并并行执行测试,从而实现批量回归测试;以及如何通过命令行界面(CLI)将智能体式测试引入自动化 CI/CD 流水线,完成流水线集成。

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

借助 QA Studio,你可以将验证特定用户旅程的单个用例分组为统称为测试套件的集合,让它们一起运行。这些测试套件支持跨功能领域的结构化回归测试。

套件以批量方式执行并支持并行处理:当套件运行时,每个用例都会独立地在自己的 Amazon Elastic Container Service(Amazon ECS)on AWS Fargate 工作线程任务(worker task)上执行。由于每个用例都在各自的 Fargate 工作线程任务上运行,一个包含 20 个测试的套件可以并发执行而非串行执行。相比串行执行,这缩短了套件的总耗时。

你可以按功能领域、发布阶段或测试目的来组织套件。示例包括:在每次部署时验证关键路径的冒烟测试(smoke test)、覆盖整个应用的回归测试套件,以及在发布前验证跨功能工作流的集成测试。

创建和管理测试套件

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

测试套件详情页,展示用例与执行历史

_图 1——测试套件详情页,展示用例与执行历史_

套件执行与结果

当套件执行时,QA Studio 会为每个用例创建单独的执行记录,并将它们分发到工作线程队列。套件执行页面提供汇总视图:有多少用例成功、失败或仍在运行。你可以下钻到单个执行结果,查看任何失败测试的轨迹日志、截图和会话录像。

每个套件都维护自己的执行历史,为你提供关于回归稳定性的纵向视图。持续通过可以建立对被测功能的信心,而间歇性失败则提示需要关注的区域。

套件执行结果,展示汇总状态与单个用例的结果

_图 2——套件执行结果,展示汇总状态与单个用例的结果_

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

QA Studio Web 界面非常适合交互式的测试创建和按需执行。而 CI/CD 流水线需要另一种界面:具备结构化输出的命令行执行、非交互式身份认证,以及可与流水线编排器集成的退出码(exit code)。

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 客户端凭据(client credentials)身份认证。你在 QA Studio Web 界面中创建一个具备所需权限范围(api/suite.read、api/suite.write、api/executions.read、api/executions.write、api/usecases.read、api/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 会自动请求并缓存访问令牌(access token),并在令牌过期时自动刷新。无需交互式浏览器登录。

运行测试与套件

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 的域名,同时保留路径和查询参数。这样,单个测试就可以指向开发、预发布(staging)或生产环境:

# 针对预发布环境运行
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 区域(AWS Region)运行,--model-id 用于选择 Amazon Nova Act 模型版本:

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

请求头与密钥

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

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

退出码与流水线集成

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

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

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

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

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

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

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_ID、OAUTH_CLIENT_SECRET、OAUTH_TOKEN_ENDPOINT、AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY)应在项目设置中配置为受保护(protected)且掩码(masked)的 CI/CD 变量。regression-tests 作业使用 GitLab 计划任务(schedule)触发器,仅在由流水线计划触发时运行,而非由代码推送触发。

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。 PRIMARY_SOURCE: https://aws.amazon.com/blogs/machine-learning/accelerating-software-delivery-with-agentic-qa-automation-using-amazon-nova-act-part-2

  • #Agentic QA
  • #回归测试
  • #CI/CD
  • #发布门禁