recherche
Maisondéveloppement back-endGolangTests d'intégration transparents pour votre application Go sur les actions GitHub avec PostgreSQL

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

Introduction

Les tests d'intégration sont cruciaux pour garantir que votre application Go fonctionne parfaitement avec des dépendances externes telles que des bases de données. Dans ce blog, nous explorerons comment configurer et exécuter des tests d'intégration pour une application Go à l'aide de GitHub Actions. Nous configurerons une base de données PostgreSQL dans le pipeline CI, rationaliserons le processus de test et garantirons que votre base de code est fiable et prête pour la production à chaque poussée. Allons-y !.

Nous avons créé des tests unitaires et des intégrations dans un article précédent c'est par ici !. Dans cet article, nous souhaitons exécuter ces tests sur tous les commits dans notre référentiel github.

Actions GitHub

Il s'agit d'une plateforme d'intégration continue et de livraison continue (CI/CD) qui vous permet d'automatiser votre pipeline de build, de test et de déploiement.
Github Actions vous permet d'exécuter des workflows lorsque d'autres événements se produisent dans votre référentiel

Flux de travail Github

Un workflow est un processus automatisé configurable qui exécutera une ou plusieurs tâches. Les workflows sont définis par un fichier YAML archivé dans votre référentiel et s'exécuteront lorsqu'ils seront déclenchés par un événement dans votre référentiel. Les workflows sont définis dans le .github/workfows.

  • Un Événement est une activité spécifique dans un référentiel qui déclenche l'exécution d'un workflow. Dans notre cas, ce sera un coup de pouce vers notre succursale.
  • Jobs est un ensemble d'étapes dans un flux de travail exécuté sur le même coureur.
  • Runners est un serveur qui exécute vos workflows lorsqu'ils sont déclenchés. Chaque exécuteur peut exécuter une seule tâche à la fois.

Flux de travail Yaml

  • La première étape serait de créer le dossier .github/workflows où se trouvera notre fichier yaml.
  • Ensuite, créez le fichier yaml. Dans ce cas, nous le nommerons 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 descriptif

  • La première partie est de nommer l'action dans ce cas c'est ci-test.

Déclencheurs de flux de travail

  • La deuxième section décrit les déclencheurs. Événements qui déclenchent l'action. Dans ce fichier nous avons deux événements qui vont déclencher l'exécution de ces jobs, des pushes et des pull request ciblant les branches principales. Cela garantit que chaque modification de code destinée à la production est testée avant d'être fusionnée, préservant ainsi l'intégrité du projet.

Variables d'environnement

Les workflows Github prennent en charge les variables d'environnement globales et spécifiques à la tâche. Ces variables décrivent les informations d'identification postgres que nous utiliserons plus tard dans notre fichier yaml.

Emploi

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

Ici, nous avons attribué un nom au travail qui effectuera les tâches principales, à savoir la construction et le test de notre code.
Runner - décrit l'endroit où le flux de travail s'exécutera, qui sera une machine virtuelle Ubuntu.

Services

Les workflows Github Actions vous permettent de définir des services. Dans ce cas, nous avons besoin d'une base de données Postgres sur laquelle exécuter nos tests.

  • Un conteneur PostgreSQL est créé à l'aide de l'image Docker officielle de PostgreSQL.
  • Le conteneur est configuré avec les variables d'environnement que nous avons déclarées précédemment

Étapes du flux de travail

  • La première étape consiste à extraire le code du référentiel
jobs:
  build:
    name: tests
    runs-on: ubuntu-latest

Cette ligne récupère la dernière version du référentiel, donnant accès à tous les fichiers sources.

  • La deuxième étape consiste à configurer le golang dans le coureur.
- uses: actions/checkout@v4
  • La troisième étape consiste à installer dbmate sur notre coureur. Dbmate est un outil de migration qui gérera les migrations d'applications.
- name: Set up Go
  uses: actions/setup-go@v4
  with:
    go-version: "1.22"
  • Quatrièmement, construire l'URL de la base de données
- 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

  • Cinquièmement, nous exécutons des migrations de base de données pour configurer nos relations qui seront amorcées avec la date.
- 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

  • L'avant-dernière action consiste à ensemencer la base de données avec des données de test.
- name: Make Migrations
  run: make migrations URL=${{ env.DB_URL }}

Le fichier seed.go amorce la base de données avec les données de test. Mise en place d'un environnement de test réaliste. Pour inspecter ce fichier plus en détail, visitez ici

La dernière étape consiste à exécuter notre test go à l'aide du fichier make

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

Ce workflow s'exécutera désormais chaque fois que nous ferons une pull request ou pousserons du code vers notre branche principale

Quelques avantages de l'adoption de l'action Github.

Comme nous l'avons vu, l'action github vous permet de le faire

  1. Tests automatisés : exécutez des tests de manière cohérente à chaque modification de code.
  2. Avoir des intégrations de bases de données - fournir un véritable environnement Postgres pour les tests, simulant les conditions de production
  3. Environnement reproductible - L'action Github utilise des services conteneurisés et des étapes prédéfinies pour garantir des résultats cohérents dans toutes les exécutions.
  4. Boucle de commentaires rapides : ils permettent aux développeurs de recevoir des commentaires rapides en cas de problème, ce qui permet une résolution plus rapide des problèmes.
  5. Collaboration simplifiée – Ils garantissent que les modifications de tous les contributeurs sont vérifiées avant leur apparition, maintenant ainsi la qualité du code et la stabilité du projet

