2016/2/6 に開催された、第3回日本 Selenium ユーザーコミュニティ勉強会に参加してきました。

当日(座って聞けた部分については)メモを残したりしてたので、加筆&整形して残しておこうと思います。

開会あいさつ  TRIDENT  伊藤さん

  • 今回は参加者が多い。最終的に、スタッフ除いて 100 人程度となった。
  • 『Selenium 実践入門』発売記念も兼ねて開催。そのため、この本にまつわる話もたくさん。
  • ユーザコミュニティとしては今 Slack が活発で、気軽に質問もできる雰囲気:日本 Selenium ユーザーコミュニティ
  • 勉強会申し込み時のアンケートを見ると、利用言語としては Java が多いが、最近は Ruby 等他の言語も増えてきている
  • 同じくアンケートの結果、Selenium の利用目的はテストが多い。少し Web スクレイピングも。

SHIFT  太田さん&玉川さん 「Selenium デザインパターン&ベストプラクティス」の勘所

Seleniumデザインパターン & ベストプラクティス

書籍の特徴

  • IDE で記録したいけてないコードから始めて改善していくような内容

自動テストウェアのアーキテクチャ

自動テストやるときって作らないといけないものがいろいろある

  • UIMap とか
  • ライブラリとか

これらがないと、保守・メンテが大変になる。

長期運用しやすいように考えよう。

いけてないテストスクリプトの例

EC サイトの商品コメント欄の仕様として「同じ内容のコメントは複数投稿できない」と定まっているのに、テストスクリプトが毎回同じ文字列をコメントに書くような作りになっている

→ 1回動かしたら2回目以降失敗する

アンチパターン

record and playback パターン

操作記録してそのまま実行する。

始めるにははやいが、スクリプトがわかりにくい

Sphagetti パターン

テストケース間の依存があるパターン。あるケースの失敗が原因で以降が動かないなど。

ChainLinked パターン

多少構造化したものの、依存関係があるパターン

BigBallofMad パターン

独立性はあって順番関係なく実行はできるが、構造化してないパターン

よいパターン

DRY テストパターン

DRY = Don’t repeat yourself!

DRY を維持し続けるにはそれなりのスキルが必要となる。

Hermetic テストパターン

依存関係をなくしたパターン。

テスト間の依存関係を無くすためにデータ準備等の処理が入るので、テストの実行時間が長くなる場合も。

トレードオフで考えよう。

ランダム実行順序原則

テストケースをランダムな順序で実行する。

順序依存になっていないかがわかる。

太田さんデモ

実際の良いパターンといまいちなパターンを見比べながら、実行

TRIDENT 伊藤さん「Selenium 実践入門」で学ぶテスト自動化の世界

Selenium実践入門 ―― 自動化による継続的なブラウザテスト (WEB+DB PRESS plus)

Selenium テスト自動化の世界

一昔前は・・・

  • CI とかあんまりやってる人がいない
  • SeleniumRC/IDE があまり安定してない
  • 事例もツールベンダの Web ページにちょっとあるくらい
  • 開発プロセスから分離された自動テスト

その後

  • 2010, 2011 あたりから商用とオープンソースのトレンドが移り変わってきている
  • CI がメジャーになった
  • オープンソースの存在感が増した
  • 国内ユーザ企業からの事例発信が増えた
  • 開発プロセスと統合された自動テスト

本の立ち位置

Selenium だけの使い方にとどまらない内容

  • コマンドの解説は Java
  • 巻末チートシートに主要コマンド文法

初心者が読んで終わりではなく、ずっと手元におきたい1冊になるようにした。

本ならではのコンテンツで、API ドキュメント読んだだけではわからない部分が書かれている。たとえば

  • ファイルダイアログ
  • Basic 認証
  • HTTP ヘッダ

など。

運用や事例の章もある。

Geb、FluentLenium などの便利ラッパの紹介。

第一章(テスト自動化とそのメリット)では基本的な内容が書かれているが、買った人が読むというよりは、買った人が上司や後輩に「とりあえずこれ読んどいて」的な使い方を想定しているため。

Yahoo  太田さん  E2E テストフレームワークを使用したテスト自動化事例

どうやって使うフレームワークを決めたか

各チームによって言語がまちまちで要件いろいろ。

その中で

  • Nightwatch.js
  • Protractor

