Seiichi Yonezawa — How creativity is helped by failure

ありがとうTestCafé

End-to-Endのテストに関して以前投稿して以来ですが、今日はローカルとCI環境でTestCafeを実行してみました。

まず、ローカル環境に関してはTestCafeのリポジトリにある、examples/basicディレクトリにあるテストを実行してみましょう。Google ChromeおよびFirefoxをインストールしておく必要はありますが、手元のMacBookでは触れ込みどおり一切の設定等も必要なくブラウザが起動してテストを実行することができました。ただただ驚きです。

私は昔のiMacを持て余していて、mac miniのようにサーバーとして使うには場所を取りすぎですが最近またファイルサーバとして使い始めました。幸い最新のmacOSがインストールできるものの、DockerサーバとしてはCPUが未対応で、ファイルサーバとしても設置場所の都合上Wifi接続でサーバが遅く、本来の役割は果たせていません。そして再び行き場を失いつつあった私のiMacですが、ふとGitLab CI RunnerでこのTestCafeを実行してみようと思いました。

Ubuntu ServerだとXvfbなどの設定が必要だったりして何かと面倒なのですが、GitLabはDockerだけでなくSSH経由のshellで実行できるのでこういう用途にはもってこい……かどうかはわかりませんが、比較的なんらトラブルに見舞われることなく実行できました。唯一Firefoxの初回終了時はブラウザのデフォルト設定を聞いてくるのでブラウザが終了せずテストが失敗してしまうこともありましたが、ログインさえしていればテストは実行できているのかもしれません。

初回はログインしていなくてもすごく時間がかかりそうでしたが最初のテスト項目はパスしていたのでかなり不安定ですが、GitLab CIでE2Eの統合テストを実行できるというのは全能感さえ得られそうです。もともとはXCodeを使ってビルドやテストの組み合わせもしたかったんですけど、まだまだSwiftもReactiveCocoaも使えていません。

ただ、TestCafeがうまくいくということはNightmare.jsやそのほかのJavaScript製のテストランナーが実行できそうな気がするので今後の開発が非常に楽しくなりそうな予感がしています。


その後試してみましたがテストの実行には一度ログインが必要みたいです。ただし、iMacでスクリーンをログインして無操作で1分後にロックしておけばテストそのものは実行できるみたいなのでいろいろと穴があるような気もしますが(言い換えればバックドアを実行しているのと同じ?)、わざわざmac miniを買うにもmac miniが更新されずに1000日を超えたという記事もあるくらいですし、現状は動いてるんだからこれで妥協しておこうかなと思う次第です。


昨日の検証から翌日ですが、やはりロック中にSafariを動かすのは難しいようで、テストが成功しませんでした。といってもわざわざSafariまで厳密に確認する必要はないと思うのでとりあえずChromeとFirefoxのみにオプションを変更してみたのが下記のログです(若干改竄しましたが)。

Running with gitlab-ci-multi-runner 9.3.0 (3df822b2)
Using Shell executor...
Running on iMac...
Fetching changes...
Removing node_modules/
HEAD is now at 1a240fa Update .gitlab-ci.yml
From test
   1a240fa..fe15d60  master     -> origin/master
Checking out fe15d60f as master...
Skipping Git submodules setup
$ brew upgrade
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 2 taps (caskroom/cask, homebrew/core).
==> Updated Formulae
citus
crystal-lang
[email protected]
[email protected]
neo4j
osquery
rocksdb
wine

$ npm install

> [email protected] postinstall /Users/nzwsch/builds/d586051d/0/experimental/test/node_modules/testcafe-browser-tools
> node ./bin/fix-permissions.js

File permissions fixed
added 248 packages in 11.32s
$ npm test

> [email protected] test /Users/nzwsch/builds/d586051d/0/experimental/test
> testcafe chrome,firefox test.js

 Running tests in:
 - Chrome 59.0.3071 / Mac OS X 10.12.5
 - Firefox 54.0.0 / Mac OS X 10.12.0

 A set of examples that illustrate how to use TestCafe API
 ✓ Text typing basics
 ✓ Click an array of labels and then check their states
 ✓ Dealing with text using keyboard
 ✓ Moving the slider
 ✓ Dealing with text using selection
 ✓ Handle native confirmation dialog
 ✓ Pick option from select
 ✓ Filling a form


 8 passed (18s)
Job succeeded

素晴らしいですね。もともと3分近かったテストがわずか18秒に短縮されました。この18秒も実質gitの更新のみなのでSafariを入れてテストするよりは、ChromeとFirefoxさえカバーできていれば大抵はなんとかなると思います。もともとはiPhone Simulatorとかでも試したかったんですが、現状はこれだけでも十分です。