Your browser doesn't support the features required by impress.js, so you are presented with a simplified version of this presentation.
For the best experience please use the latest Chrome or Safari browser. Firefox 10 (to be released soon) will also handle it.
最近の話
とにかく劇場ミルキィが最高すぎて、その話ばかりしている
とにかく劇場ミルキィが最高すぎて、その話ばかりしている
大体こんな感じ
と、いうわけで
最近のミルキィの話は大体できたので、仕事っぽい話をします。
背景
- 諸事情により自主規制
- 「Selenium デザインパターン&ベストプラクティス」という本が良かったので、ここに書いてあることを試してみたくなった
「Selenium デザインパターン&ベストプラクティス」に書いてある事
- 最初は雑というか、ad hoc なテストコード
- 共通処理をまとめたり
- 安定させる処理を入れたり
- Fixture を入れたり
- ページオブジェクトを作ったり
当たり前の事なんだけど、地道にちゃんとやっていて良い
安定化
- 検証に使う文字列をなるべく一意になるように日付とかをいい感じに入れる
- 一意なIDとかあればそれが使えるけど、「商品名」とかだとありえんし
- 僕はめんどくさいのでUUIDつけてる
- 危なっかしい場所や Ajax には wait and retry
- 幸い(?)弊社は JS でぐりぐりやる処理はほぼないので、頑張らなくても割と平気だった
Fixture
- 自作のデータローダーを使っている
- (今は)後でデバッグしやすいように、ロードしたデータは消さずに残している
ページオブジェクト(1)
- Webサイトの1ページに対応するオブジェクト
- テストコード側には WebDriver の生の処理(CSS Selectorとか)は書かないで、ページオブジェクトの操作のみ行うようにする
ページオブジェクト(3)
- 「ボタンを押す」、とか「リンクをクリック」とかの操作がメソッドになる
- メニューとかは、最初は気張らずに配列とかで雑に返しても平気
- テストが充実してくると、「メニュー」とか「ブロック」とかをオブジェクトにしたくなるのでやる
コツ(1)
- とにかく気張らない
- 最初は雑に WebElement(Selenium::Remote::Driver において要素を表すクラス)とかを返しても良い
- 実装中は気にせずテストコードから CSS セレクタとか投げても気にしない
- だんだん綺麗にして、最終的に全部ページオブジェクトに寄るようにする
コツ(2)
- ページ遷移が複雑で意味わからなくなったら、phantomjs やめてデスクトップの Firefox とかにつなぐ
コツ(3)
- CI 回す
- CI すると効果を実感してもらえるので、自分以外の人もテストを書いてくれるようになる
効果
- 派手にぶっ壊した時にすぐ気づけた
- 仕様バグを見つけた
- ステージングの環境更新失敗にすぐ気づいた
おしまい