«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Бесшовное интеграционное тестирование вашего приложения Go на GitHub Actions с PostgreSQL

Бесшовное интеграционное тестирование вашего приложения Go на GitHub Actions с PostgreSQL

Опубликовано 26 ноября 2024 г.
Просматривать:979

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

Введение

Интеграционное тестирование имеет решающее значение для обеспечения безупречной работы вашего приложения Go с внешними зависимостями, такими как базы данных. В этом блоге мы рассмотрим, как настроить и запустить интеграционные тесты для приложения Go с помощью GitHub Actions. Мы настроим базу данных PostgreSQL в конвейере CI, упростим процесс тестирования и обеспечим надежность и готовность вашей кодовой базы к работе при каждом запуске. Давайте погрузимся!.

Мы создали модульное тестирование и интеграцию в предыдущей статье здесь!. В этой статье мы хотим запустить эти тесты для всех коммитов в нашем репозитории GitHub.

Действия на Гитхабе

Это платформа непрерывной интеграции и непрерывной доставки (CI/CD), которая позволяет автоматизировать конвейер сборки, тестирования и развертывания.
Действия Github позволяют запускать рабочие процессы, когда в вашем репозитории происходят другие события

Рабочие процессы на Github

Рабочий процесс — это настраиваемый автоматизированный процесс, который запускает одно или несколько заданий. Рабочие процессы определяются файлом YAML, зарегистрированным в вашем репозитории, и будут запускаться при запуске события в вашем репозитории. Рабочие процессы определены в файле .github/workfows.

  • Событие — это определенное действие в репозитории, которое запускает рабочий процесс. В нашем случае это будет пуш в нашу ветку.
  • Задания — это набор шагов рабочего процесса, который выполняется на одном и том же бегуне.
  • Runners — это сервер, который запускает ваши рабочие процессы при их запуске. Каждый бегун может одновременно выполнять одно задание.

Рабочий процесс Yaml

  • Первым шагом будет создание папки .github/workflows, в которой будет расположен наш файл yaml.
  • Далее нужно создать файл 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

Описание Ямла

  • Первая часть — назвать действие, в данном случае это ci-test.

Триггеры рабочего процесса

  • Во втором разделе описаны триггеры. События, которые запускают действие. В этом файле у нас есть два события, которые запускают выполнение этих заданий: push и pull-запросы, нацеленные на основные ветки. Это гарантирует, что каждое изменение кода, предназначенное для производства, будет проверено перед объединением, сохраняя целостность проекта.

Переменные среды

Рабочие процессы Github поддерживают глобальные и специфичные для задания переменные среды. Эти переменные описывают учетные данные postgres, которые мы будем использовать позже в нашем файле yaml.

Работа

jobs:
  build:
    name: tests
    runs-on: ubuntu-latest

Здесь мы присвоили имя заданию, которое будет выполнять основные задачи по созданию и тестированию нашего кода.
Runner — описывает, где будет выполняться рабочий процесс, то есть на виртуальной машине Ubuntu.

Услуги

Рабочие процессы действий Github позволяют определять сервисы. В этом случае нам нужна база данных Postgres для запуска наших тестов.

  • Контейнер PostgreSQL создается с использованием официального образа PostgreSQL Docker.
  • Контейнер настроен с использованием переменных среды, которые мы объявили ранее

Этапы рабочего процесса

  • Первый шаг — извлечь код репозитория
- uses: actions/checkout@v4

Эта строка извлекает последнюю версию репозитория, обеспечивая доступ ко всем исходным файлам.

  • Второй шаг — настроить golang в раннере.
- name: Set up Go
  uses: actions/setup-go@v4
  with:
    go-version: "1.22"
  • Третий шаг — установка dbmate на наш раннер. Dbmate — это инструмент миграции, который будет управлять миграцией приложений.
- 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

  • Четвертое — создать URL-адрес базы данных
- 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 }}
  • Второе последнее действие — заполнить базу данных тестовыми данными.
- name: Seed test DB
  run: go run db/seed.go

Файлseed.go заполняет базу данных тестовыми данными. Настройка реалистичной тестовой среды. Чтобы продолжить проверку этого файла, посетите здесь

Заключительный этап — выполнение нашего Go-теста с использованием make-файла

- name: Test
  run: make test

Теперь этот рабочий процесс будет запускаться каждый раз, когда мы делаем запрос на включение или отправку кода в нашу основную ветку

Некоторые преимущества использования Github Action.

Как мы видели, действия github позволяют вам делать

  1. Автоматическое тестирование — последовательно запускайте тесты при каждом изменении кода.
  2. Имейте интеграцию с базами данных — обеспечьте реальную среду Postgres для тестирования, моделирующую производственные условия
  3. Воспроизводимая среда — действие Github использует контейнерные сервисы и предопределенные шаги для обеспечения согласованных результатов при всех запусках.
  4. Цикл быстрой обратной связи. Он позволяет разработчикам получать быструю обратную связь, если что-то сломалось, что позволяет быстрее решать проблемы.
  5. Упрощенное сотрудничество: они гарантируют, что все изменения, вносимые участниками, проверяются перед их появлением, обеспечивая качество кода и стабильность проекта.

Выводы

Благодаря использованию GitHub Actions этот рабочий процесс упрощает тестирование и настройку базы данных, обеспечивая надежную и надежную разработку программного обеспечения.
Посетите репозиторий github, чтобы просмотреть код, который тестируется с помощью действия, описанного выше.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/sha254/seamless-integration-testing-for-your-go-application-on-github-actions-with-postgresql-5dne?1 Если есть какие-либо нарушения, пожалуйста, свяжитесь с Study_golang@163 .comdelete
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3