ホームページ >バックエンド開発 >Golang >GitHub 上の Go アプリケーションのシームレスな統合テスト PostgreSQL アクション

GitHub 上の Go アプリケーションのシームレスな統合テスト PostgreSQL アクション

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-28 21:55:19673ブラウズ

Seamless Integration Testing for Your Go Application on GitHub Actions with PostgreSQL

導入

統合テストは、Go アプリケーションがデータベースなどの外部依存関係で問題なく動作することを確認するために重要です。このブログでは、GitHub Actions を使用して Go アプリケーションの統合テストをセットアップして実行する方法を説明します。 CI パイプライン内で PostgreSQL データベースを構成し、テスト プロセスを合理化し、プッシュするたびにコードベースの信頼性と運用準備が整っていることを確認します。飛び込んでみましょう!

前回の記事で単体テストと統合を作成しました。この記事では、Github リポジトリへのすべてのコミットに対してこれらのテストを実行したいと思います。

Github アクション

これらは、ビルド、テスト、デプロイメントのパイプラインを自動化できる継続的インテグレーションおよび継続的デリバリー (CI/CD) プラットフォームです。
Github Actions を使用すると、リポジトリ内で他のイベントが発生したときにワークフローを実行できます

Github ワークフロー

ワークフローは、1 つ以上のジョブを実行する構成可能な自動プロセスです。ワークフローは、リポジトリにチェックインされた YAML ファイルによって定義され、リポジトリ内のイベントによってトリガーされると実行されます。ワークフローは .github/workfows.

で定義されます。
  • イベント は、ワークフローの実行をトリガーするリポジトリ内の特定のアクティビティです。私たちの場合、これはブランチへのプッシュになります。
  • ジョブ は、同じランナー上で実行されるワークフロー内の一連のステップです。
  • Runners は、ワークフローがトリガーされたときにワークフローを実行するサーバーです。各ランナーは一度に 1 つのジョブを実行できます。

ワークフローYaml

  • 最初のステップは、yaml ファイルが配置される .github/workflows フォルダーを作成することです。
  • 次に yaml ファイルを作成します。この場合は ci-test.yml という名前を付けます。
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

Yaml の説明

  • 最初の部分はアクションに名前を付けることです。この場合は ci-test です。

ワークフロートリガー

  • 2 番目のセクションでは、トリガーについて説明します。アクションをトリガーするイベント。このファイルには、メイン ブランチを対象とするプッシュプル リクエストという、このジョブの実行をトリガーする 2 つのイベントがあります。これにより、運用を目的としたすべてのコード変更がマージ前にテストされ、プロジェクトの整合性が維持されます。

環境変数

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 データベースが必要です。

  • PostgreSQL コンテナは、公式の PostgreSQL Docker イメージを使用して作成されます。
  • コンテナは前に宣言した環境変数で構成されています

ワークフローのステップ

  • 最初のステップはリポジトリ コードをチェックアウトすることです
jobs:
  build:
    name: tests
    runs-on: ubuntu-latest

この行はリポジトリの最新バージョンを取得し、すべてのソース ファイルへのアクセスを提供します。

  • 2 番目のステップは、ランナーで golang をセットアップすることです。
- uses: actions/checkout@v4
  • 3 番目のステップは、ランナーに dbmate をインストールすることです。 Dbmate は、アプリケーションの移行を管理する移行ツールです。
- name: Set up Go
  uses: actions/setup-go@v4
  with:
    go-version: "1.22"
  • 4 番目は、データベース URL を構築することです
- 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

  • 5 番目は、データベースの移行を実行して、日付をシードする関係を設定します。
- 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

  • 最後から 2 番目のアクションは、データベースにテスト データをシードすることです。
- 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 Action を採用する利点。

これまで見てきたように、github アクションでは

を実行できます。
  1. 自動テスト - コードを変更するたびに一貫してテストを実行します。
  2. データベース統合 - テスト用の実際の postgres 環境を提供し、運用環境をシミュレートします
  3. 再現可能な環境 - Github アクションはコンテナ化されたサービスと事前定義されたステップを使用して、すべての実行で一貫した結果を保証します。
  4. 高速フィードバック ループ - 開発者は、何かが壊れた場合に迅速なフィードバックを受け取ることができ、より迅速な問題解決が可能になります。
  5. コラボレーションの簡素化 - すべての貢献者の変更が現れる前に検証され、コードの品質とプロジェクトの安定性が維持されます

結論

GitHub Actions を活用することで、このワークフローはテストとデータベースのセットアップを合理化し、堅牢で信頼性の高いソフトウェア開発を保証します。
github リポジトリにアクセスして、上記のアクションでテストされているコードを表示します。

以上がGitHub 上の Go アプリケーションのシームレスな統合テスト PostgreSQL アクションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。