Rumah >pembangunan bahagian belakang >Golang >Ujian Penyepaduan Lancar untuk Aplikasi Go Anda pada Tindakan GitHub dengan PostgreSQL

Ujian Penyepaduan Lancar untuk Aplikasi Go Anda pada Tindakan GitHub dengan PostgreSQL

Linda Hamilton
Linda Hamiltonasal
2024-11-28 21:55:19673semak imbas

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

pengenalan

Ujian integrasi adalah penting untuk memastikan aplikasi Go anda berfungsi dengan sempurna dengan kebergantungan luaran seperti pangkalan data. Dalam blog ini, kami akan meneroka cara menyediakan dan menjalankan ujian integrasi untuk aplikasi Go menggunakan Tindakan GitHub. Kami akan mengkonfigurasi pangkalan data PostgreSQL dalam saluran paip CI, menyelaraskan proses ujian dan memastikan pangkalan kod anda boleh dipercayai dan sedia pengeluaran dengan setiap dorongan. Jom selami!.

Kami mencipta ujian unit dan penyepaduan dalam artikel sebelumnya di sini!. Dalam artikel ini kami ingin menjalankan ujian ini pada semua komit pada repositori github kami.

Tindakan Github

Ia adalah platform penyepaduan berterusan dan penghantaran berterusan (CI/CD) yang membolehkan anda mengautomasikan saluran paip binaan, ujian dan penggunaan anda.
Tindakan Github membolehkan anda menjalankan aliran kerja apabila peristiwa lain berlaku dalam repositori anda

Aliran Kerja Github

Aliran kerja ialah proses automatik yang boleh dikonfigurasikan yang akan menjalankan satu atau lebih kerja. Aliran kerja ditakrifkan oleh fail YAML yang didaftar masuk ke repositori anda dan akan dijalankan apabila dicetuskan oleh peristiwa dalam repositori anda. Aliran kerja ditakrifkan dalam .github/workfows.

  • Acara ialah aktiviti khusus dalam repositori yang mencetuskan larian aliran kerja. Dalam kes kami, ini akan menjadi dorongan kepada cawangan kami.
  • Pekerjaan ialah satu set langkah dalam aliran kerja yang dilaksanakan pada pelari yang sama.
  • Runners ialah pelayan yang menjalankan aliran kerja anda apabila ia dicetuskan. Setiap pelari boleh berlari satu kerja pada satu masa.

Aliran Kerja Yaml

  • Langkah pertama ialah mencipta folder .github/workflows di mana fail yaml kami akan ditempatkan.
  • Seterusnya adalah untuk mencipta fail yaml dalam kes ini kami akan menamakannya 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

Penerangan Yaml

  • Bahagian pertama ialah menamakan tindakan dalam kes ini ialah ci-test.

Pencetus Aliran Kerja

  • Bahagian kedua menerangkan cetus. Peristiwa yang mencetuskan tindakan. Dalam fail ini, kami mempunyai dua peristiwa yang akan mencetuskan perjalanan kerja ini, tolak dan permintaan tarik menyasarkan cawangan utama. Ini memastikan bahawa setiap perubahan kod yang dimaksudkan untuk pengeluaran diuji sebelum digabungkan, mengekalkan integriti projek.

Pembolehubah Persekitaran

Aliran kerja Github menyokong pembolehubah persekitaran global dan khusus pekerjaan. Pembolehubah ini menerangkan kelayakan postgres yang akan kami gunakan kemudian dalam fail yaml kami.

Kerja

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

Di sini kami telah memberikan nama kepada kerja yang akan melaksanakan tugas teras, yang membina dan menguji kod kami.
Runner - menerangkan di mana aliran kerja akan dijalankan iaitu mesin maya Ubuntu.

Perkhidmatan

Aliran kerja Github Actions membolehkan anda menentukan perkhidmatan. Dalam kes ini, kami memerlukan pangkalan data postgres untuk menjalankan ujian kami.

  • Bekas PostgreSQL dibuat menggunakan imej PostgreSQL Docker rasmi.
  • Bekas dikonfigurasikan dengan pembolehubah persekitaran yang kami nyatakan sebelum ini

Langkah Aliran Kerja

  • Langkah pertama ialah menyemak kod repositori
jobs:
  build:
    name: tests
    runs-on: ubuntu-latest

Barisan ini mengambil versi terbaharu repositori, memberikan akses kepada semua fail sumber.

  • Langkah kedua ialah setup golang dalam runner.
- uses: actions/checkout@v4
  • Langkah ketiga ialah memasang dbmate pada runner kami. Dbmate ialah alat migrasi yang akan mengurus migrasi aplikasi.
- name: Set up Go
  uses: actions/setup-go@v4
  with:
    go-version: "1.22"
  • Keempat ialah membina url db
- 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

  • Kelima ialah penghijrahan runnig db untuk menyediakan hubungan kita yang akan membenamkan tarikh
- 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

  • Tindakan kedua terakhir adalah untuk menyemai pangkalan data dengan data ujian.
- name: Make Migrations
  run: make migrations URL=${{ env.DB_URL }}

Fail seed.go menyemai data ase dengan data ujian. Menyediakan persekitaran ujian yang realistik. Untuk memeriksa fail ini dengan lebih lanjut, lawati di sini

Peringkat terakhir ialah melaksanakan ujian go kami menggunakan fail make

- name: Seed test DB
  run: go run db/seed.go

Aliran kerja ini kini akan dijalankan setiap kali kami membuat permintaan tarik atau tolak kod ke cawangan utama kami

Beberapa Kelebihan Mengguna pakai Tindakan Github.

Seperti yang telah kita lihat tindakan github membolehkan anda melakukan

  1. Ujian Automatik - jalankan ujian secara konsisten pada setiap perubahan kod.
  2. Mempunyai Penyepaduan Pangkalan Data - menyediakan persekitaran postgres sebenar untuk ujian, mensimulasikan keadaan pengeluaran
  3. Persekitaran Boleh Dihasilkan - Tindakan Github menggunakan perkhidmatan kontena dan langkah yang dipratentukan untuk memastikan hasil yang konsisten merentas semua larian.
  4. Gelung Maklum Balas Pantas - Mereka membolehkan pembangun menerima maklum balas pantas jika sesuatu rosak, membolehkan penyelesaian isu yang lebih pantas.
  5. Kolaborasi Ringkas - Mereka memastikan semua perubahan penyumbang disahkan sebelum muncul, mengekalkan kualiti kod dan kestabilan projek

Kesimpulan

Dengan memanfaatkan Tindakan GitHub, aliran kerja ini memperkemas ujian dan persediaan pangkalan data, memastikan pembangunan perisian yang mantap dan boleh dipercayai.
Lawati repositori github untuk melihat kod yang sedang diuji dengan tindakan yang diterangkan di atas.

Atas ialah kandungan terperinci Ujian Penyepaduan Lancar untuk Aplikasi Go Anda pada Tindakan GitHub dengan PostgreSQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn