ページを選択

Jenkins との統合 (パイプライン)

Jenkins は主要なオープン ソースの自動化サーバーであり、プロジェクトのビルド、デプロイ、自動化をサポートする多数のプラグインを提供しています。Jenkins は単に CI サーバーとして使用することも、継続的デリバリーのハブとすることもでき、Web インターフェイスを使用したセットアップと設定が容易です。

Jenkins のよくある使用方法は、コードの変更がサブミットされるたびにアプリケーションのビルドとテストを行うというものです。TestRail の利点を最大限に活用し、手動のものも自動化されたものも含めてすべてのテスト ケースおよびテスト結果を管理するため、Jenkins から直接 TestRail に自動テストの結果を送信できます。このセクションでは、Jenkins のスクリプト パイプライン ジョブTestRail CLI を利用して簡単にこのタスクを達成する方法を説明します。

TestRail CLI は、テスト自動化フレームワークによって、互換性のある JUnit レポートが生成されることを必要とします。

このサンプルでは、Jenkins とともに GitHub および Pytest を使用します。

前提条件

このマニュアルの手順は、Python 3.10 がインストールされた Jenkins エージェントを使用し、python3.10 というエイリアスを使用して Python を呼び出せることを前提としています。すでに適切に設定された Jenkins インスタンスがある場合は、次のセクションに進むことができます。

手順に従ってすばやく Jenkins インスタンスをセットアップしたい場合は、次の Dockerfile (公式の Jenkins Docker イメージを基にしています) をビルドし、以下の手順に従って実行できます。

    1. 次の内容を Dockerfile という名前のファイルに保存します。
      FROM jenkins/jenkins:lts
      
      USER root
      RUN apt-get update
      RUN apt-get install -y \
              build-essential \
              zlib1g-dev \
              libncurses5-dev \
              libgdbm-dev \
              libnss3-dev \
              libssl-dev \
              libreadline-dev \
              libffi-dev \
              libsqlite3-dev \
              wget \
              libbz2-dev
      RUN wget https://www.python.org/ftp/python/3.10.0/Python-3.10.0.tgz && \
              tar -xvf Python-3.10.0.tgz && \
              cd Python-3.10.0 && \
              ./configure --enable-optimizations && \
              make -j 2 && \
              make altinstall && \
              python3.10 --version
      USER jenkins
    2. ファイルを保存したディレクトリでコマンド ラインを開きます。
    3. 次のコマンドを実行します。
      docker build -t jenkins:local .
      docker run -p 8080:8080 -p 50000:50000 jenkins:local
    4. コンソールのキーをコピーし、ブラウザーで http://localhost:8080 を開きます。
    5. インストール ウィザードに従います。

新規 Jenkins パイプライン ジョブの作成

    1. Jenkins インスタンスで [New Item] をクリックします。
    2. [New Item name] に入力し、[Pipeline] を選択して [OK] をクリックします。

パイプラインの設定

[Pipeline] セクションのスクロール ダウンし、下記のスクリプトを追加します。

Jenkins スクリプト パイプラインはステージで構成され、ステージ内には実行対象のコマンドを含むステップがあります。次に、パイプライン スクリプトをステージごとに見ていきますが、Jenkins パイプランの基本になじみがない場合、Jenkins パイプライン構文のドキュメントで詳しく学ぶことができます。

