cari
Rumahpembangunan bahagian belakangGolangUjian Penyepaduan Lancar untuk Aplikasi Go Anda pada Tindakan GitHub dengan PostgreSQL

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
Memilih Antara Golang dan Python: Yang sesuai untuk projek andaMemilih Antara Golang dan Python: Yang sesuai untuk projek andaApr 19, 2025 am 12:21 AM

Golangisidealforperformance-CriticalApplicationsandCurrentProgramming, pemprosesDataSincience.2) forhigh-thoRencurrencyFiSurs.2 fordata -dataSdataS.2

Golang: Konvensyen dan prestasi dalam tindakanGolang: Konvensyen dan prestasi dalam tindakanApr 19, 2025 am 12:20 AM

Golang mencapai kesesuaian yang cekap melalui goroutine dan saluran: 1.Goroutine adalah benang ringan, bermula dengan kata kunci Go; 2. Channel digunakan untuk komunikasi yang selamat antara goroutin untuk mengelakkan keadaan kaum; 3. Contoh penggunaan menunjukkan penggunaan asas dan lanjutan; 4. Kesilapan umum termasuk kebuntuan dan persaingan data, yang dapat dikesan oleh Gorun-Race; 5. Pengoptimuman prestasi mencadangkan mengurangkan penggunaan saluran, dengan munasabah menetapkan bilangan goroutine, dan menggunakan sync.pool untuk menguruskan memori.

Golang vs Python: Bahasa mana yang harus anda pelajari?Golang vs Python: Bahasa mana yang harus anda pelajari?Apr 19, 2025 am 12:20 AM

Golang lebih sesuai untuk pengaturcaraan sistem dan aplikasi konvensional yang tinggi, manakala Python lebih sesuai untuk sains data dan perkembangan pesat. 1) Golang dibangunkan oleh Google, menaip secara statik, menekankan kesederhanaan dan kecekapan, dan sesuai untuk senario konvensional yang tinggi. 2) Python dicipta oleh Guidovan Rossum, sintaks yang dinamik, sintaks ringkas, aplikasi yang luas, sesuai untuk pemula dan pemprosesan data.

Golang vs Python: Prestasi dan SkalaGolang vs Python: Prestasi dan SkalaApr 19, 2025 am 12:18 AM

Golang lebih baik daripada Python dari segi prestasi dan skalabiliti. 1) Ciri-ciri jenis kompilasi Golang dan model konkurensi yang cekap menjadikannya berfungsi dengan baik dalam senario konvensional yang tinggi. 2) Python, sebagai bahasa yang ditafsirkan, melaksanakan perlahan -lahan, tetapi dapat mengoptimumkan prestasi melalui alat seperti Cython.

Golang vs Bahasa Lain: PerbandinganGolang vs Bahasa Lain: PerbandinganApr 19, 2025 am 12:11 AM

GO Language mempunyai kelebihan yang unik dalam pengaturcaraan serentak, prestasi, lengkung pembelajaran, dan lain -lain: 1 Pengaturcaraan serentak direalisasikan melalui goroutine dan saluran, yang ringan dan cekap. 2. Kelajuan penyusunan adalah pantas dan prestasi operasi hampir dengan bahasa C. 3. Tatabahasa adalah ringkas, lengkung pembelajaran lancar, dan ekosistemnya kaya.

Golang dan Python: Memahami PerbezaanGolang dan Python: Memahami PerbezaanApr 18, 2025 am 12:21 AM

Perbezaan utama antara Golang dan Python adalah model konvensional, sistem jenis, prestasi dan kelajuan pelaksanaan. 1. Golang menggunakan model CSP, yang sesuai untuk tugas serentak yang tinggi; Python bergantung pada multi-threading dan gil, yang sesuai untuk tugas I/O-intensif. 2. Golang adalah jenis statik, dan Python adalah jenis dinamik. 3. Golang mengumpulkan kelajuan pelaksanaan bahasa adalah cepat, dan pembangunan bahasa yang ditafsirkan Python adalah pantas.

Golang vs C: Menilai perbezaan kelajuanGolang vs C: Menilai perbezaan kelajuanApr 18, 2025 am 12:20 AM

Golang biasanya lebih perlahan daripada C, tetapi Golang mempunyai lebih banyak kelebihan dalam pengaturcaraan serentak dan kecekapan pembangunan: 1) Koleksi sampah Golang dan model konkurensi menjadikannya berfungsi dengan baik dalam senario konvensyen yang tinggi; 2) C memperoleh prestasi yang lebih tinggi melalui pengurusan memori manual dan pengoptimuman perkakasan, tetapi mempunyai kerumitan pembangunan yang lebih tinggi.

Golang: bahasa utama untuk pengkomputeran awan dan devOpsGolang: bahasa utama untuk pengkomputeran awan dan devOpsApr 18, 2025 am 12:18 AM

Golang digunakan secara meluas dalam pengkomputeran awan dan devOps, dan kelebihannya terletak pada kesederhanaan, kecekapan dan keupayaan pengaturcaraan serentak. 1) Dalam pengkomputeran awan, Golang dengan cekap mengendalikan permintaan serentak melalui mekanisme goroutine dan saluran. 2) Di DevOps, kompilasi cepat Golang dan ciri-ciri silang platform menjadikannya pilihan pertama untuk alat automasi.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Dreamweaver Mac版

Dreamweaver Mac版

Alat pembangunan web visual

Versi Mac WebStorm

Versi Mac WebStorm

Alat pembangunan JavaScript yang berguna

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa