今さらSelenium CoreでWebアプリテストの自動化

愚痴

最近は比較的自分の中では TDD のサイクルは安定して回っているんだけど、TDD でやりにくい部分についてはそれほど必死にやらないようにしている。TDD が絶対だとも思っていないし、「技法」を編み出すための時間を用意するのも正直難しい。

それでもやはりやりにくいなりに自動化したい部分はあって、その一つが各ブラウザでの検証作業。いちいちフロントエンドを直すたびにいろんなブラウザで手作業で検証するのは面倒なのでやりたくない。

以前はあまりフロントには時間を掛けていなかったというかあまりフロントで問題が出ないようにモノを作っていたんだけど、最近は JavaScript フレームワークやそれを利用したいわゆる "Good Parts" が増えてきていて、ちょっとした味付けに利用したりすることが増えてきている。

そのまま使っている場合はいいんだけど、ちょっとしたカスタマイズを加えてほしいというケースはやはり多く、そうなると途端に IE 6 などで動きが怪しくなる。まぁ

IE 6 は別料金だよね

とは思うものの、できることを放棄するのはまたちょっと違うとも思う。

要件

そこでこんなツールが欲しいと思った。

  • Webアプリの TDD で漏れがちなのはフロントエンド
  • できるだけ大げさな道具は使わず、誰でもテストを書いて実行できるのが理想
  • 完璧なテストを望む気はさらさらないが、regression はできるだけ避けたい

で、そう言えば自分は Selenium IDE を使ってるけど、Firefox 以外でテストしたいなら Selenium Core でいんじゃね?と思った次第。テストケースがちゃんと記述できていれば最悪テストは自分でやらなくていいし :-P 1

※ というか以前 Selenium Core は試しているんだけど、なんで使わなくなっちゃったんだろう? 厳密なテストにこだわりすぎていたからかな?

Selenium Core の制限

  1. テストしたいアプリと同じサーバに Selenium Core が deploy されている必要がある
  2. Test Suite, Test Case を HTML で記述する必要がある

1 については http://selenium.googlecode.com/svn/tags/selenium-core/ 以下を svn:externals にしちゃえばいい気がする。そうすれば svn co すれば自動的にインストールされる2

ディレクトリツリーはこんな感じでいいんじゃないか。

project/
  app/
  selenium/    svn:externals
  tests/
    selenium以外のテスト/
    selenium/

2 については Selenium IDE を使う :-)

Selenium IDE 利用時の注意点

デフォルトの Selenium IDE のウィンドウ

場当たり的に Selenium IDE を使っているときには問題にならないんだけど、ちゃんと Test Suite, Test Case を保存するために使うとすると気をつけなきゃいけないのが、Test Suite, Test Case の存在が分かるように使うこと。

なんでわざわざこんなこと書くかと言うと、自分が気づかなかったからなんだけど :-)

テストケースを選べる状態の Selenium IDE

画像を見てもらうと早いんだけど、Selenium IDE は複数のテストケースを扱うインターフェイスがデフォルトでは隠れちゃってるのね。これ。これだけ気をつければ ok. あとは必要なテストケースを作り、作り終わったらテストスイートを保存すればいい。

保存先はもちろん上の

project/tests/selenium/

内になる。

ちょっと面倒なのは Test Suite, Test Case は一つずつ保存しなきゃいけないことかな。Test Suite の保存をしようとするとこの Test Case を保存しろ、この Test Case も保存しろと言われる。

イマドキ の Web アプリは遅延ロードしまくり

Selenium IDE で「記録」される操作は基本的に遅延ロードを考慮していない。普通に生成された HTML を対象にするのと同じで、人間が「待っていた」部分は記録されていない。そこで

記録されたテストケースに waitFor をいろいろ書き足してやる必要が出てくる。

逆に言うとそこを気をつけてあげれば十分使えるテストケースになる。

例えば RTM でタスク登録のテストをする場合、ログイン後、実際にタスクを入力できる状態になるまで最初の DOM 構築3後の遅延生成を待つ必要があるが、これは以下のように書いてやると実現できる。

<tr>
  <td>waitForTextPresent</td>
  <td>タスク</td>
  <td></td>
</tr>

こんな記述を随所に書き足しやる必要が恐らく出てくると思う。

open する URL

わざわざディレクトリレイアウトを示した理由は、open する URL は相対でいいから。これはたぶん Selenium IDE 上じゃなくて repository に突っ込んだ状態で手作業で修正することになるんだけど、例えば

project/tests/selenium/case1.html

のテストケースでは open する URL は

../../app/PATH/TO/RESOURCE

と書くことができる。こうしておけば他の人の環境で svn up してすぐにテストしてもらえる。はず。

  1. 実は冗談ではなくて Mac 以外の環境でのテストは自分の負担が無駄にでかいので、可能な限り別な人にお願いしたいのだ。自分用の Windows マシンも仮想環境の Windows もないので。 

  2. 正確には 1.0.1 は http://selenium.googlecode.com/svn/tags/selenium-core/REL-1.0.1/src/main/resources/core/ 

  3. window.onload 