pipeline {
    agent any

    stages {

        stage('Checkout') {
            steps {
                git url: 'https://github.com/gurock/automation-frameworks-integration.git', branch: 'main'
            }
        }

        stage('Setup virtual environment') {
            steps {
                sh """
# Go to test project folder
cd samples/python/pytest
# Setup virtual environment
python3.10 -m venv ./venv
"""
            }
        }

        stage('Execute automated tests') {
            steps {
                sh """
# Go to test project folder and activate virtual environment
cd samples/python/pytest
. ./venv/bin/activate

# Install and run test project
pip install -r requirements.txt
pytest --junitxml "reports/junit-report.xml" "./tests"
"""
            }
            post {
                always {
                    junit '**/reports/junit-report.xml'
                    archiveArtifacts 'reports/*'
                    sh """
# Go to test project folder and activate virtual environment
cd samples/python/pytest
. ./venv/bin/activate

# Install TestRail CLI and upload test results
pip install trcli
trcli -y \
  -h "https://YOUR_INSTANCE.testrail.io/" \
  -u "USER_EMAIL" \
  -p "USER_PASSWORD" \
  --project "PROJECT" \
  parse_junit \
  --title "Automated Test Run" \
  --run-description "CI Build: ${BUILD_URL}" \
  -f "reports/junit-report.xml"
"""
                }
            }
        }

    }
}
    • stage(‘Checkout’)
      • リポジトリ URL およびチェックアウト対象のブランチを指定した git コマンドを使用してリポジトリからコードをチェックアウトします。
    • stage(‘Setup virtual environment’)
      • プロジェクト専用の Python 仮想環境を作成します。仮想環境を作成するのは、確実に一貫性のあるベースラインから始めるのに良いプラクティスです。スクリプトの次のステージでは、仮想環境をアクティベートし、シェルがグローバルな Python ではなく仮想環境を使用できるようにします。
    • stage(‘Execute automated tests’)
      • このステージの最初のステップは、仮想環境のアクティベートであり、Pytest テスト プロジェクトを直接インストールして実行できます。次に、pytest コマンドを使用してテスト プロジェクトを実行します。–junitxml “reports/junit-report.xml” オプションに注目してください。これは、TestRail CLI で使用可能な JUnit 形式のレポートを生成するよう Pytest に指示します。詳細な説明は Pytest との統合マニュアルにあります。このステージには、post { } という内部ブロックがあり、その中に always { } ブロックがあります。このブロックには、steps { } 結果にかかわらず、ブロックが完了した後に常に実行するコマンドがあります。これは、テスト結果を TestRail に送信するのに最適な状況です。結果をアップロードするには、もう一度仮想環境をアクティベートし、pip を使用して TestRail CLI をインストールし、TestRail インスタンスの情報を指定して実行します。-h-u-p および --project のプレースホルダーを置き換える必要があります。もう 1 つ、このスクリプトでの trcli の呼び出しで、ささいですが役に立つ情報は、--run-description "CI Build: ${BUILD_URL}" オプションです。このオプションは、現在の Jenkins ビルド URL を TestRail のテスト ランに追加し、簡単にビルドに戻れるようにします。最後に、推奨事項として、パスワードや API トークンをスクリプトで直接使用せず、Jenkins credentials manager を使用します。

ジョブの実行

    1. 上で設定したジョブを保存したら、ジョブを実行します。それには、左パネルの [Build Now] アクションをクリックします。
    2. ジョブが完了したら、ビルドの [Pipeline Steps] ページのログをざっと見て、スクリプトが期待どおり実行されたことを確認できます。テスト実行が問題なく完了し、TestRail CLI が適切に設定されており、指定された場所でテスト結果の JUnit レポートを発見できた場合、TestRail CLI がテスト結果を TestRail インスタンスにサブミットしたことがログで確認できるはずです。
    3. TestRail CLI を実行するステップの [Console Output ] ボタンをクリックすると、実行に関するより詳しい情報を確認できます。コンソール出力には、TestRail CLI の出力が表示されます。これには、TestRail で作成されたテスト ランへのリンクが含まれており、非常に便利です。
    4. 最後に、リンクをクリックすると、TestRail インスタンスでテスト ランが開きます。テスト ランは Automated Test Run という名前で、テスト結果とともに、テスト ランを生成した Jenkins ジョブ ビルドへのリンクが含まれます。

次のステップ

テスト結果が TestRail に集約されたので、失敗したテストのエラー メッセージも含めて自動テスト実行の結果を確認できるだけでなく、手動テストと自動テストをレポート上で集約し、アプリケーションに関する完全なテスト カバレッジを表示したり、テスト自動化プロセスを追跡したりすることも可能です。また、手動テストの結果だけでなく、自動テストの結果から任意の課題トラッカーに直接バグをレポートすることもできます。

TestRail のレポート機能を活用する方法については、TestRail のレポートおよびテスト メトリクスの動画を参照してください。