「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > GitHub 上の Go アプリケーションのシームレスな統合テスト PostgreSQL アクション

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

2024 年 11 月 26 日に公開
ブラウズ:857

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

環境変数

Github ワークフローは、グローバル環境変数とジョブ固有の環境変数をサポートします。この変数は、後で yaml ファイルで使用する postgres 認証情報を記述します。

仕事

jobs:
  build:
    name: tests
    runs-on: ubuntu-latest

ここでは、コードの構築とテストというコアタスクを実行するジョブに名前を割り当てました。
Runner - Ubuntu 仮想マシンであるワークフローが実行される場所を説明します。

サービス

Github Actions ワークフローを使用すると、サービスを定義できます。この場合、テストを実行するための postgres データベースが必要です。

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

ワークフローのステップ

  • 最初のステップはリポジトリ コードをチェックアウトすることです
- uses: actions/checkout@v4

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

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

  • 4 番目は、データベース URL を構築することです
- 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

  • 5 番目は、データベースの移行を実行して、日付をシードする関係を設定します。
- name: Make Migrations
  run: make migrations URL=${{ env.DB_URL }}
  • 最後から 2 番目のアクションは、データベースにテスト データをシードすることです。
- name: Seed test DB
  run: go run db/seed.go

seed.go ファイルは、テスト データをデータにシードします。現実的なテスト環境をセットアップします。このファイルをさらに詳しく調べるには、ここにアクセスしてください

最後の段階では、make ファイルを使用して go テストを実行します

- name: Test
  run: make test

このワークフローは、プル リクエストを行うか、コードをメイン ブランチにプッシュするたびに実行されるようになります

Github Action を採用する利点。

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

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

結論

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

リリースステートメント この記事は次の場所に転載されています: https://dev.to/sha254/simless-integration-testing-for-your-go-application-on-github-actions-with-postgresql-5dne?1 侵害がある場合は、 Study_golang@163 .comdelete に連絡してください
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3