Рубрики
Uncategorized

Тестовая автоматизация для Laravel 7 и MySQL с действиями GitHub

Действия GitHub (https://github.com/features/xations) — мощная услуга, предоставленная GitHub для Con … Теги от Laravel, MySQL, CICD, Github.

Действия GitHub ( https://github.com/features/4 ) — мощная услуга, предоставляемая Github Для непрерывной интеграции и непрерывной доставки.

Действия GitHub позволяют выполнять некоторые команды, когда срабатывает событие GitHub. Например, вы можете автоматизировать выполнение модульных тестов на вашу кодовую базу при точке вашего кода в репозиторий.

С действиями GitHub вы можете:

  • Настройка вашего бегун или контейнер (с вашим стеком: база данных, компиляторы, исполняемые файлы, веб-сервер …);
  • получить свой код из репозитория и хранить в вашем контейнере;
  • Настройка вашего Дополнительные услуги как база данных MySQL;
  • Настроить Ваше приложение (настройте соединение с базой данных, генерировать все необходимые ключи, разминка кэш, исправлений);
  • Выполнить некоторая команда (например, тестовый набор через phpunit).

Сценарий, который я хотел бы объяснить вам:

У меня есть веб-приложение на основе LARAVAVE 7, каждый раз, когда я продвинул новый код на разрабатывающей ветке на репозитории GitHub, я хотел бы выполнить автоматические модульные тесты и тесты функций, используя услуги MySQL.

Установите свой первый рабочий процесс с действием GitHub

Давайте начнем строить файл рабочего процесса с нуля.

В вашем каталоге проекта необходимо создать новый файл в каталоге .gitub/Workflows.

touch .github/workflows/laravel_phpunit.yml

Ямл Файл будет содержать 3 основных раздела: Имя , на и рабочие места .

  • Имя : имя рабочего процесса;
  • на : событие, которое вызывает выполнение рабочего процесса. Это может быть также массив (поэтому действие может быть вызвано несколькими событиями);
  • Работа : список заданий для выполнения. По умолчанию задания выполняются параллельно. Вы можете определить своего рода деревья зависимости с нужно Директива, если вы хотите иметь некоторую последовательность выполнения вместо параллельного исполнения. В этом случае мы будем использовать только одну работу. Итак, никакой проблемы зависимости для нас.

Имя: Определить имя

Вы можете определить имя вашего рабочего процесса. Это имя используется в пользовательском интерфейсе GitHub Actions для группировки отчетов и для управления рабочими процессами.

На: Определите события

Вы можете определить Когда запустить рабочий процесс. Например, вы можете определить, когда вы нажимаете свой код на Мастер и Развивать филиал:

on:
  push:
    branches: [ master, develop ]

Вы можете определить ветки владелец , Развивать И все особенность ветви:

on:
  push:
    branches: [ master, develop. feature/** ]

Или вы можете определить также запрос на тягу на ветку Master:

on:
  push:
    branches: [ master, develop, feature/** ]
  pull_request:
    branches: [ master ]

Работа: определить работу

С рабочим процессом вы можете определить одну или несколько рабочих мест. Работа — это определенная задача, которая должна быть выполнена в рабочем процессе. Вы можете настроить для запуска нескольких заданий параллельно или с некоторыми зависимостями (например: провести задание «Тест» только тогда, когда задание «Создание активов» завершено)

Работа: бежит на

Работа может быть выполнена на определенном контейнере, который запускает операционную систему. Для Laravel обычно я использую последнюю версию Ubuntu.

jobs:
  laravel-test-withdb:
    runs-on: ubuntu-latest

Работа: база данных MySQL

На работе ( Jobs ) Раздел Вы можете добавить также некоторые сервисные контейнеры. Например, если вы создаете работу, которая нуждается в MySQL Service, вы можете добавить Сервис Sub раздел. Эта услуга может использоваться вашими сценариями и приложениями, которые запускаются в текущем задании. Например, в моем случае я создаю работу для прогонских испытаний на мою заявку Laravel. Для этого мне также нужна база данных. Иногда я мог бы добавить базу данных SQLite, что легче настроить, но, вероятно, если вы хотите запустить тест с той же базой данных, что у вас есть на производстве, возможно, вы можете предпочесть иметь экземпляр MySQL.

    services:
      # mysql-service Label used to access the service container
      mysql-service:
        # Docker Hub image (also with version)
        image: mysql:5.7
        env:
          ## Accessing to Github secrets, where you can store your configuration
          MYSQL_ROOT_PASSWORD: ${{ secrets.DB_PASSWORD }}
          MYSQL_DATABASE: db_test
        ## map the "external" 33306 port with the "internal" 3306
        ports:
          - 33306:3306
        # Set health checks to wait until mysql database has started (it takes some seconds to start)
        options: >-
          --health-interval=10s
          --health-timeout=5s
          --health-retries=3

Самые важные вещи для выделения:

  • mysql-service Является ли метка для доступа к контейнеру обслуживания
  • MySQL: 5.7 Мы используем MySQL Image (версия 5.7)
  • секреты. Db_password Доступ к секретам GitHub, где вы можете хранить вашу конфигурацию
  • 33306: 3306 Мы отображаем «внешний» порт 33306 с «внутренним» одним 3306. В следующих шагах нам нужно будет использовать 33306 для доступа к услуге, поскольку контейнер обслуживания предоставляет 33306.
  • Mysqladmin Ping : Создание контейнера обслуживания может занять некоторое время. Таким образом, вам необходимо обязательно подождать, пока не начнется служба MySQL, и он готов принять соединения. В этом случае мы будем повторить еще в 3 раза каждые 10 секунд и с тайменами 5 секунд.

Шаги: Определите шаги

Каждая задания имеет несколько шагов. На каждом шаге вы можете «запустить» ваши команды или вы можете «использовать» некоторые стандартные действия.

После Ямл Синтаксис, каждый шаг начинается с «минус знак». Шаг, который использует стандартное действие, определяется с помощью « Использование » Директива, шаги, использующие пользовательские команды, идентифицируются « Имя » и « Run » Директива. » Имя «Используется в журнале выполнения как этикетка в Действия GitHub,» Беги «Используется для запуска команды. С « Run » Директива, которую вы можете определить команду с аргументами и параметрами. С « Run » Вы также можете перечислить набор команд.

    steps:
    - uses: actions/checkout@v2
    - name: Laravel Setup
      run: |
        cp .env.ci .env
        composer install -q --no-ansi --no-interaction --no-scripts --no-suggest --no-progress --prefer-dist
        php artisan key:generate
        chmod -R 777 storage bootstrap/cache
    - name: Execute tests (Unit and Feature tests) via PHPUnit
      env:
        DB_CONNECTION: mysql
        DB_DATABASE: db_test
        DB_PORT: 33306
        DB_USER: root
        DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
      run: |
        php artisan migrate
        vendor/phpunit/phpunit/phpunit

Позвольте мне пройти все шаги в Шаги раздел.

Первый шаг: Git Checkout

Первый шаг получает источники. Для этого действия GitHub имеют стандартное действие, идентифицируемое с помощью «Действия/Checkout @ v2». Для выполнения действий вам необходимо установить шаг:

    - uses: actions/checkout@v2

Вы можете использовать также Действия/Оформить заказ @ Мастер Если вы любите жить на краю.

Второй шаг: Настройка Larave

В Github Workflow вам нужно подумать о новой новой установке вашего веб-приложения каждый раз, когда вы выполняете рабочий процесс. Это означает, что вам нужно выполнить все вещи, необходимые для новой установки, как:

  • Создание .env файл;
  • Установить PHP пакеты;
  • Создайте ключ ( Ключ: генерировать );
  • Разрешения Точная настройка.

В Laravel вы можете использовать .env.env. Чтобы сохранить ключи и параметры для конфигурации среды. Например: Параметры подключения к базе данных, параметры подключения кэша, конфигурация SMTP и т. Д. Вы можете подготовить свой .env.ci С определенной конфигурацией для выполнения рабочих процессов и совершать его на репозиторий. В любом случае, мы переопределим позже какой-то параметр, как соединение с базой данных (некоторые секретные параметры, такие как пароль или токены доступа, которые вы не хотите хранить в .env.ci ).

Для установки пакета я предлагаю вам использовать эти варианты:

  • -q : избегайте вывода сообщений;
  • —no-ansi : отключить выход ANSI;
  • —Но взаимодействия Во избежание интересов, полезных для строительства Ci;
  • — Нет-скрипты : Избегайте выполнения скриптов, определенных в Composer.json ;
  • —Но-предложение : не показывайте предложение пакета;
  • —no-прогресс : Не показывайте дисплей прогресса, который может связываться с некоторыми терминалами или скриптами, которые не обрабатывают символы Backspace;
  • —prefer-dist : Предпочитаю скачать DIST и попробуйте пропустить историю Git.

Третий шаг: выполнить миграцию и тесты

Теперь у вас есть приложение Laravel, установленное в Runner и готово к использованию службы MySQL. Что мы собираемся сделать, это:

  • проведение миграции (создание таблиц в базе данных);
  • Выполнить тесты, используя phpunit Отказ

Обе команды, вероятно, им понадобится доступ к базе данных. Чтобы сделать это, мы должны быть уверены, что все параметры правильно настроены. На последнем шаге вы можете добавить env SUB раздел, где вы можете перечислить все ваши параметры. Эти параметры будут переопределять параметры, которые вы определены в вашем .env_file. И, вероятно, вы хотите избежать жесткого крепления некоторых параметров в вашем рабочем процессе _yaml файл. Для этого вы могли бы использовать Настройки -> Секреты Функциональность в вашем репозитории GitHub. В Настройки / Секреты Раздел Вы можете определить и перечислить все ваши «секреты», и вы можете использовать эти секреты, которые вы свой Ямл Файл с секреты. Db_password. . Обратите внимание, что вам нужно использовать секреты. префикс к доступу к переменным секретов. Db_password — это имя вашего секрета.

    - name: Execute tests (Unit and Feature tests) via PHPUnit
      env:
        DB_CONNECTION: mysql
        DB_DATABASE: db_test
        DB_PORT: 33306
        DB_USER: root
        DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
      run: |
        php artisan migrate
        vendor/phpunit/phpunit/phpunit

В таком случае:

  • Db_connection. : mysql. Потому что вы хотите получить доступ к базе данных MySQL;
  • Db_database. : db_test Имя базы данных, оно должно быть то же самое, что определено в Mysql_database в разделе MySQL Service;
  • Db_port : 33306 Внешний порт MySQL Service. Ты помнишь это? В разделе MySQL Service мы определили 33306: 3306 как « порты ».
  • Db_user : root — главный пользователь, настроенный в MySQL Service;
  • Db_password : Мы используем секрет имени Db_password Отказ

С этой конфигурацией вы можете выполнить миграцию и phpunit Отказ Как вы можете видеть, я использую phpunit в продавец каталог.

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

Давайте все автоматизируем!

Оригинал: «https://dev.to/robertobutti/test-automation-for-laravel-7-and-mysql-with-github-actions-ijj»