Next.js + Playwright + GitHub Actions Boilerplate

Комплексное Todo приложение с API и E2E тестами с включенными GitHub Actions.

Смотрите репозиторий: https://github.com/burakkantarci/playwright-todo-app

Этот проект представляет собой шаблон для демонстрации использования современных стеков вместе. Стек проекта:

  • Next.js Todo App
  • Playwright
  • Действия GitHub
  • Foresight

Мотивация

Рынок технологических стеков расширяется все больше и больше, и увидеть все в действии — самый простой способ убедиться в преимуществах. Я решил создать комбинацию Next.js, Playwright, GitHub Actions и Foresight для создания E2E стека для веб-приложения.

Все внешние инструменты бесплатны; поэтому вам не нужно ничего платить, чтобы попробовать этот стек.

Что будет в результате

  • Бессерверное приложение TODO на базе Next.js с Upstash — самый простой способ создания готового к производству веб-приложения.
  • Фреймворк для тестирования Playwright, который работает в любом браузере и на любой платформе. Он легкий и простой в освоении. Мы внедрим JUnit, чтобы можно было генерировать отчет о тестировании.
  • GitHub Actions для создания конвейера CI. Не нужно объяснять, что такое GitHub, но GitHub Actions имеет 2000 минут бесплатного выполнения CI; поэтому с его помощью легко автоматизировать все ваши программные рабочие процессы.
  • Foresight обеспечивает полную видимость и глубокое понимание здоровья и производительности ваших тестов и CI/CD конвейеров. Мы не просто построим стек; мы позаботимся о том, чтобы он работал быстро и эффективно.

Настройка приложения Todo

В качестве отправной точки я следовал руководству Upstash, поскольку оно очень минималистично и просто для понимания.

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

Настройка Playwright

Чтобы инициализировать Playwright, выполните следующую команду и выберите конфигурации для начала работы:

  • Выберите JavaScript (вы также можете выбрать Typescript)
  • Имя вашей папки Tests
  • Добавьте рабочий процесс GitHub Actions, чтобы легко запускать тесты на CI.

После завершения установки у вас будет базовая настройка Playwright. Ваш тест будет находиться в папке tests, а простой GitHub Action playwright.yml вы можете увидеть в папке .github.

Следует отметить, что Playwright предоставляет примеры тестов, чтобы вы могли понять, как он работает.

Написание нашего E2E-теста

Мы добавим E2E-тест, который будет добавлять Todo-элемент и завершать его. Эта спецификация поможет нам убедиться, что наши API и взаимодействие с пользователем работают.

Создайте файл add.spec.js в папке tests и вставьте в него следующий код:


// @ts-check
const { test, expect } = require('@playwright/test');

const TODO_ITEMS = [
 'buy some cheese',
 'feed the cat',
 'book a doctors appointment'
];

test.beforeEach(async ({ page }) => {
 await page.goto('https://localhost:3000/');
});

test('add a todo item', async ({ page }) => {

 var todoName = TODO_ITEMS[0];

 // Text input
 await page.locator('#todo').fill(todoName);
 await page.locator('#todo').press('Enter');

 // Make sure the list only has one todo item.
 await expect(page.locator('.Home_card__2SdtB')).toHaveText([
   todoName
 ]);

});

test('complete a todo item', async ({ page }) => {

 var todoName = TODO_ITEMS[0];

 // Text input
 await page.click(`.Home_card__2SdtB:has-text("buy some cheese")`);
  // Make sure the list only has one todo item.
 await expect(page.locator('.Home_card__2SdtB')).not.toHaveText([todoName]);
});
Вход в полноэкранный режим Выйдите из полноэкранного режима

Перейдите в playwright.config.js и отключите параллелизацию. Это поможет нашим тестам работать по очереди.

/* Run tests in files in parallel */
 fullyParallel: false,
Вход в полноэкранный режим Выйдите из полноэкранного режима

Кроме того, с помощью Playwright можно одновременно тестировать веб-приложение в разных браузерах. В нашей конфигурации я использовал только chromium, но вы можете включить или отключить его в конфигурационном файле Playwright.

Перейдите в package.json и добавьте тестовый скрипт

"test": "playwright test"
Вход в полноэкранный режим Выйти из полноэкранного режима

С помощью этой команды вы сможете запустить тест командой npm run test в терминале и в GitHub Actions.

