kintoneチームを支えるSeleniumテスト
サイボウズ株式会社 宮田淳平
2015/10/20 Selenium勉強会@サイボウズ
2
kintone
kintone
▌3,000社以上に導入されているクラウド業務改善ツール
▌3ヶ月に1回のペースで機能追加を含むアップデート
▌サーバーサイド:Java 24万行
▌クライアントサイド:JavaScript 39万行
▌PM3人、PG15人、QA20人くらい
▌多拠点開発
PGは東京と大阪、QAは東京と松山と上海
3
kintoneチームのSeleniumテストの経緯
▌一度チャレンジしたけどメンテ不能になった
大きなUI変更でほとんど動かなくなってそのまま放置
▌『継続的デリバリー』を読んで再チャレンジ
kintoneで常にリリースできる状態を保つにはSeleniumテス
トが必須
4
kintoneチームのSeleniumテスト
▌合計1,000テストケース以上
▌QAが試験設計、PGが自動化
▌Java + Selenium WebDriver
公式のSeleniumクライアントで構造化している
一からやり直すならSelenideみたいなラッパーライブラリを検討する
5
Seleniumテストのライフサイクル
▌新機能実装と同時に受け入れ試験を自動化する
試験開始時に受け入れレベルの機能が動作してることが保証される
▌既存機能の回帰試験も手が空いたときに自動化する
QAの分析でリスクが高い機能から優先して自動化
▌メインブランチに変更が入るたびにすべてのテストが実行される
失敗したら晒しあげられる
6
7
メンテナンス性を上げる
▌PageObjectパターン
UI変更がありえるならUI層の構造化は必須
▌失敗時のスクリーンショット
動画も一時期試したけどリソース使いすぎるのでやめた
▌コード品質を高める
製品コードもテストコードも同じくらい大事
コード規約、レビュー
DRY、KISS、YAGNI
8
安定性を高める
▌リトライ
一定回数まで失敗したときにリトライして不安定なテストを救う
リトライしたテストは後から分かるようにして直す
▌wait
要素を探すときに一定時間探し続けるようにする
Seleniumのラッパーライブラリならだいたい実装されてるはず
9
実行時間を高速化する
▌余計なテストを作らない
本当に重要なテストだけにする
単体テスト、APIテストなどでカバーする
▌並列化
1,000テストケースだと直列に実行すると10時間以上かかる
実行時間が長いとテストが失敗したときの絶望感が半端じゃない
10
Selenium Gridで並列化
▌1,000テストケースを48並列で20分くらい
11
hub
node
docker-seleniumで環境構築を楽にする
▌Selenium Gridを構築するためのdockerイメージが提供されている
ubuntu上のchromeとfirefox
▌高速デプロイ&軽量
Seleniumのバージョンが上がったときとかに作りなおせばいいので楽
12
Selenium GridをGoogle Cloud Platform上で動かす
▌ノード数が増えるとマシンリソースの用意が大変
▌クラウドに移行すれば金の力で解決
▌コスト削減のためにSeleniumテストのジョブが実行されるごとにインスタン
スを作成→削除
▌Google Compute Engineは課金が分単位で最小課金時間が10
分
EC2だと課金が時間単位
13
まとめ
14
WE ARE HIRING!
15
Seleniumテスト完備の環境で働きたい方はぜひサイボウズへ!
http://cybozu.co.jp/company/job/recruitment/

kintoneチームを支えるSeleniumテスト