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

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

Nov 28, 2024 pm 09:55 PM

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 までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Golang vs. Python:パフォーマンスとスケーラビリティ Golang vs. Python:パフォーマンスとスケーラビリティ Apr 19, 2025 am 12:18 AM

Golangは、パフォーマンスとスケーラビリティの点でPythonよりも優れています。 1)Golangのコンピレーションタイプの特性と効率的な並行性モデルにより、高い並行性シナリオでうまく機能します。 2)Pythonは解釈された言語として、ゆっくりと実行されますが、Cythonなどのツールを介してパフォーマンスを最適化できます。

Golang and C:Concurrency vs. Raw Speed Golang and C:Concurrency vs. Raw Speed Apr 21, 2025 am 12:16 AM

Golangは並行性がCよりも優れていますが、Cは生の速度ではGolangよりも優れています。 1)Golangは、GoroutineとChannelを通じて効率的な並行性を達成します。これは、多数の同時タスクの処理に適しています。 2)Cコンパイラの最適化と標準ライブラリを介して、極端な最適化を必要とするアプリケーションに適したハードウェアに近い高性能を提供します。

ゴーを始めましょう:初心者のガイド ゴーを始めましょう:初心者のガイド Apr 26, 2025 am 12:21 AM

goisidealforforbeginnersandsutable forcloudnetworkservicesduetoitssimplicity、andconcurrencyfeatures.1)installgofromtheofficialwebsiteandverify with'goversion'.2)

Golang vs. C:パフォーマンスと速度の比較 Golang vs. C:パフォーマンスと速度の比較 Apr 21, 2025 am 12:13 AM

Golangは迅速な発展と同時シナリオに適しており、Cは極端なパフォーマンスと低レベルの制御が必要なシナリオに適しています。 1)Golangは、ごみ収集と並行機関のメカニズムを通じてパフォーマンスを向上させ、高配列Webサービス開発に適しています。 2)Cは、手動のメモリ管理とコンパイラの最適化を通じて究極のパフォーマンスを実現し、埋め込みシステム開発に適しています。

Golangの影響:速度、効率、シンプルさ Golangの影響:速度、効率、シンプルさ Apr 14, 2025 am 12:11 AM

speed、効率、およびシンプル性をspeedsped.1)speed:gocompilesquilesquicklyandrunseffictient、理想的なlargeprojects.2)効率:等系dribribraryreducesexexternaldedenciess、開発効果を高める3)シンプルさ:

CとGolang:パフォーマンスが重要な場合 CとGolang:パフォーマンスが重要な場合 Apr 13, 2025 am 12:11 AM

Cは、ハードウェアリソースと高性能の最適化が必要なシナリオにより適していますが、Golangは迅速な開発と高い並行性処理が必要なシナリオにより適しています。 1.Cの利点は、ハードウェア特性と高い最適化機能に近いものにあります。これは、ゲーム開発などの高性能ニーズに適しています。 2.Golangの利点は、その簡潔な構文と自然な並行性サポートにあり、これは高い並行性サービス開発に適しています。

Golang vs. Python:重要な違​​いと類似点 Golang vs. Python:重要な違​​いと類似点 Apr 17, 2025 am 12:15 AM

GolangとPythonにはそれぞれ独自の利点があります。Golangは高性能と同時プログラミングに適していますが、PythonはデータサイエンスとWeb開発に適しています。 Golangは同時性モデルと効率的なパフォーマンスで知られていますが、Pythonは簡潔な構文とリッチライブラリエコシステムで知られています。

GolangとC:パフォーマンスのトレードオフ GolangとC:パフォーマンスのトレードオフ Apr 17, 2025 am 12:18 AM

GolangとCのパフォーマンスの違いは、主にメモリ管理、コンピレーションの最適化、ランタイム効率に反映されています。 1)Golangのゴミ収集メカニズムは便利ですが、パフォーマンスに影響を与える可能性があります。

See all articles