を候補に調査。

Nightwatch.js のよかったところ

スクリプトやログが見やすかった

Protractor のよかったところ

自動待機機能があり、明示的に待機を書かなくてよかったのでスクリプトがシンプルに。

E2E テストとは

利用者の視点に立ってサービスが正しく動いているかどうか確認する

環境構築

テスト時に専用環境が自動構築される。

PhantomJS

ヘッドレスブラウザとしてPhantomJSも使った。画面出さないけどスクショが取れる。

↑このへん、自分も近いことを思いました。描画しない分早いとか、画面側のテストとJavascriptのテストを分けてるとか?

結局この PhantomJS はうまく行かなかったので、リアルブラウザ(Firefox とか)をヘッドレス化してつかうことにした。

Xvfb を使って。

Qiitaにこんな情報ありますしね。↓

Xvfb を利用したヘッドレスブラウザテスト

DeNA  平田さん  STF と Appium をもちいた Android アプリの自動テスト

STFを初めて聞きました。SmartphoneTestFarmの略らしいです。

Fastest device testing Smartphone Test Farm

検証用端末をブラウザから操作できて、ほぼリアルタイム。

STF を聞いたことあるひとー!

10 人くらい?ぽつぽつ

Appium 聞いたことあるひとー

40 人くらいが手を挙げた

Android アプリの自動テストでの課題

  • まず、何使う?

→   Google からいろいろ提供されだしているので、あまり迷うことはなくなってる

環境面倒

  • 実行端末が環境に繋がれてないといけない
  • 端末で実行されているかの判断がいる
  • Jenkins マシンにスマホを繋がないといけなかったり
  • どのテストをどのスマホでやるかを固定しないといけなかったり

そこで STF(smartphone test farm)

  • リモートデバッグもできる

Android アプリの自動テストは STF + Jenkins + Appium + Docker

小島さん Azure を使って手軽にブラウザテストをはじめよう

エクセルにエビデンスをコピペする簡単なお仕事・・・は辛いですよね

効率よくしたい、辛いと思って自動化を始めた

自動化で悩んだポイント

いわゆるあるある。

ただこれからやる人には参考になるはず。

PooSunny さん  Geb に実践入門するために

Selenium 実践入門にも書いてあるGebについての紹介

Geb のメリット

普通に書くとこんなに長いところが、Geb を使うと・・・こんなにすっきり!

Geb のデメリット

環境構築まわりが大変

Monocrea 桑原さん エビデンス取るのも自動化したい!

テストエビデンスとるの嫌だよね!

→ 会場から大きな拍手

だからブラウザの自動テストツールつくりました、エビデンスを自動で取って HTML レポート出力してくれるよ!というお話。

SIT-WT

サイボウズ 宮田さん Selenium アンチパターン

サイボウズの事例は Selenium 実践入門にも。

アンチパターン1:なんでも Selenium

とにかく Selenium でなんでも自動化だ!と始めたものの、開発者の気まぐれでテストケースが追加されたり、自動化されているテストされていないテストが整理されてなかったり・・・

そうこうしているうちにメンテ工数増大してばーん

解決策・・・

Selenium を避けることを考えよう。

  • 静的解析
  • 単体テスト
  • API テスト
  • 手動テスト

など、最適なものを選ぼう。あえて自動化しないのも選択肢。

「自動化してほしい」という顧客の要望があっても、本質は「効率化したい」のはず。自動化エンジニアの経験から、本当にお客さんにとって効率化・省力化に繋がる方法を提案すべき。(たとえそれが「自動化しない」であったとしても)

アンチパターン2:手動テストのかわり

開発プロセスの手動テスト部分にそのまま Selenium での自動テストを追加

→ 最終的に破綻

工数削減だけが目的だとつらい

常に繰り返し実行すること、につきる。

放置するとメンテ工数が増えていって手がつけられなくなる。

アンチパターン3:クロスブラウザがんばりすぎ

解決策・・・

IE はアレですよね

→ 会場が同意

ブラウザを絞ろう。過去にブラウザ依存の不具合がどれだけ出ているかなどで判断しよう。

戸田さん 薄っすい話百八式

テストでダメだったときにショウ君(VoiceText)に「○○ さんのコミットでテストが失敗したみたいっす」って喋らせたりするなど。とにかく面白い話。

参加者の方のまとめ記事