Conclusions

En tirant parti des actions GitHub, ce flux de travail rationalise les tests et la configuration de la base de données, garantissant ainsi un développement logiciel robuste et fiable.
Visitez le référentiel github pour afficher le code en cours de test avec l'action décrite ci-dessus.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Golang vs Python: concurrence et multithreadingGolang vs Python: concurrence et multithreadingApr 17, 2025 am 12:20 AM

Golang convient plus à des tâches de concurrence élevées, tandis que Python présente plus d'avantages dans la flexibilité. 1. Golang gère efficacement la concurrence par le goroutine et le canal. 2. Python repose sur le filetage et l'asyncio, qui est affecté par GIL, mais fournit plusieurs méthodes de concurrence. Le choix doit être basé sur des besoins spécifiques.

Golang et C: les compromis en performanceGolang et C: les compromis en performanceApr 17, 2025 am 12:18 AM

Les différences de performance entre Golang et C se reflètent principalement dans la gestion de la mémoire, l'optimisation de la compilation et l'efficacité du temps d'exécution. 1) Le mécanisme de collecte des ordures de Golang est pratique mais peut affecter les performances, 2) la gestion manuelle de C et l'optimisation du compilateur sont plus efficaces dans l'informatique récursive.

Golang vs Python: applications et cas d'utilisationGolang vs Python: applications et cas d'utilisationApr 17, 2025 am 12:17 AM

ChooseGolangForHighPerformanceAnd Concurrence, IdealForBackendServices andNetworkProgramming; selectPythonForrapidDevelopment, dataScience et MachineLearningDuetOtsSertilityAnStensiveLibrarary.

Golang vs Python: différences et similitudes clésGolang vs Python: différences et similitudes clésApr 17, 2025 am 12:15 AM

Golang et Python ont chacun leurs propres avantages: Golang convient aux performances élevées et à la programmation simultanée, tandis que Python convient à la science des données et au développement Web. Golang est connu pour son modèle de concurrence et ses performances efficaces, tandis que Python est connu pour sa syntaxe concise et son écosystème de bibliothèque riche.

Golang vs Python: Courbe de facilité d'utilisation et d'apprentissageGolang vs Python: Courbe de facilité d'utilisation et d'apprentissageApr 17, 2025 am 12:12 AM

Dans quels aspects Golang et Python sont-ils plus faciles à utiliser et à avoir une courbe d'apprentissage plus lisse? Golang est plus adapté aux besoins élevés de concurrence et de haute performance, et la courbe d'apprentissage est relativement douce pour les développeurs ayant une formation en langue C. Python est plus adapté à la science des données et au prototypage rapide, et la courbe d'apprentissage est très fluide pour les débutants.

La course de performance: Golang vs CLa course de performance: Golang vs CApr 16, 2025 am 12:07 AM

Golang et C ont chacun leurs propres avantages dans les compétitions de performance: 1) Golang convient à une concurrence élevée et à un développement rapide, et 2) C fournit des performances plus élevées et un contrôle fin. La sélection doit être basée sur les exigences du projet et la pile de technologie d'équipe.

Golang vs C: Exemples de code et analyse des performancesGolang vs C: Exemples de code et analyse des performancesApr 15, 2025 am 12:03 AM

Golang convient au développement rapide et à la programmation simultanée, tandis que C est plus adapté aux projets qui nécessitent des performances extrêmes et un contrôle sous-jacent. 1) Le modèle de concurrence de Golang simplifie la programmation de concurrence via le goroutine et le canal. 2) La programmation du modèle C fournit un code générique et une optimisation des performances. 3) La collecte des ordures de Golang est pratique mais peut affecter les performances. La gestion de la mémoire de C est complexe mais le contrôle est bien.

Impact de Golang: vitesse, efficacité et simplicitéImpact de Golang: vitesse, efficacité et simplicitéApr 14, 2025 am 12:11 AM

GOIMIMPACTSDEVENCEMENTSPOSITIVEMENTS INSPECT, EFFICACTION ET APPLICATION.1) VITESSE: GOCOMPILESQUICKLYANDRUNSEFFIÉMENT, IDEALFORLARGEPROROSTS.2) Efficacité: ITSCOMPEHENSIVESTANDARDLIBRARYREDUCEEXTERNEDENDENCES, EnhancingDevelovefficiency.3) Simplicité: Simplicité: Implicité de la manière

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Adaptateur de serveur SAP NetWeaver pour Eclipse

Adaptateur de serveur SAP NetWeaver pour Eclipse

Intégrez Eclipse au serveur d'applications SAP NetWeaver.

Navigateur d'examen sécurisé

Navigateur d'examen sécurisé

Safe Exam Browser est un environnement de navigation sécurisé permettant de passer des examens en ligne en toute sécurité. Ce logiciel transforme n'importe quel ordinateur en poste de travail sécurisé. Il contrôle l'accès à n'importe quel utilitaire et empêche les étudiants d'utiliser des ressources non autorisées.

Télécharger la version Mac de l'éditeur Atom

Télécharger la version Mac de l'éditeur Atom

L'éditeur open source le plus populaire

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

Dreamweaver Mac

Dreamweaver Mac

Outils de développement Web visuel