Maison >développement back-end >Golang >Tests d'intégration transparents pour votre application Go sur les actions GitHub avec PostgreSQL
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.
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
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.
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
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.
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.
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.
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.
- 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
- 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
Comme nous l'avons vu, l'action github vous permet de le faire
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!