GitHubActionsでE2Eテストの自動定期処理をする
2025.03.18 09:00
2025.03.28 16:42

GitHubActionsでE2Eブラウザテストを自動定期処理にする方法をメモします。前回前々回は環境構築とテスト環境構築を作成しましたので、今回はそれを前提として進めます。ここまでの環境構築は以下記事も参照して下さい。
Seleniumで自動操作環境を作成する
SeleniumでE2Eブラウザテストを行う
ではやっていきましょう。
1. 環境構築
まずは環境を整えていきます。以下のファイルを用意しましょう。
/
|-/.github/
|-workflows/
|-main.yml
|-/.gitignore/
|-/app/
|-composer.json
|-phpunit.xml
|-tests/
|-SeleniumTest.php
|-/docker-compose.yml
|-/php
|-Dockerfile
|-php.ini
/app/composer.lock
/app/vendor
.git
.DS_Store
Thumb.db
{
"require": {
"php-webdriver/webdriver": "^1.15"
},
"require-dev": {
"phpunit/phpunit": "^12.0"
}
}
<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="vendor/autoload.php">
<testsuites>
<testsuite name="Selenium Tests">
<directory>./tests</directory>
</testsuite>
</testsuites>
</phpunit>
FROM php:8.3-fpm
COPY php.ini /usr/local/etc/php/
RUN apt-get update \
&& apt-get install -y openssh-server fontconfig libxext6 zlib1g-dev libpng-dev libssl-dev vim \
&& docker-php-ext-install zip pdo_mysql
# SSH関係
RUN mkdir /var/run/sshd
#Composer install
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
RUN php composer-setup.php
RUN php -r "unlink('composer-setup.php');"
RUN mv composer.phar /usr/local/bin/composer
ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_HOME /composer
ENV PATH $PATH:/composer/vendor/bin
WORKDIR /var/www/html
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
internal_encoding = "UTF-8"
mbstring.language = "Japanese"
services:
php:
container_name: php
build: ./php
volumes:
- ./app:/var/www/html
networks:
- local
selenium:
container_name: selenium
image: seleniarm/standalone-chromium
platform: 'linux/arm64'
shm_size: '2gb'
ports:
- 11064:4444
- 11065:5900
networks:
- local
privileged: true
networks:
local:
用意ができました。
2. テストを用意
次にメインのテストを用意します。
SeleniumとPHPUnitを使ってブラウザテストを実現させます。
<?php
use PHPUnit\Framework\TestCase;
use Facebook\WebDriver\Remote\RemoteWebDriver;
use Facebook\WebDriver\Remote\DesiredCapabilities;
use Facebook\WebDriver\WebDriverBy;
class SeleniumTest extends TestCase
{
private $driver;
protected function setUp(): void
{
// SeleniumサーバーのURLを指定
$host = 'http://selenium:4444/wd/hub';
$this->driver = RemoteWebDriver::create($host, DesiredCapabilities::chrome());
}
protected function tearDown(): void
{
$this->driver->quit();
}
public function testPageContainsText()
{
// 対象のURLを指定
$this->driver->get('https://example.com');
// 検索する文字列
$textToFind = "Example Domain";
$pageSource = $this->driver->getPageSource();
// 文字列が含まれているかチェック
$this->assertStringContainsString($textToFind, $pageSource);
}
}
https://example.comにアクセスして、
指定の文字列があるかどうかをチェックする簡単なテストです。
3. GitHubActionsの作成
次に上記のテストをCIフローの中で自動実行するために
GitHubActionsを作成します。
name: 本番環境のテスト
on:
push:
branches:
- main
#schedule:
#定期実行する時間
# 時はUTCで指定する。時間差は9時間。02:00はJSTだと11:00
# 毎日17:00(日本時間02:00)に実行する
# 実行タイミングは20〜30分のラグが発生する可能性があります
#- cron: '0 5 * * *'
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: docker compose準備・起動
run: docker compose up -d
- name: composer
run: docker compose exec php composer install
- name: テスト実行
run: docker compose exec php php vendor/bin/phpunit
UnitTestを実行する環境を作るためにdocker composeを起動し、それ経由でcomposerにてPHPUnitとWebドライバーのインストールをし、PHPUnitでテストを実行するという流れです。
また、scheduleで自動実行のタイミングを指定することもできます。
今回は以上です!