2014年10月18日、
Seleniumをもっと知るための本の話(玉川竜司氏)
「実践Selenium WebDriver」ができるまで
2006年から、
また、
英語の技術書を読む話
英語の本は、
しかし、
技術英語の勉強法において、
お勧めを2つ紹介します。
- Kindle
(言わずと知れたkindleです) - Safari
(年会費で書籍が読み放題、 なぜ日本では知名度が低いのか謎です)
Q&A
- Q:電子版の発売は?
- A:予定は今のところはないです。
- Q:企画が通りそうな売上数は?
- A:
(言っていいのかな? と焦りながら) ウン千冊。今回の書籍のAmazonランキングはかなり良いほうです。 - Q:どうして翻訳業を?
翻訳期間は? 自分もしてみたいんだがどうすればよいでしょうか? - A:Silverlightの翻訳本についてオライリー・
ジャパンに問い合わせたのが始まりです。年間3~4冊ほど翻訳をしていますが、 作業は地味でけっしてもうかる仕事ではないので、 あまりお勧めはできないが、 やるならば目的をしっかりと見据えてやりましょう!! - Q:翻訳をしてWebで得られない知識はありましたか?
- A:英語圏では自分が作成したオープンソースソフトウェアについて書籍を書くことが多いため、
英語圏の本には作成者しか知りえない情報が詰まっています。
じゃんけん大会
講演の後じゃんけん大会があり、
脱・独自改造!GebでWebDriverをもっとシンプルに(玉川紘子氏)
『実践Selenium WebDriver』
WebDriverはそのまま使用するのはハードルが高く、
そんなあるある感を、
Gebで便利になる点
Gebで便利になることとして、
- コード量が少なくてすっきりする
- jQueryライクでわかりやすい※
- データ駆動や強力なアサートの機能がある
- これまで自社で作成してきたJavaライブラリの資産が使える
- ※)
- フロントのデザイナにどこをテストしているのか伝えやすいという利点もあります。
例)assert $("h1").text() == "Please Login"
Gebを使う際の注意点
Gebを使う際の注意点として、
- Syntaxの省略に注意。省略は便利だが型をきちんと書いていないミスにつながる場合もある。IDE
(Integrated Development Environment:統合開発環境) 上の補完に頼りたければ型を書いたほうがベター - Implicit Assertionの使い方に注意しなければ思わぬところでエラーを出すこともある
(ifの中にassertを書くとエラーも出ず素通りしてしまった) - PageObjectに生の処理を書いてしまいがちだが、
それをしては意味がなくなってしまう
利点はとにかくコードがシンプルになることなので、
Q&A
- Q:GroovyやGebの勉強方法は?
- A:英語ですが、
Gebの公式サイトに 『Book of Geb』 というマニュアルがあるため、 体系的に学ぶことができてお勧めです。Groovyはやりたいことが増えるたびに調べています。 - Q:jQueryのセレクタが全部使えますか?
- A:似ているだけで、
すべてが使えるわけではないです。
海外のSeleniumカンファレンスではどんな発表がされているのか2014(伊藤望氏)
日本Seleniumユーザーコミュニティ主宰の伊藤望氏からは、
- 2011年から毎年やっている
- 世界中からSelenium開発者・
ユーザが集まる - 3日間にわたるセッション&ワークショップ
続いて各セッションについての紹介があったのですが、
- 正しいテストピラミッドを実現するためのSeleniumデトックス
- 単体テストでできるものは単体テストできちんとやろう。そのほうが保守コストも安くすむ
- Allureフレームワーク- 水晶のようにクリアなSeleniumテスト結果レポート
(どんな言語でも使える) - リッチなテスト結果レポートを出力できる。スクリーンショットなども表示できる
- Seleniumプロジェクト取込みと拡張:Seleniumプロジェクトはどうやって世界最大のクローズドソース企業を参画させたか
- MicrosoftをSeleniumプロジェクトに参加させるまでの話。スライドがないが、
WebDriverの機能が次期Internet Explorerからは取り込まれるもよう。
まとめとして、
次に事例紹介セッションになります。Seleniumの活用事例情報はまだまだ少ないため、
ハイパフォーマンスSeleniumテスト@サイボウズ(宮田淳平氏)
サイボウズの宮田淳平氏より、
Seleniumテストの問題点
Seleniumはブラウザを使用してネットワーク経由でテストを行うため、
問題の解決策
その解決策として挙げられていたのは、
次の解決策として挙げられていたのは、
並列実行環境の構築方法
- クラウドサービスの利用
Sauce Labs、
TestingBot、 BrowserStackなど、 予算があれば一番お勧めです。あらゆる実行環境に加え、 実行録画機能などもあります。Sauce Labsのサービスはフリーで試してよさそうだったのですが、 想定よりも費用が高かったのであきらめました。各サービスの比較表を誰か詳しい人が書いてくれるとうれしいです。 - VM
クラウドサービスをあきらめた場合、
自分たちでマシンを用意する必要があります。最初に思いつくのはやはりVMです。kintoneチームではVM (Virtual Machine、 仮想マシン) テンプレートを作って量産を行っています。テンプレートを使えばある程度環境を量産できますが、 環境を作り直したり設定を変えるなどの作業を行うと途端に手間がかかるようになります。マシンリソースも、 ある程度ブラウザテストができるマシンとなると、 それなりのスペックが必要となり大変です。 - Docker
Dockerは高速デプロイでき、
かつ軽量です。ただし環境はLinuxだけなのでChromeとFirefoxのみに限られてしまい、 Internet Explorerのテストはできません。次期バージョンのWindowsではDockerが対応するようなので期待をしています。
並列実行について
並列実行を行った際、
- (全テストの実行時間の合計)
÷ (並列実行時間) = (並列数) となっていれば理想 - 実際の並列数より極端に小さい値のときは改善余地がある
- 時間の長いテストケースを最初に実行できれば理想値に近づく。それにはテストランナーに手を加える必要があるかもしれない
個々のテストの高速化
テストの高速化については、
初期データの作成
初期データを作成する方法はいくつかありますが、
安定性
宮田氏のチームでは、
メンテナンス性
メンテナンス性が低いと、
メンテナンス性を上げるために必要なこととして以下の点を挙げていました。
- PageObjectパターンの利用。UI
(User Interface) 変更があるならば必須 - 失敗時のスクリーンショットの記録、
録画などで原因調査が楽になる - テストコードにも規約を作ることが重要。レビューも行う
まとめ
- Seleniumテストの運用はパフォーマンスとの戦い
- 自動化するテストは重要なものに絞る
- 実行時間短縮は並列化してその効果を最大限まで活かしきるのが一番効果的
- 安定性やメンテナンス性も大事
Seleniumの事例は少ないので今回は発表しようと思いました。今後もこういう事例がたくさん発表されるとうれしいとのことでした。
Q&A
- Q:どうやってチームでテストを書く運用を整えたのですか?
- A:一時、
WebDriverテストがメンテナンス不能状態になりました。 『継続的デリバリー』 の社内勉強会を実施し、 CI (Continuous Integration、 継続的インテグレーション) の重要性を再認識しました。 - Q:Seleniumテストの録画はどうやって実現しているのですか?
- A:vnc2flvというPythonのライブラリを使用し実施しています。テストが失敗したときのみ保存を行います。
宮田氏の発表時のブログではQ&Aの補足もされていますので、
クックパッドアプリの開発を支援するAppiumの話し(松尾和昭氏)
クックパッドでテストエンジニアとして活動している松尾氏、
Appiumを使うまでの経緯
Appiumは、
リリースビルドをテストする
描画テストを実行する場合、
Appiumの良い点
松尾氏は、
- リリースビルドをテストできる
- 他のさまざまなツールとの組み合わせが可能
- OSの変化に追従しやすそう
Appiumのあまり良くない点
逆にAppiumのあまり良くない点は以下を挙げていました。
- 実例がない。今も開発が活発で変化が激しく、
エラーに対処するために自分たちで修正が必要なこともある - 実行に時間がかかる。UIからアプリを操作する点はSeleniumと同じで、
工夫が必要 - 環境構築に手間がかかり、
社内に広めるきっかけの妨げになっている
クックパッドにおける活用事例
クックパッドでは、
工夫
Appiumを利用する際の工夫として以下の点を挙げていました。
- Appiumはまだ開発が活発にされているため、
変化への追従が大事 - Appium側の修正によってテストシナリオを修正する必要がないよう、
テストシナリオとAppiumによる具体的なテスト実装を、 ラッパを作って分離している
どんなテストをAppiumにまかせるか?
どのようなテストをAppiumにまかせるのがよいかについては、
- 機械が実行可能なタスクは機械に任せる
- 人間が忘れがちなシナリオは機械に任せる
- 人間は、
機械が実施していない領域を探索的にテストする
これまでの成果と課題について
Appiumでモバイルアプリの自動テストを実行するようになって、
Q&A
- Q:テストは実機で行っているのですか?
- A:実機は手間がかかるので、
すべてシミュレータで行っています。
以上、