Запустите свой тест и проверьте, правильно ли работает ваша конфигурация. Вы должны увидеть результат, похожий на этот:

Создание отчета JUnit

JUnit reporter создает XML-отчет в стиле JUnit. Мы будем использовать отчет о тестировании для мониторинга состояния нашего теста. Это необходимо для обеспечения приемлемого уровня качества нашего веб-приложения Todo.

Перейдите в playwright.config.js и добавьте следующее:

reporter: [ ['junit', { outputFile: 'results.xml' }] ],
Войти в полноэкранный режим Выйти из полноэкранного режима

Когда вы запустите свои тесты, будет создан файл с именем results.xml, который будет выглядеть следующим образом:

При возникновении ошибки в отчет будут включены журналы ошибок и сообщения.

Настройка наших действий на GitHub

Внесите ваш код в репозиторий GitHub. Начальное действие playwright.yml поможет нам запускать наш тест в каждом коммите и запросе на перенос. Ваша конфигурация должна выглядеть следующим образом:

name: Playwright Tests
on:
 push:
   branches: [ main, master ]
 pull_request:
   branches: [ main, master ]
jobs:
 test:
   timeout-minutes: 60
   runs-on: ubuntu-latest
   steps:
   - uses: actions/checkout@v2
   - uses: actions/setup-node@v2
     with:
       node-version: '14.x'
   - name: Install dependencies
     run: npm ci
   - name: Install Playwright Browsers
     run: npx playwright install --with-deps
   - name: Run Playwright tests
     run: npx playwright test
   - uses: actions/upload-artifact@v2
     if: always()
     with:
       name: playwright-report
       path: playwright-report/
       retention-days: 30
Войти в полноэкранный режим Выйти из полноэкранного режима

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

GitHub Action работает безупречно, автоматизируя работу, которую вы выполняли вручную. Вам не нужно самостоятельно запускать npm run test; GitHub Actions делает это автоматически, когда вы фиксируете новый код. Однако GitHub Actions не предоставляет достаточно информации о ваших тестах и их производительности. Когда они терпят неудачу, вы должны понять это, найдя их в логе в деталях выполнения рабочего процесса.

Мы будем использовать Foresight для мониторинга наших тестов. Отказ от ответственности, я работаю на Foresight. Он бесплатен для всех проектов с открытым исходным кодом. Для его запуска требуется очень простая конфигурация.

Настройка Foresight

Вы можете использовать это руководство для настройки конфигурации Foresight. Все, что вам нужно сделать, это создать учетную запись, установить приложение Foresight на GitHub и просмотреть репозиторий, который вы инициировали для этого руководства.

После просмотра репозитория вам нужно обновить ваш файл YAML. Вы можете удалить последний шаг и добавить тестовый набор Foresight.

name: Playwright Tests
on:
 push:
   branches: [ main, master ]
 pull_request:
   branches: [ main, master ]
jobs:
 test:
   timeout-minutes: 60
   runs-on: ubuntu-latest
   steps:
   - uses: actions/checkout@v2
   - uses: actions/setup-node@v2
     with:
       node-version: '14.x'
   - name: Install dependencies
     run: npm ci
   - name: Install Playwright Browsers
     run: npx playwright install --with-deps
   - name: Run Playwright tests
     run: npx playwright test
   - name: Foresight test kit
     if: success() || failure()
     uses: runforesight/foresight-test-kit-action@v1
        with:
       api_key: ${{ secrets.FRS_PROD_API_KEY }}
       test_format: JUNIT
       test_framework: JEST
       test_path: ./results.xml
Вход в полноэкранный режим Выход из полноэкранного режима

Как вы можете видеть, мы ввели поля format, framework и path с помощью конфигурации, которую мы создали выше.

Это действие автоматически отправит отчет о тестировании в Foresight, и Foresight проанализирует ваши тесты наиболее удобным для пользователя способом. После обновления YAML ваш рабочий процесс будет запущен автоматически, и вы сможете увидеть результаты выполнения рабочего процесса в Foresight, как показано ниже:

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

Резюме

Я надеюсь, что этот проект станет для вас пособием для начала работы над проектом Next.js с E2E-покрытием. Это базовое приложение с API, тестами Playwright и GitHub Actions.

С помощью Foresight и Upstash вы сможете усовершенствовать свои процессы и получить преимущества от новейших технологических стеков.

Оцените статью
devanswers.ru
Добавить комментарий