memocon プログラミングのメモや物欲日記、雑記等

第2回 日本Seleniumユーザーコミュニティ勉強会に参加してきた

2014年10月18日 21時50分

最近、勉強会の報告しかしてない気がする…と毎回書いてるけど今回はSeleniumの勉強会。

第2回 日本Seleniumユーザーコミュニティ勉強会

Seleniumは前の会社でテストとしてじゃなくてマスタ登録をExcelでやりたいというのを実現するために使ったことしかなかったです。
JavaでPOIとSelenium WebDriver使って書いたけどあれは使われているのだろうか?
とりあえずブラウザが自動で動く様は初見のウケが非常に良かったです。

ということで、あまりSeleniumの知識持ってなかったので得られるものは多いはずと思い参加してきました。

— ひとこと感想 —

Seleniumをもっと知るための本の話
Symfony2を仕事で触ってるんですがやっぱり英語の資料読まないと情報が少ないなぁと思ってた所に英語の技術書を読みましょうという話があった時にはビクッとしました。英語、頑張ります。
脱・独自改造!GebでWebDriverをもっとシンプルに
Geb、超楽しそう。
Groovyと合わせてやる良い機会。
海外のSeleniumカンファレンスではどんな発表がされているのか2014
海外ではSeleniumでカンファレンスが開かれてる。
なんか日本との熱量の違いを感じるし楽しそう。
ハイパフォーマンスSeleniumテスト
Q&Aでの「チームにテストの文化を根付かせるには」という質問と内容が秀逸だった。
「テストを徹底させる為にどんな強権を発動したのか?」という質問に対して「一度(テストが)メンテ不能な状態になった。そこから本の勉強会などでテストの大切さを学んで浸透していった」。
やっぱり強制される(させる)やり方では難しく、チーム全体が自らやるという体制にならないといけない。


実践アジャイルテスト テスターとアジャイルチームのための実践ガイド

クックパッドアプリの開発を支援するAppiumの話
ネイティブアプリのテスト自動化、できることを初めて知った。

以下、まとめ。
後半になっていくほど内容が薄いのは自分の集中力の限界。

Seleniumをもっと知るための本の話 by 玉川竜司さん

玉川竜司さん、オライリーさんの本を20冊以上翻訳している方。

今日の内容

  • 本ができるまで
  • 英語の技術書を読む話
  • Seleniumの本の紹介

本ができるまで

玉川さんは2006年から自社のWebアプリの回帰テストに使用開始。
その時にネットを漁ってみた時、情報が錯綜していて全体像が見えなかった。

それから数年が経ち、原書「Selenium WebDriver Practical Guide」と出会う。
原書はWebDriverの話のみだが、日本語版は玉川紘子さんに寄稿してもらってテストの分野もフォローしている。

英語の技術書を読む話

  • 英語の本と日本語の本、出版数は比較にならない
  • これからも日本語の方は減る方向に加速する
  • 翻訳するのは、数が出るものを中心にせざるを得ない
  • 尖ったトピック、非常に深いものは英語で読む
  • 総合的な本を翻訳で読んで、あとは英語に当たってもらえれば…

英語にチャレンジしたい技術者に時々ある勘違い

「映画のDVDで勉強」

英語の技術書を読むのは、英語へのチャレンジとしてはもっとも楽なチャレンジ。

オススメは「Kindle」と「Safari(not web browser)」

Kindle

  • FireHDX 8.9最高
  • AndroidのKindleもいい(iOSは使ったことがないので未コメント)
  • 技術書を読む上では画面の大きさは大事。7インチは小さい
  • 単語を長押しで辞書引けるのが非常に便利

Safari

  • オライリーの電子書籍読書サービス
  • Proは年間4万。Basicは年間3万
  • メジャーどころの技術系出版社はほぼカバー
  • Android / iOSのアプリあり

本の紹介(洋書)

Selenium Design Patterns and Best Practices

  • PACKT(出版社)はイギリスの出版社で、勢いがある
  • 初級〜中に強い印象
  • Seleniumにはとても熱心
  • Safariで読める

Selenium Webdriver in Python

  • Kindleで読める
  • 「実践」のWebDriverそのものに関する部分のPython版といった印象
  • Pythonでのサンプルコードをたくさん見たい人にお勧め
  • 表紙は大事

Selenium IDE Automation Testing Tutorial

  • Kindleで読める
  • Selenium IDEにフォーカス
  • まさにチュートリアルで初歩的

Selenium Questions and Answers

  • Kindleで読める
  • StackOverflowのSelenium Q&Aをそのまま書籍化
  • 大まかにカテゴリはあるが、ランダムなトピックの羅列に近い
  • 見てみると面白い

Q&A

電子書籍版は出るのか?
わからない
次の企画が通りそうな売上数はどのくらいですか?
うん千冊。アマゾンの技術書部門のランキング1000〜2000だったがこれはかなりイイ線
どうしてオライリーの翻訳し始めたのか
Silverlightの翻訳本でますか?と問い合わせたのが始め
翻訳業をしてみたい
知識や講演等は得られるかもしれないが、作業は地味かつお金は儲からないのであまりお勧めできない
翻訳期間はどのくらい
1日平均4〜5ページ。年間3〜4冊
英語本を翻訳してWebで得られない知識はあったか
Webの情報は体系化されていない。一本、体系化された本を読んでからネットを調べるとかなり楽になるはず

脱・独自改造!GebでWebDriverをもっとシンプルに by 玉川紘子さん

