概要
WordPressで仕事をしている皆さんが必ず直面する問題がコアのバージョンアップ祭り問題です。
WordPressはバージョンアップの頻度が非常に早いのは良い所なのですが、実際にサイトを複数メンテナンスしている側からすれば、毎回のバージョンアップの度に動作テストをするのが非常に大変です。
ところがSelenium WebDriverというツールを使えば毎回自動でブラウザでのテストが実行できるため、動作テストの煩わしさから開放されます。
Selenium WebDriverについてはUIテストの自動化!Node.jsとSeleniumでWebアプリのUIテスト環境構築の記事が非常にわかりやすいので、参考にしてみてください。僕も上記の記事を見てローカルに環境を構築しました。
テストコード
以下がテストコードです。Selenium WebDriverは様々な言語に対応していますが、僕はnode.jsを使って書いています。
var webdriver = require('selenium-webdriver');
var t = require('selenium-webdriver/testing');
var driver;
var By = webdriver.By;
var setting = require('./setting.json');
t.describe('WordPressバージョンアップ後のテスト', function() {
t.before(function() {
driver = new webdriver.Builder().
usingServer('http://localhost:4444/wd/hub').
withCapabilities(webdriver.Capabilities.chrome()).
build();
});
t.after(function() {
driver.quit();
});
t.it('ログイン', function() {
driver.get(setting.login.url);
driver.findElement(By.name("log")).sendKeys(setting.login.account_id);
driver.findElement(By.name("pwd")).sendKeys(setting.login.account_pass);
driver.findElement(By.name("wp-submit")).click();
driver.wait(function() {
return driver.getTitle().then(function(title) {
return title === 'Dashboard ‹ Welcome to the VCCW — WordPress';
});
}, 5000);
});
});
アカウント情報やサイトのURLについては別でjsonファイルを作ってそこで定義しています
{
"login": {
"url":"http://wordpress.local/wp-login.php",
"account_id":"admin",
"account_pass":"admin"
}
}
テストの実施
ローカルでターミナルを立ち上げてテストを実行します。タイムアウトの時間は長めにとってます。
$ mocha wordpress-test.js --timeout 10000000
すると自動でブラウザが立ち上がってログインのテストが実施されます。
テスト結果は以下の様な形でターミナルに表示されます。
また、テストの各画面のキャプチャも自動で撮ることも可能なので、テストのエビデンスとして残しておくのもよいでしょう。
業務でどう使うか
業務においてバージョンアップ後のテストをどこまで行うのか、という線引は非常に難しいです。
サイトによって仕様もバラバラですし、お客さんのビジネス上のサイト立ち位置によってもチェックが必要なポイントは変わってきます。
ただ、こういった形でバージョンアップ後のテストの内容をコードに落としておくことで何をどこまでテストしたのかを明確にすることが出来ます。また、テストは機械が命令通りにやってくれるため、バージョンアップの度に同じテストを実施しているということが明確できます。サイト仕様における冪等性を毎回正しく確認することが可能となります。
それでは皆さんよいバージョンアップ祭りをお過ごしください!