X.Org が上がった

php4-gd が portupgrade で引っかかったので何かと思ったら X.Org が上がっていろいろ変更になったっつー話をどこかで読んだのを思い出した。どうもその辺の影響っぽいので、UPDATING を読みながら X.Org を上げ、その後 PHP を 4.4.7 にアップグレード。

これと言って問題はなさげ。

cf. 2007年5月23日 GCC 4.2.0への移行による影響,X.Org 7.2.0へのアップグレードに伴うglxgears(1)の移行,PHPアップグレード,MySQLアップグレード|gihyo.jp

Camino 1.5

キターということで早速ゲット。

おや。

検索窓を消せなくなったのか。代わりに URL の欄との境目をスライドさせて見えなくすることはできるようになった。なるほど、他のアプリに近い感じだな。

あれ。

タブの移動はできないのか。うーむ。そこは相変わらずなのね。

Session Savior が入ってる! これはいい。

MacIE は動的ロードで除けちまうのがいいかも

※ 実際の除外の様子は「JavaScript の動的ロードで(結果的に)Classic Mac を除外する」、「XMLHttpRequest を使ったスクリプトのロードは意外と面倒」を参照してください。

JScript のバージョン情報 (microsoft.com)

という情報があって、MacIE の JScript は調べるとバージョン 5 で、Array#push() がなかったり Ecma-262 3rd Ed. に準拠していないことが判明。XMLHttpRequest がどうとかいうレベルじゃない。

そこで、もうこういう環境で同じものをコンパイルして動かそうなんつーのは無理な注文として考える。ではどうやって切り分けるかっつーことなんだけど、

条件付きコンパイル (microsoft.com)

という手もあるんだけど、いちいち避けていくのは大変なので、スクリプトから XMLHttpRequest でスクリプトを動的ロードしちゃえばいいんじゃないだろうかという気がしてきた。1ライブラリをロードできた環境だけで JavaScript がまともに動く。そうでない環境はもう JavaScript が on になってても動かないものと解釈して無視する。

Junnama Online: Web2.0でもITベンチャーでも何でもいいけどさ、もう少しレベル上げろよ。

別にこれ読んだから書くわけじゃないんだけど、無視するってのは JavaScript による機能付加を諦めるって意味ね。この間も書いた、Ajax は「アプリ」じゃなくて「サイト」には使いにくい技術だなってのはこの辺にも通じる話。

ただ自分としては「非対応をはっきり言うサービスもアリ」だなと思ってる。それは単に情報や機能が提供できればいいわけじゃなくて、「操作性を含めた experience をサービスしている」と考えれば合点がいく2

つかね、無理なもんは無理だから。同じブラウザってカテゴリに属するソフトだからって同じ情報にたどりつけるとは限らないのはもう明白なことなんで。テキストブラウザで画像が表示できないってことで怒る人はいないでしょ? 画像が表示できないと何が何やらまったく意味が分からないから怒るんであって。ただそういう(非対応をはっきり言う)態度は、できるだけ広いユーザーにリーチすべき「サイト」としては容認できない場合もあるっつーことなわけ。

Web屋って一口に言っても企業の顔的サイトを扱う人もユーザー限定のイベント系サイトを扱う人も、イントラ用のツールを作る人も一緒くたに「プロ」で、お互いにお互いのことが分かっちゃいねぇって思ってるフシがあるからややこしいんだよな。

  1. これは将来的には WinIE 6 以前に緩やかに引退していただく場合にも使えそうだ。 

  2. そうは言っても Win + IE + MediaPlayer 以外お断り、みたいなサービスは権利処理の問題だけ(もしかしたらそれプラス開発サイドのツールの問題)のためにその組み合わせにしてるのが見え見えで心情的にはとてもイヤですが。ユーザーありきでサービスを提供せずに、機能というか技術的な問題とビジネスの問題が優先されてるわけだから。 

優越感ではない自信というものはないのか

「デビュー」とは「高校デビュー」から転じた造語

もっともな話だなぁと思いながら、なんだか悲しい気分になってしまうのはなぜだろう。

どうして人と比較して優越感を感じなければいけないのだろう。どうして他人を貶めなければやってられないのだろう。元をたどると、どうして自分を卑下しなければいけないのだろう。

なんだか悲しい文化だなぁ。

まぁ根拠なくみんなが自信満々つーのも、それはそれでどうだろうと思ったりするのだけれど、自分を支える何かは、自分の周囲数km 程度の狭い範囲の中での比較からしか生まれないのだろうか? なんて書いてる自分も細かい比較と細かい優越感で自分を繋ぎ止めるのに必死なんだよな。やだなぁ。ばっかみたい。

だからと言って全部達観できるようになんかなりたくないし、全部ネタとして消化できちゃうようにもなりたくないし、怒りを忘れたくもないけど。自分の中に黒い部分があるからこそ頑張れてるっつー面もあるわけだから。

あったんだ。。。

http://www.maxivista.com/

Windows ノートのディスプレイをデュアルモニタのセカンダリにするソフト。こんなんほしかった。