WebDriver、そのままだと冗長なのでみんなラッパーを作ってる。
なら、OSSのラッパーを使おう。

  • FluentLenium(Java)
  • Geb(Groovy)

テスト対象製品に依存しないような改良は、独自に行うのではなく既存ライブラリを使おう

Gebとは

  • not ゲブ、ジェブ
  • http://www.gebish.org/
  • Groovyで動くWebDriverのラッパー
  • jQueryライクでわかりやすい
  • コード量が少なくすっきり書ける

独自ラッパーあるあるが解決済み

テキスト入力のシンプル化

$(“#hoge”).value(“fuga”)

設定ファイルの外出し

GebConfig.groovyをクラスパスの直下に置く

PageObjectデザインパターンをサポート

ページのデザインオブジェクトとテストケースを分けるというデザインパターン。

自由度が高いがパターンを使用して共通化できる

Groovy/Spockの機能が使える
  • ブロックを使ってテストのフェーズを表現できる
  • データ駆動テストがシンプルに書ける
  • モジュールが使える(ヘッダメニュとかカートなど共通部分を表現するのに便利)
  • Javaの資産が使える

Syntaxの省略に注意

  • 省略しすぎるとミスを招く
  • IDE上での補完に頼りたければ、多少長くなっても型を明記
  • Implicit Assertionの使い方に注意。ifでくくるとエラーになる。どうせなら全部にassert入れる
PageObjectの作り方に注意

getter/setterを作らなくても動かせるので、ついつい生処理を書いてしまいがち

ちゃんと隠蔽する

Q&A

どのように勉強すればよいか?
Gebの公式サイトにBook of Gebがあって体型的になっているのでお勧め。
Groovyは都度調べてる

海外のSeleniumカンファレンスではどんな発表がされているのか2014 by 伊藤望さん

Selenium Conference

  • 2011円から毎年開催
  • 世界中からSelenium開発者・ユーザーが集まる
  • 3日間にわたるセッション&ワークショップ

セッションの紹介から抜粋

  • 画面テスト少なめに、単体テストに可能な限りする
  • 自動化テストでセキュリティテストもやるべきか
  • AllureフレームワークでSeleniumの結果レポートを出力する

ハイパフォーマンスSeleniumテスト@サイボウズ by 宮田淳平さん

ベストプラクティスというよりは実運用での実体験の話

パフォーマンスの定義

  • 実行時間
  • 安定性
  • メンテナンス性

※ Jenkins + Pipeline Pluginでビルドパイプラインを視覚化

実行時間の短縮

  • 余計なテストを作らない
    • メインシナリオのテストが無難。単体テスト、APIテストなどでカバーする
  • 並列化

並列化

  • 1マシンで起動できるブラウザは1つまで
    • 複数起動もできるけど、フォーカス関係でテストが不安定になるのでオススメしない
  • 複数のバージョンに対応するにはさらにマシンリソースが必要になる
並列実行環境の構築
クラウドサービス
  • Sauce Labs, TestingBot, BrowserStack
  • あらゆる環境 + 録画機能など
  • 予算があるなら一番おすすめ
VM
  • VMテンプレートを作って量産
  • そこそこリソース必要&なかなかメンテナンス大変
docker
  • 高速デプロイ&軽量
  • ただし環境は限られる
  • 時期Windows Serverはdocker対応するらしいので期待
テストの実行順序
  • 長いテストが最後に実行されると全体のテスト実行時間が長くなる
個々のテストの高速化
  • 基本的に並列化の力を入れる方が効果が大きい
  • 極端に長いテストは改善した方がよい
    • 実行時間の長いテストは普段からわかるようにする
  • 共通処理で時間がかかっているところは改善の価値あり(初期データの作成など

安定性

  • リトライ
    • 不安定なテストが救われる
    • リトライしたテストはわかるようにして後で直す
  • 明示的なWait
    • findElementなどは不安定に失敗することがあるので条件付きWaitを使う

メンテナンス性

  • PageObjectパターン
  • 失敗時のスクリーンショット、録画
  • テストコードの品質は製品と同じくらい大事
    • 命名規則作ったりレビューしたり
    • DRY原則とかKISS原則とかYAGNIとか

事例が少ないのでもっと共有されると嬉しい

Q&A

なかなかここまでチームでテストを浸透させるのは難しいはず。どうやってテストを書かせたか
1回テストがメンテ不能に陥った。
継続的デリバリー(実践アジャイルテスト)という本の勉強会で大切さを共有。
受け入れテストを書き終わって実装完了を徹底。
動画はどうやって撮ってる?
Seleniumとは別のpythonのライブラリを使用して実現している

クックパッドアプリの開発を支援するAppiumの話 by 松尾和昭さん(@Kazu_cocoa)

海外では回線が遅いのでアプリが主流。

リリースビルドをテストする

iOS
UIAutomation

cookpadでの使用ツール群

Ruby + RSpec + Turnip
ImageMagick or perceptualdiff
Selenium Grid

Appiumのよいこと

  • リリースビルドをテスト可能
  • 多彩なツールの組み合わせ
    • Appiumは

Appiumのよくはないところ

  • 実績がない
  • 実行に時間がかかる
  • 誰もがAppiumを使える環境の構築が手間
    • 社内に広げるきっかけが妨げられる

iOSクックパッドアプリ実践

  • ネイティブアプリ
  • UIの修正が頻繁
  • 約2週間毎にApple Storeにコミット