Amazon Nova Act を用いたエージェント型 QA 自動化によるソフトウェアデリバリーの加速 – 第 2 部
AWS は Amazon Nova Act を活用した QA Studio の新機能として、並列処理によるバッチ回帰テストと CI/CD パイプラインへの統合機能を公開し、ソフトウェア配信の高速化を推進している。
キーポイント
並列実行による効率化
各テストケースが独立した AWS Fargate ワーカー上で並列実行されるため、20 個のテストでもシリアル実行よりも大幅に短時間で完了する。
構造化された回帰テスト
機能別やリリースステージ別にテストケースを「テストスイート」にグループ化し、スモークテストや統合テストなど多様な検証シナリオに対応可能。
CI/CD 自動化の強化
コマンドラインインターフェース(CLI)を提供することで、AI エージェントによる QA テストを自動デプロイメント前のゲートとしてパイプラインに組み込める。
CI/CD パイプラインにおける環境対応
同じテスト定義を変更せずに、異なる環境(開発、ステージング、本番など)に対してテストを実行する必要がある場合に対応しています。
--base-url フラグによる動的な URL 置換
このフラグを使用することで、開始ドメインを置き換えつつパスやクエリパラメータを保持し、単一のテストで複数の環境をターゲットにできます。
環境別変数とリージョン制御
--var フラグでテスト定義を複製せずに環境固有の設定(認証情報など)を動的に上書きでき、--region と --model-id で実行リージョンやモデルバージョンを指定可能。
機密情報の安全な管理
AWS Secrets Manager を利用してパスワードや API キーを暗号化保存し、ログに出力されないよう分離することで、CI/CD パイプラインでの認証情報を安全に扱える。
重要な引用
Suites execute as a batch with parallel processing: when a suite runs, each use case executes independently on its own Amazon Elastic Container Service (Amazon ECS) on AWS Fargate worker task.
This reduces total suite duration relative to serial execution.
A command-line interface that brings agentic testing into automated CI/CD pipelines.
The CLI supports several override mechanisms that modify test behavior without changing the test definitions stored in QA Studio.
A single test can then target development, staging, or production environments.
"Secrets are stored in AWS Secrets Manager, encrypted at rest. QA Studio is designed so that secret values aren't written to execution logs or history records."
影響分析・編集コメントを表示
影響分析
この発表は、AI エージェントによる QA が単なる実験段階から、大規模な並列処理と自動化パイプラインに統合された実務レベルのツールへと進化したことを示しています。開発チームは手動でのテスト管理負担を減らしつつ、AI の柔軟性を活用してソフトウェア配信の速度と品質を同時に向上させることが可能になります。
編集コメント
従来の自動化テストのボトルネックであった実行時間の短縮と、AI エージェントの柔軟性を CI/CD に組み込む実装が明確に示されており、開発現場への導入可能性が高い内容です。
本番環境の品質保証(QA)ワークフローでは、個々のテスト実行だけでは不十分です。テストを回帰スイートに整理してバッチ処理で実行し、継続的インテグレーション・継続的デリバリー(CI/CD)パイプラインに統合して、テスト結果がデプロイのゲートとして自動的に機能するようにする必要があります。
前回の投稿では、Amazon Nova Act を活用したエージェント型 QA 自動化のための参考実装「QA Studio」をご紹介しました。ここでは、自然言語で個々のユースケースを定義し、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 リポジトリに含まれています。リポジトリをクローンした後、オプションのランナー依存関係を含めて 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 は自動的にアクセストークンを取得してキャッシュし、期限切れになった場合は自動的に更新します。ブラウザでの対話型ログインは不要です。
テストとスイートの実行
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 に保存され、保存時(at rest)には暗号化されます。QA Studio では、シークレットの値が実行ログや履歴記録に書き込まれないよう設計されています。テスト手順ではシークレット名を参照し、実際の値は実行時に取得されます。この分離により、CI/CD パイプラインで認証情報を必要とするテストを実行しても、パイプラインの設定やログ上に認証情報が露出することはありません。
この 3 ステートモデルにより、パイプラインはテストの失敗(終了コード 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_ID、OAUTH_CLIENT_SECRET、OAUTH_TOKEN_ENDPOINT、AWS_ACCESS_KEY_ID、AWS_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 をご覧ください。
執筆者について

ヴィニシウス・ペドロニ
ヴィニシウスは AWS でトラベル・ホスピタリティ業界を担当するシニアソリューションアーキテクトです。エッジサービスと生成 AI に注力しており、顧客のクラウド移行を支援することに情熱を持っています。顧客が適切なタイミングで最適な戦略を採用できるようサポートしています。

ヤン・ウィーマーズ
ヤンは AWS でトラベル、交通、物流業界の顧客を担当するシニアソリューションアーキテクトです。ソフトウェア業界で 20 年以上の経験を持ち、AI プロダクト開発ライフサイクルとテスト自動化に注力しています。顧客が AI を活用したソリューションをより迅速に構築・テスト・展開できるよう支援しています。

ライアン・キャンティ
ライアンは Amazon AGI Labs のソリューションアーキテクトで、エンタープライズ向けソフトウェアシステムの設計とスケーリングに深い知見を持っています。AWS サービスである「Amazon Nova Act」を活用し、UI ワークフローを大規模に自動化する信頼性の高い AI エージェント群の構築・展開を顧客と共に進めています。
原文を表示
Production quality assurance (QA) workflows require more than individual test execution. You must organize tests into regression suites that run as a batch, and integrate them into continuous integration and continuous delivery (CI/CD) pipelines so that test results gate deployments automatically.
In a previous post, we introduced QA Studio, a reference solution for agentic QA automation built with Amazon Nova Act. We showed how to define individual use cases in natural language, run them on demand through AI-powered visual navigation, and inspect execution artifacts with full trajectory visibility.
In this post, we extend that foundation to demonstrate how QA Studio addresses batch regression testing and pipeline integration through test suites that organize and parallelize execution, and a command-line interface that brings agentic testing into automated CI/CD pipelines.
Test suites for organized regression testing
With QA Studio, you can group individual use cases, each validating a specific user journey, into collections called test suites that run together. These test suites support structured regression testing across functional areas.
Suites execute as a batch with parallel processing: when a suite runs, each use case executes independently on its own Amazon Elastic Container Service (Amazon ECS) on AWS Fargate worker task. Because each use case runs on its own Fargate worker task, a suite of 20 tests can execute concurrently rather than sequentially. This reduces total suite duration relative to serial execution.
You can organize suites by functional area, release stage, or testing purpose. Examples include smoke tests that validate critical paths on every deployment, regression suites that run across the full application, and integration tests that verify cross-feature workflows before release.
Creating and managing test suites
You create test suites in the QA Studio web interface by providing a name, description, and optional tags, then add existing use cases to the suite. Each use case retains its own configuration, including starting URL, variables, secrets, and headers. When the suite executes, these configurations apply independently to each use case.

*Figure 1 — Test suite detail page showing use cases and execution history*
Suite execution and results
When a suite executes, QA Studio creates individual execution records for each use case and dispatches them to the worker queue. The suite execution page provides an aggregate view: how many use cases succeeded, failed, or are still running. You can drill into individual execution results to review trajectory logs, screenshots, and session recordings for any failed test.
Each suite maintains its own execution history, giving you a longitudinal view of regression stability. Consistent passes build confidence in the tested functionality, while intermittent failures highlight areas that need attention.

*Figure 2 — Suite execution results showing aggregate status and individual use case outcomes*
CI/CD integration with the QA Studio CLI
The QA Studio web interface works well for interactive test creation and on-demand execution. CI/CD pipelines require a different interface: command-line execution with structured output, non-interactive authentication, and exit codes that integrate with pipeline orchestrators.
The QA Studio CLI (qa-studio) provides this interface. It connects to the same API backend as the web application. But instead of dispatching tests to Fargate workers, it runs them with Amazon Nova Act on the machine where the CLI executes, such as a CI/CD runner. Results are reported back to the QA Studio deployment.
Installing and authenticating
The QA Studio CLI is part of the project’s GitHub repository. Clone the repository, then install the CLI as a Python package with its optional runner dependencies:
pip install -e "./qa-studio-cli[runner]"For CI/CD environments, the CLI supports OAuth 2.0 client credentials authentication. You create an OAuth client in the QA Studio web interface with the required scopes (api/suite.read, api/suite.write, api/executions.read, api/executions.write, api/usecases.read, api/usecases.execute), then configure the credentials as pipeline environment variables:
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"The CLI automatically requests and caches access tokens, refreshing them when they expire. No interactive browser login is required.
Running tests and suites
The qa-studio run command executes individual use cases or entire test suites:
# Run a single test
qa-studio run --usecase-id test-123
# Run a test suite
qa-studio run --suite-id suite-456Environment and variable overrides
CI/CD pipelines often need to run the same tests against different environments. The CLI supports several override mechanisms that modify test behavior without changing the test definitions stored in QA Studio.
The --base-url flag replaces the domain of the starting URL while preserving the path and query parameters. A single test can then target development, staging, or production environments:
# Run against staging
qa-studio run --suite-id suite-456 --base-url https://staging.example.com
# Run against production
qa-studio run --suite-id suite-456 --base-url https://production.example.comThe --var flag overrides template variables defined in the use case. Variables referenced in test steps using {{VariableName}} syntax are substituted at runtime. This supports environment-specific configuration without duplicating test definitions:
# Override credentials for a specific environment
qa-studio run --usecase-id test-123 \
--var username=staging_user \
--var password=staging_pass \
--var api_key=staging_key_123The --region flag controls which AWS Region the browser runs in, and --model-id selects the Amazon Nova Act model version:
qa-studio run --usecase-id test-123 \
--region eu-central-1 \
--model-id nova-act-v1.0Headers and secrets
Use cases can define custom HTTP headers that are sent with every request during test execution. This is useful for authentication tokens, feature flags, or custom identifiers that the application under test requires. Headers are configured in the use case settings and applied automatically during both web interface and CLI execution.
Secrets provide secure storage for sensitive values like passwords, API keys, or tokens. Secrets are stored in AWS Secrets Manager, encrypted at rest. QA Studio is designed so that secret values aren’t written to execution logs or history records. Test steps reference secrets by name, and the actual values are retrieved at runtime. This separation means CI/CD pipelines can execute tests that require credentials without exposing those credentials in pipeline configuration or logs.
Exit codes and pipeline integration
The CLI uses exit codes that map directly to pipeline success and failure states:
Exit code
Meaning
Pipeline behavior
0
All tests passed
Pipeline continues
1
One or more tests failed
Pipeline fails (test failure)
2
CLI error (auth, configuration, API)
Pipeline fails (infrastructure error)
This three-state model allows pipelines to distinguish between test failures (exit code 1) and infrastructure problems (exit code 2). You can configure different notification or retry strategies for each case.
The --format flag controls output formatting. The default json format provides structured output for programmatic consumption. The human format provides a readable summary for pipeline logs:
qa-studio run --suite-id suite-456 --format humanDuring execution, the CLI creates execution records in QA Studio, updates step statuses in real time, and uploads artifacts including trajectory logs and session recordings. You can monitor CLI-triggered executions from the web interface alongside manually triggered runs, maintaining a unified execution history regardless of how tests were initiated.

*Figure 3 — CLI execution output showing test results*
CI/CD platform examples
The following examples demonstrate QA Studio integration with common CI/CD tools. Each example assumes OAuth client credentials and AWS credentials are stored as pipeline secrets.
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/The if: always() condition on the artifact upload step verifies that test recordings and logs are preserved even when tests fail, providing the debugging context that you need to investigate failures.
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:
- schedulesGitLab CI variables (OAUTH_CLIENT_ID, OAUTH_CLIENT_SECRET, OAUTH_TOKEN_ENDPOINT, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY) should be configured as protected and masked CI/CD variables in the project settings. The regression-tests job uses the GitLab schedule trigger, running only when triggered by a pipeline schedule rather than a code push.
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 uses the withCredentials block to inject secrets into the build environment without exposing them in console output. The post.always block archives test artifacts regardless of build outcome.
Conclusion
Test suites and CI/CD integration extend QA Studio from an interactive test creation tool into a platform for continuous quality assurance. Test suites organize regression coverage into manageable collections with parallel execution. The CLI brings agentic test execution into automated pipelines with environment overrides, secure credential handling, and exit codes that map to pipeline success and failure states.
These capabilities build on the foundation described in our previous post: natural language test definitions, AI-powered visual navigation, and end-to-end trajectory visibility. Together, they demonstrate how agentic QA automation with Amazon Nova Act can integrate into existing software delivery workflows, providing automated quality feedback without requiring you to maintain framework-specific test code.
In a future post, we plan to explore how agentic test automation can extend to mobile applications.
The QA Studio reference solution, including test suites and CLI integration, is available on GitHub. For deployment instructions and detailed documentation, see the project README.
About the authors

Vinicius Pedroni
Vinicius is a Senior Solutions Architect at AWS for the Travel and Hospitality Industry, with focus on Edge Services and Generative AI. Vinicius is also passionate about assisting customers on their Cloud Journey, allowing them to adopt the right strategies at the right moment.

Jan Wiemers
Jan is a Senior Solutions Architect at AWS, working with customers in the Travel, Transportation & Logistics industry. With over 20 years of experience in the software industry, he focuses on the AI Product Development Lifecycle and Test Automation, helping customers accelerate how they build, test, and deploy AI-driven solutions.

Ryan Canty
Ryan is a Solutions Architect at Amazon AGI Labs with deep expertise in designing and scaling enterprise software systems. He works with customers to build and deploy fleets of reliable AI agents using Amazon Nova Act, an AWS service that automates UI workflows at scale.
関連記事
今日のまとめ
AI日報で今日の重要ニュースをまとめ読み