やっと死蔵リンク集をパージ

これで説教講座はようやく新規に書く分だけを気にすればいい状態になったか?

……。まだでした。Reviews どうすっかな。ThinkFree Office と Compaq Armada と ThinkPad しかネタがないのでなかったことに

つーことで trans のディレクトリをスパっと公開して、これで完済だろ!

「昭和の日」法案、今国会成立見送り方針 自民・公明

from asahi.com

さっさとやったらええやん。「みどりの日」って意味分からんし。それか祝日でなくする。いちおう日本が今の形になった憲法関係の記念日は2つもあるんだし。

まぁゴールデンウィークの経済効果を考えると祝日でなくするのは現実的じゃないだろうけど。(休みが減るのはこっちもいやだし。)

派遣 → 正式雇用

サインはVGA

なんだか用途が微妙なような。。。

  • 手軽に持ち運べる液晶モニタ
  • 拡張性の低い PC

あるいは

  • デュアル出力ができなくて USB 2 を備えたノート PC

という具合に組み合わせや接続元の PC を選ぶような気がする。あるいは

  • 普段はデュアルモニタなんか邪魔だし要らないんだけど、どうしてもたまに必要になる

ような状況だろうか? それにしても XGA(16bit) っていう性能も実に半端な気が。

それともデュアルモニタ対応のグラフィックカードは確実に1万円以上するんだろうか? それなら廉価版という捉え方だけでもすっきり納得することができるけど。

  • iBook G4
    • サイトを見る限りミラーリングしかできない
    • ファームウェア書き換えで Mobility RADEON 搭載の(要するに最近の)iBook なら可能らしい
  • ThinkPad
    • 経験上ミラー以外できた試しなし
  • FMV BIBLO や Mebius
    • いじったことのある機械の中にミラーだけでなくデュアルでイケるものもあったが、最近の機種にはそういうのはないのか?

あ。

  • 普通の人が買うノートには VGA 出力なんかない場合が多い

という事実を忘れてたよ。。。

いつの間に、、、

気づいてなかった。Lycos Japan がシンプル路線に少し戻りました。よい! 歓迎します! でもそのうち infoseek と統合だって分かってるサイトを今さら活用したいとも思わないなぁ…。

Yahoo の検索に辞書が入ったんですね。これ、表示がすげーそっけなくていい!(笑) w3m 使いにはもってこいでしょう。なんて素晴らしいサイトなんだ、Yahoo Japan !

About

例によって個人のなんちゃらです

Recent Posts

Categories

Tool 日々 Web Biz Net Apple MS ことば News Unix howto Food PHP Movie Edu Community Book Security Text TV Perl Ruby Music Pdoc 生き方 RDoc ViewCVS CVS Rsync Disk Mail FreeBSD Cygwin PDF Photo Zebedee Debian OSX Comic Cron Sysadmin Font Analog iCal Sunbird DNS Linux Wiki Emacs Thunderbird Sitecopy Terminal Drawing tDiary AppleScript Life Money Omni PukiWiki Xen XREA Zsh Screen CASL Firefox Fink zsh haXe Ecmascript PATH_INFO SQLite PEAR Lighttpd FastCGI Subversion au prototype.js jsUnit Apache Trac Template Java Rhino Mochikit Feed Bloglines CSS del.icio.us SBS qwikWeb gettext Ajax JSDoc Rails HTML CHM EPWING NDTP EB IE CLI ck ThinkPad Toy WSH RFC readline rlwrap ImageMagick epeg Frenzy sysprep Ubuntu MeCab DTP ERD DBMS eclipse Eclipse Awk RD Diigo XAMPP RubyGems PHPDoc iCab DOM YAML Camino Geekmonkey w3m Scheme Gauche Lisp JSAN Google VMware DSL SLAX Safari Markdown Textile IRC Jabber Fastladder MacPorts LLSpirit CPAN Mozilla Twitter OpenFL Rswatch ITS NTP GUI Pragger Yapra XML Mobile Git Study JSON VirtualBox Samba Pear Growl Mercurial Rack Capistrano Rake Win RSS Mechanize Sitemaps Android JavaScript Python RTM OOo iPod Yahoo Unicode Github iTunes God SBM friendfeed Friendfeed HokuUn Sinatra TDD Test Project Evernote iPad Geohash Location Map Search Simplenote Image WebKit RSpec Phone CSV WiMAX USB Chrome RubyKaigi RubyKaigi2011 Space CoffeeScript Nokogiri Hpricot Rubygems jQuery Node GTD CI UX Design VCS Kanazawa.rb Kindle Amazon Agile Vagrant Chef Windows Composer Dotenv PaaS Itamae SaaS Docker Swagger Grape WebAPI Microservices OmniAuth HTTP 分析基盤 CDN Terraform IaaS HCL Webpack Vue.js BigQuery Middleman CMS AWS PNG Laravel Selenium OAuth OpenAPI GitHub UML GCP TypeScript SQL Hanami Document SVG AsciiDoc Pandoc DocBook Develop Jekyll macOS Node.js Vite Heroku Transformer AI Data Cloud Wasm