統合テストは、Go アプリケーションがデータベースなどの外部依存関係で問題なく動作することを確認するために重要です。このブログでは、GitHub Actions を使用して Go アプリケーションの統合テストをセットアップして実行する方法を説明します。 CI パイプライン内で PostgreSQL データベースを構成し、テスト プロセスを合理化し、プッシュするたびにコードベースの信頼性と運用準備が整っていることを確認します。飛び込んでみましょう!
前回の記事で単体テストと統合を作成しました。この記事では、Github リポジトリへのすべてのコミットに対してこれらのテストを実行したいと思います。
これらは、ビルド、テスト、デプロイメントのパイプラインを自動化できる継続的インテグレーションおよび継続的デリバリー (CI/CD) プラットフォームです。
Github Actions を使用すると、リポジトリ内で他のイベントが発生したときにワークフローを実行できます
ワークフローは、1 つ以上のジョブを実行する構成可能な自動プロセスです。ワークフローは、リポジトリにチェックインされた YAML ファイルによって定義され、リポジトリ内のイベントによってトリガーされると実行されます。ワークフローは .github/workfows.
で定義されます。name: ci-test on: push: branches: [main] pull_request: branches: [main] env: POSTGRES_USER: postgres POSTGRES_PASSWORD: Password123 POSTGRES_DB: crud_db jobs: build: name: tests runs-on: ubuntu-latest services: postgres: image: postgres env: POSTGRES_USER: ${{ env.POSTGRES_USER }} POSTGRES_PASSWORD: ${{ env.POSTGRES_PASSWORD }} POSTGRES_DB: ${{ env.POSTGRES_DB }} ports: - 5432:5432 options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 steps: - uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v4 with: go-version: "1.22" - name: Install dbmate for golang migrations run: | sudo curl -fsSL -o /usr/local/bin/dbmate https://github.com/amacneil/dbmate/releases/latest/download/dbmate-linux-amd64 sudo chmod +x /usr/local/bin/dbmate which dbmate - name: Construct DB URL id: construct_url run: echo "DB_URL=postgres://${{ env.POSTGRES_USER }}:${{ env.POSTGRES_PASSWORD }}@localhost:5432/${{ env.POSTGRES_DB }}?sslmode=disable" >> $GITHUB_ENV - run: env - name: Make Migrations run: make migrations URL=${{ env.DB_URL }} - name: Seed test DB run: go run db/seed.go - name: Test run: make test
Github ワークフローは、グローバル環境変数とジョブ固有の環境変数をサポートしています。この変数は、後で yaml ファイルで使用する postgres 認証情報を記述します。
name: ci-test on: push: branches: [main] pull_request: branches: [main] env: POSTGRES_USER: postgres POSTGRES_PASSWORD: Password123 POSTGRES_DB: crud_db jobs: build: name: tests runs-on: ubuntu-latest services: postgres: image: postgres env: POSTGRES_USER: ${{ env.POSTGRES_USER }} POSTGRES_PASSWORD: ${{ env.POSTGRES_PASSWORD }} POSTGRES_DB: ${{ env.POSTGRES_DB }} ports: - 5432:5432 options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 steps: - uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v4 with: go-version: "1.22" - name: Install dbmate for golang migrations run: | sudo curl -fsSL -o /usr/local/bin/dbmate https://github.com/amacneil/dbmate/releases/latest/download/dbmate-linux-amd64 sudo chmod +x /usr/local/bin/dbmate which dbmate - name: Construct DB URL id: construct_url run: echo "DB_URL=postgres://${{ env.POSTGRES_USER }}:${{ env.POSTGRES_PASSWORD }}@localhost:5432/${{ env.POSTGRES_DB }}?sslmode=disable" >> $GITHUB_ENV - run: env - name: Make Migrations run: make migrations URL=${{ env.DB_URL }} - name: Seed test DB run: go run db/seed.go - name: Test run: make test
ここでは、コードの構築とテストというコアタスクを実行するジョブに名前を割り当てました。
Runner - Ubuntu 仮想マシンであるワークフローが実行される場所を説明します。
Github Actions ワークフローを使用すると、サービスを定義できます。この場合、テストを実行するための postgres データベースが必要です。
jobs: build: name: tests runs-on: ubuntu-latest
この行はリポジトリの最新バージョンを取得し、すべてのソース ファイルへのアクセスを提供します。
- uses: actions/checkout@v4
- name: Set up Go uses: actions/setup-go@v4 with: go-version: "1.22"
- name: Install dbmate for golang migrations run: | sudo curl -fsSL -o /usr/local/bin/dbmate https://github.com/amacneil/dbmate/releases/latest/download/dbmate-linux-amd64 sudo chmod +x /usr/local/bin/dbmate which dbmate
- name: Construct DB URL id: construct_url run: echo "DB_URL=postgres://${{ env.POSTGRES_USER }}:${{ env.POSTGRES_PASSWORD }}@localhost:5432/${{ env.POSTGRES_DB }}?sslmode=disable" >> $GITHUB_ENV
- name: Make Migrations run: make migrations URL=${{ env.DB_URL }}
seed.go ファイルは、データ AS にテスト データをシードします。現実的なテスト環境をセットアップします。このファイルをさらに詳しく調べるには、ここにアクセスしてください
最後の段階では、make ファイルを使用して go テストを実行します
- name: Seed test DB run: go run db/seed.go
このワークフローは、プル リクエストを行うか、コードをメイン ブランチにプッシュするたびに実行されるようになります
これまで見てきたように、github アクションでは
を実行できます。GitHub Actions を活用することで、このワークフローはテストとデータベースのセットアップを合理化し、堅牢で信頼性の高いソフトウェア開発を保証します。
github リポジトリにアクセスして、上記のアクションでテストされているコードを表示します。
以上がGitHub 上の Go アプリケーションのシームレスな統合テスト PostgreSQL アクションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。