2016年2月6日、
ごあいさつ(伊藤望氏)
日本Seleniumユーザーコミュニティの主宰者である伊藤望氏による開会のあいさつがありました。勉強会をはじめとするコミュニティの活動が活発であり、
アンケート結果
- Q:Selenium/
Appiumでご利用のプログラミング言語をお聞かせください (複数回答可) - A:結果としては、
やはりJavaとSelenium IDE強しといったところです。しかしながら第1回と比べて使用者の人数が約2倍に増えたRubyなどもあり、 さまざまな言語で利用され始めている状況がうかがえました。 - Q:Selenium/
Appiumの用途をお聞かせください (複数回答可) - A:システムの部分テスト・
全体のテストに利用する方が大勢を占めていますが、 データ入力などの定型操作や技術的趣味で扱っているという方も少なくないようでした。
『Seleniumデザインパターン&ベストプラクティス』の勘所(玉川紘子氏・太田健一郎氏)
2015年9月に発行された同書の監訳者である玉川紘子氏、
『Seleniumデザインパターン&ベストプラクティス』の紹介
本書は2015年9月に出版されました。仮のECサイトで商品レビューを行うという動作をテーマにしており、
どちらかというとアンチパターンなデザインパターン
どちらかというとアンチパターンになるデザインパターンとして以下が挙げられます。
- Record and Playbackパターン
- Spaghettiパターン
- Chain-Linkedパターン
- Big Ball of Mudパターン
まずは動かすことを第一にし、
テストコードを改善するデザインパターン
一方、
- DRY
(Don't Repeat Yourself) テストパターン - Hermeticテストパターン
- ランダム実行順序原則
デザインパターンを適用する
本書に掲載されている残念なコードについて改めて見ていくと、
- 順番に実行しなければならない
(依存性) - 重複している
リファクタリングの考え方として、
更なる改善のために
ここまでは本書の基本的なところですが、
- 振る舞いをテストする
- Page Objectパターン
- データ駆動テスト
- テストを安定させる
- テストスイートを成長させる
最後に
この時間では語り尽くせないほど、
『Selenium実践入門』で学ぶテスト自動化の世界(伊藤望氏)
「ずっと手元に置きたい1冊」
Seleniumテスト自動化の世界
ひと昔前と最近の比較
2008年ごろ、
最近ではSeleniumのシェアが商用ツールを上回りました。CIツールがメジャーになり、
『Selenium実践入門』の立ち位置
そういった中で本書は、
『Selenium実践入門』ってどんな本?
読者が初心者を脱した後でもずっと手元に置きたい1冊になるようにとこだわって執筆しました。また、
ずっと手元に置きたい1冊
本書では、
そして、
幅広いトピックを網羅
Geb、
『Selenium実践入門』各章ピックアップ
続いて、
第1章「テスト自動化とそのメリット」
意外と類書には載っていない話題です。テスト技術者でない方にも読んでいただき、
第4章「WebDriverコマンド徹底解説」
文字通り徹底解説ということで、
第5章「WebDriverコマンドの実践的活用」
ファイルのアップロードやダウンロードを始めとした、
第7章「Geb」
Javaの開発者が、
第8章「FluentLenium」
割とGebに近いテスティングフレームワークですが、
第9章「Capybara」
Rubyのラッパーライブラリですが、
第12章「CI環境での利用」
Jenkinsを利用したジョブのセットアップや、
第14章「サイボウズの事例」
開発プロセスにおける各段階でのテスト活動やQAと開発の役割分担、
第15章「DeNAの事例」
自動化をメインで取り組むチームの事例で、
最後に
『Selenium実践入門』
E2Eテストフレームワークを使用したテスト自動化事例(太田邦昭氏)
今まさに取り組んでいるという、
テスト対象サイト
今回、
- JavaフレームワークとしてAngularJSを使用
- 外部とのデータのやりとりはスタブで代用
- テスト実行時に専用環境が自動構築される仕掛け
テストフレームワークを決める
まず、
- JavaScriptのテストが行えること
- 簡単にスクリプトの作成と実行ができること
- JavaScriptベースでスクリプトが書けること
- Jenkinsとの連携ができること
- ヘッドレスブラウザとの連携ができること
検討の結果、
NightWatchJS
NightWatchJSは以下のような特徴があります。
- JavaScriptベース
- シンプルにスクリプトが書ける
- Selenium Serverの制御ができる
- CIをサポート
- 拡張が容易
Protractor
Protractorは以下のような特徴があります。
- AngularJSに特化
- JavaScriptベース
- WaitForAngular()
→待機処理を明示的に指定しなくてもレンダリングを待機する - ダイレクトブラウザドライバ接続
ヘッドレスブラウザ
テストフレームワークよりも先にヘッドレスブラウザに何を使うか決めておかなければなりませんが、
- ヘッドレスブラウザとしてメジャー
- JavaScriptのテストを走らせるためによく採用されている
- NightWatchJSとProtractorでサポートされている
- 技術情報が豊富
- WebKitベース
- スクリーンショットが取れる
- jQueryでページを操作できる
- 自動パフォーマンス解析ができる
NightWatchJSとProtractorで検討しましたが、
テストを書く
今回自動化したかったのは、
- CSS Selectorで柔軟に要素を特定
- ページオブジェクトパターンの適用で保守性を向上
→UI操作系のコードと検証系のコードを分離 - ダウンロードのテストはカスタムコマンド・
カスタムアサーションで対応
リアルブラウザのヘッドレス化
テストを実行してみると、
また、
Jenkinsとの連携
Jenkinsとの連携では、
- Jenkinsからテスト対象のWebサイトを自動構築
- Jenkinsがテスト実行するコマンドを投げる
- 上記で作った各ブラウザが並列でテスト実行
- テスト結果の可視化
環境ができたということで、
Q&A
- Q:JavaとJavaScriptを使える要員の数に差がない場合は、
どちらを選ぶべきか、 優先度などあるでしょうか。 - A:今回の事例では、
社内的にはJavaを書くとなった場合拒絶反応が出てしまうので、 仕方なくJavaScriptを使っています。そうした制限が無いのでしたら、 Javaベースのテストフレームワークを選択されたほうが良いと思います。 - Q:成熟したフレームワークがJavaの方が多いからでしょうか。
- A:そうですね。やはり1から自分たちでテストフレームワークを作るのは大変なことです。今オープンソースで出ているフレームワークのほうが、
機能も豊富ですし、 事例も見つけやすいので良いと思います。 - Q:運用で一番大変なことは何でしょうか。
- A:今はほぼ自動で動いていますので、
バージョンアップの影響などで何か起きたときに調べるくらいです。 - Q:IEでのテストもしているということですが、
Windows Serverを立てるのは大変ではないでしょうか。 - A:実は、
Windows Serverではなく、 Windowsクライアントを使っています。以前Windows Serverを使っていたところ、 権限の問題があって動かなかったことがあったからです。Windowsクライアントで十分動作します。
STFとAppiumをもちいたAndroidアプリの自動テスト(平田敏之氏)
「やや緊張しています」
Androidアプリの自動テストにおける課題
Androidアプリを自動でテストするにあたり、
- 自動テストに何を使うか?
- 自動テストを実行する環境のよくある制約
『Selenium実践入門』
Androidアプリの自動テスト
まず、
自動テストの実行環境
Appiumが動作することはわかりましたが、
- 自動テストを手元で動かすと結構つらい
- つらいのでJenkinsで動かすようにする
- Jenkinsに端末を接続しなくてはならない
- 端末がたくさん無いので誰かが使っているときは使えない
- 自動テストを実行する端末が固定化される
STF(Smartphone Test Farm)
私たちは、
STFはスマートフォンの端末別のテストをブラウザから実行できるようにし、
一方で欠点としては、
STF2.0.0の新機能
STF2.
- 端末のstatus
(利用中 / オンライン etc.) が取得/変更可能 - 端末の情報
(OS / Model etc) が取得可能
複数台のスマートフォンが接続されて、
最後に
『Selenium実践入門』
Q&A
- Q:STFを選んだ理由は何でしょうか。
- A:自分たちでもこうしたデバイスファームを作ることを検討していたのですが、
STFが発表され、 実際に試してみたらよかったからです。
Azureを使って手軽にブラウザテストをはじめよう(小島直也氏)
小島直也氏からは、
はじめに
テストを実行し、
テストの自動化に取り組んだ理由
私たちは以下の理由からテストの自動化に取り組むことにしました。
- 同一のマニュアルテストを繰り返すのは非効率だと感じていた
- デプロイの頻度が高い時期には終わったばかりのテストを繰り返すこともあった
- 自動化スキルがあれば効率化できると考えた
ブラウザテストの自動化のはじめ方
まずは動くテストスクリプトを書くところから始めました。しかし、
ToolsQA
ToolsQAはチュートリアル形式でテストの自動化を解説してくれている英語のサイトで、
Stack Overflow
Stack Overflowは困っているときに相談すると、
日本Seleniumユーザー会の談話会やSlack
Slack上で行われる日本Seleniumユーザーコミュニティの談話会などにも積極的に参加し、
自動化で直面した課題と解決策
自動化を進めるにあたり、
- 遷移先のポップアップ画面IDを取得できない
- テスト対象の画面が表示される前にテストが進んでしまう
- スクショを撮るコードをテスト毎に書いてしまったので大変だった
- ロケータをIDで指定していたら同じページで同じIDが出てきて困った
- 1つのテストケースを1クラスに実装するべきか悩んだ
- データ駆動でアプリの機能を実行するように実装するべきか悩んだ
- データ駆動でアプリの機能を更に詳細に実行するように実装するか
- 前のテストの失敗によって次のテストが実行されない
- 結合テストはスパゲッティテストにあたるか
- 開発言語に何を選択するか
- テスト実行中はブラウザに画面を専有されてしまう
特に最後の問題が本題になります。この問題を解決するために、
実践的な自動テストに仕上げるためにやったこと
自分のテストフレームワークを作りました。
- テストデータの読み込み処理
→TestNGのDataProvider機能を使い、テストデータを読み込む処理をテストと分離しました。 - 任意のブラウザでのテスト実行
→プロパティファイルで実行ブラウザを切り替えられるようにしました。 - Web Elementが表示されるまでのテストの待機処理
- スクリーンショット取得処理
- ロガー
この結果、
- Page Object
- アプリケーション機能定義部
- アプリケーション機能実装部
Azureで作ったSelenium Grid
UbuntuをSeleniumのハブ、
Selenium談話会やSlackでたくさんの方に色々と教えていただいてきました。誠にありがとうございました。本日の話が一助となれば幸いです。
Gebに実践入門するために(PoohSunny氏)
『Selenium実践入門』
Gebについて
Gebは最近有名になってきたGroovy製のSeleniumラッパーです。普通に書くと長くなってしまうコードも簡潔にできるのが特徴です。前回の勉強会で玉川紘子さんが発表されたスライドが非常に良いのでぜひご一読をおすすめします。
こういう資料を見てよさそうだと思って導入しようとしても、
環境を構築して動かすまでが遠い
Gebでドキュメントを見てみると、
解決策として、
また、
表記が独特で戸惑う
Groovyの力でオブジェクトの隠蔽が行われているので、
解決策としては、
どう書いたらいいか迷う
Gebはさまざまな書き方ができるため、
解決策としては、
- Gebのチートシートを使う
- 『WEB+DB PRESS Vol.
85 』に掲載されているGebの記事を読む - 日本Geb研究会で質問する
- 本家のドキュメントにあるサンプルコードを活用する
エビデンス取るのも自動化したい!(桑原雄一氏)
Webアプリのエビデンスとして代表的なものにスクリーンショットがあります。Seleniumの機能を使っても取得できますが、
エビデンスを手動で取るのが嫌だと感じる理由
エビデンスを手動で取ることをエンジニアが嫌がる理由として、
- スキルが身につかない
- テストを疑われている感じがする
- その時間で打鍵したほうが品質が上がるんじゃないか
今回はそんなエンジニアを助けるためのツールをご紹介します。
SI-Toolkitで自動取得できるエビデンス
SI-Toolkitを使うと、
- 操作ログ
- 操作要素の位置とサイズ
- スクリーンショット
これらのエビデンスをSI-Toolkitがどのように取得しているかをご説明します。
動作の仕組み
まず、
最後に
SI-Toolkitに関しまして勉強会を開いたりもしていますので、
Q&A
- Q:スクリーンショットを取得する機能は複数のブラウザで対応していますか
- A:対応しています。
- Q:Appiumを経由すればモバイルでも対応できますか
- A:Appiumにも対応していますので、
モバイルのネイティブアプリもハイブリッドアプリもエビデンスが取れます。
- エビデンス取るのだって自動化したい!
(PDF資料)
Seleniumアンチパターン(宮田淳平氏)
Seleniumを使って自動化すれば万事解決 ーー そんなよくある考え方に待ったをかけるのが、
Seleniumのよくある課題
Seleniumの導入失敗事例の主なものとして、
- 運用してみたけど続かない
- コストの割にはメリットを感じない
- 改善したいけどよくわからない
こうしたよくある落とし穴と対策がもっと広まるとよさそうだと思い、
アンチパターンの定義
アンチパターンは以下のように定義されています。
- 最初は有益だと思えるが、
最終的に悪い結果をもたらすもの - リファクタリングするための方法が存在する
アンチパターン1 なんでもSelenium
不具合の再発防止をしたい、
問題点 —— Seleniumは大きい
Seleniumには
- メンテナンスコストが大きい
- 簡単なテストでも数十秒から数分と、
実行時間が長くかかってしまいます。また、 ネットワークやテスト対象が不安定になりやすいです。 粒度が大きい - 1メソッド・
1リクエストで確認できる挙動のためにブラウザまで動かすのはやりすぎなところがあります。
考え方
Selenium以外の選択肢も検討してみるのも重要ではないかと思います。
- 静的解析
- 単体テスト
- APIテスト
- 手動テスト
適切な選択をするためには、
長所
長所は以下の通りです。
- E2Eレベルでの保証ができる
- 人間ではほぼ不可能な速度とタイミングで実行ができる
短所
短所は以下の通りです。
- メンテナンスコストが高い
- 柔軟性が高い
まとめると
頻繁に確認したいE2Eレベルのシンプルなテストを、
アンチパターン2 手動テストの代わり
既存の開発プロセスにSeleniumテストを取り入れたいというパターンで、
問題点 —— 自動化したテストが通らなくなり、手が付けられなくなる
回帰試験をSeleniumテストで自動化したところ、
手動テストの代わりだけだとSeleniumテストのメリットを最大化できないのではないかと思います。工数削減だけではなく、
また、
改善の方向性
自動テストのメリットを最大化するために、
ただ、
まとめると
Seleniumテストを手動テストの置き換えに留めずに、
弊社では、
アンチパターン3 クロスブラウザがんばりすぎ
動作環境のすべてのブラウザで品質保証したいがために、
問題点 —— すべてのテストが通ることはなく、メンテナンス不能に陥る
IE8〜IE11、
考え方
Seleniumテストをクロスブラウザで運用するのは思ったより大変です。ブラウザのバージョンとWebDriverのバージョンがあり、
改善の方向性
ブラウザを絞るしかないと思います。ブラウザ依存の重大な不具合が過去にほとんど無いならば、
Microsoft Edgeは、
ヘッドレスブラウザは、
どうしてもクロスブラウザでSeleniumテスト実行したい
Taas
まとめると
ブラウザは可能な限り絞りましょう。絞れないならばTaaSを検討しましょう。社内では過去のブラウザ依存の不具合を集計したところ、
最後に
アンチパターンの兆候としては、
薄っすい話百八式(戸田広氏)
『Selenium実践入門』
『Selenium実践入門』校正をくぐり抜けて出版された小ネタ
『Selenium実践入門』
結論
ユーモアを大事にしましょう。ハードな仕事でもね。
俺と音声合成
第13章319ページに、
音声合成ソフト
代表的な音声合成ソフトには、
- Open JTalk
- Softalk
- VoiceText
- MacOS Xのsayコマンド
今回は某人気旅番組のナレーターにも使用されているVoiceTextのSHOW君にSeleniumのエラー通知をさせてみましょう
結論
ユーモアを大事にしましょう。ハードな仕事でもね。
俺とSelenium Gridハブがインターネットで特殊ノード
プロキシを立ててポート番号を80番にしよう
Selenium Gridでは、
インターネットに公開できないか
次に、
HTTPSで接続するように変えることはできないか
じゃあ、
ノードを自分の家に置いて運用できるか
これが本題になります。たとえばノードにMacを接続したいときなど、
結論
Seleniumは閉じたLAN環境で実行しましょう。
以上、
翻訳本の