CI/CDを考える上で、外せないのがテストの自動化ですよね。
自身が更新したアプリケーションを、デプロイする前に最低限のチェックをかけたい、というのは誰もが抱く思いでしょう。
IBM Cloud
でも、CI/CDを一瞬で構築できるの仕組みがあり非常に重宝します。
今回の記事では、私がよく使っているPHPUnit
を使って自動でテストする方法をご紹介します。
自動テストを実現する2つの方法
-
外部CI/CDサービスを使って実現する
Github
とTravis CI
等の外部CI/CDツールを使って、Pull Request
がマージされる前にテストを実行して確認しよう!というものです。
実は既に、PHP アプリケーションを自動的にテストして IBM Cloud にデプロイするという記事があります。割とオーソドックスなのはこちらの方法かと思いますので、ぜひ、ご一読ください。 -
Delivery Pipeline内で直接テスト環境を用意してテストを実行する
Delivery Pipeline
では、自分でシェルを書くことができます。テストステップを追加して、中に下記のシェルを書くだけで、phpunitをDeployする前に実行することができます。
何らかの事情により、外部サービスが使えない時などに、役にたつかもしれないテクニックですね!
もちろん、他の言語でもシェルの中でプログラムの実行環境をセットアップすればです。
PHPUnit環境構築シェル
#!/bin/bash
#まずはPHPと関連するextentionをinstall
sudo apt install software-properties-common -y
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install -y php7.2 php7.2-fpm php7.2-mysql php7.2-mbstring php7.2-zip php7.2-xml
#composerをinstall
curl -sS https://getcomposer.org/installer | php
#必要なパッケージをinstall
php composer.phar install
#ここでテストを起動します
php vendor/phpunit/phpunit/phpunit tests/StackTest.php
テストに成功した場合
テストに失敗した場合
上記シェルの実行Log(抜粋)
きちんとPHP Unit
が実行されている事がわかります。
There was 1 failure:
1) StackTest::testPushAndPop
Failed asserting that 0 is identical to 1.
/home/pipeline/c7703b7e-15e2-47fd-ba16-ef57ecd30f0f/tests/StackTest.php:9
FAILURES!
Tests: 1, Assertions: 1, Failures: 1.
WARNING: No file found for the pattern: tests/TEST-*.xml . Not uploading test results.
WARNING: No file found for the pattern: target/site/jacoco/jacoco.xml . Not uploading test results.
Finished: FAILED