Selenium について

自動化するか、しないか、それが問題だ

自動化には常にメリットがあるのでしょうか。テストケースをいつ自動化すればよいかは、どのように見極めたらよいのでしょうか。

テストケースを自動化すれば常にメリットがあるかといえば、 決してそうではありません。 人手によるテストの方が適している場合も多くあります。たとえば、アプリケーションのユーザーインタフェースが近い将来大幅に変わる場合には、テストを自動化したとしても、すべてを書き直さなければならなくなります。また、テストの自動化を行うだけの十分な時間的余裕がないこともあります。短期間なら、人手によるテストの方が効率的でしょう。実際、作成するアプリケーションのデッドラインが非常にタイトで、テストの自動化に使えるツールの手持ちもなく、定められた期限までにテストを終えることが至上命令である場合には、人手によるテストが最善のソリューションになります。

しかし、テストの自動化には、ソフトウェアチームのテストプロセスの長期的効率を高めるという具体的なメリットがあります。テストの自動化は、次のようなことを可能にします。

  • 頻繁な回帰テスト
  • まだ開発工程にいる開発者への迅速なフィードバック
  • テストケースの事実上無限の反復実行
  • アプリケーションバグに関するカスタムレポートの作成
  • アジャイル開発とエクストリーム開発手法のサポート
  • 整った形でのテストケースの文書化
  • 人手によるテストで見落とされたバグの発見

Web アプリケーションのテストの自動化

現在、多くのソフトウェアアプリケーション、もっと言えばほとんどのソフトウェアアプリケーションは、インターネットブラウザで実行する Web ベースアプリケーションとして作成されています。こうしたアプリケーションのテストの効率は、企業や組織によって大きな差があります。エクストリームプログラミング (XP) やアジャイル開発など、ソフトウェアプロセスを継続的に改善していく開発手法が登場しているなかにあって、整った形でテストと品質保証を行う習慣は、多くの組織では依然として十分には普及していないと言えるでしょう。ソフトウェアテストはしばしば手作業で行われています。このような方法が効率的な場合も多くあります。しかし、人手によるテストに代わる選択肢も存在しており、多くの組織はそのことに気付いていなかったり、実行するための十分なスキルを持っていなかったりします。ほとんどの場合、これらの選択肢を使えば、テストの効率が改善され、それに伴ってソフトウェア開発の効率も大幅に向上します。

テストの自動化こそがカギである場合も多いのです。テストの自動化とは、ツールを使って、ターゲットアプリケーションを対象に、反復可能なテストを必要に応じて実行することを意味します。

テストの自動化には多くのメリットがあります。そのほとんどは、テストが再現可能であること、そしてテストの実行速度に由来しています。テスト自動化開発の支援に利用できる商用またはオープンソースのツールもいくつか存在します。その中で、Selenium はおそらく最も広く使われているオープンソースソリューションでしょう。このユーザーズガイドでは、Selenium の初心者と熟練ユーザーの両方を対象に、Web アプリケーションのテスト自動化を行うのに効果的なさまざまなテクニックについて説明しています。

このユーザーズガイドでは、まず Selenium とはどんなものなのかを紹介した後、Selenium が持つ機能の中で広く使われているものについて説明し、Selenium コミュニティに蓄積された情報に基づいて、ベストプラクティスの実践に役立つアドバイスを提供します。サンプルも豊富に用意しています。また、Selenium の熟練ユーザーからの協力を得て、Selenium の内部構造に関する情報や Selenium の上手な使い方についても解説します。このユーザーズガイドが、テスト自動化に Selenium を使う新しいユーザーの拡大につながるよう願っています。ユーザーズガイドを通じて、品質保証とソフトウェアテストには、現在行われているもの以上に多くの選択肢があることを知ってもらえたら、ドキュメントチームとしては嬉しい限りです。このユーザーズガイドと Selenium が読者のソフトウェアテストプロセスの効率を大幅に向上させる一助となれば幸いです。

Selenium とは

Selenium は、Web ベースアプリケーションのテスト自動化の高速開発をサポートした堅牢なツール群です。Selenium は、Web アプリケーションのテストニーズに特化したテスト機能を豊富に備えています。テスト操作の柔軟性は高く、UI 要素を特定したり、テストの期待値と実際のアプリケーションの動作を比較したりするための多数のオプションを利用できます。

1 つのテストを多数のブラウザプラットフォームで実行できる点は、Selenium の優れた特徴のひとつです。

Selenium のコンポーネント

Selenium は 3 つの主要ツールから構成されています。それぞれのツールは、Web アプリケーションのテスト自動化開発を支援する固有の役割を担っています。

Selenium-IDE

Selenium-IDE は、Selenium テストケースを作成するための統合開発環境 (IDE) です。Selenium-IDE は Firefox アドオンとして動作し、個々のテストケースまたはテストスイート全体の開発と実行を行うための使いやすいインタフェースを備えています。Selenium-IDE には記録機能があり、ユーザーの操作を実行と同時に記録し、再利用可能なスクリプトとして保存して、あとでこれらの操作を再生することができます。また、Firefox ブラウザにはコンテキストメニュー (右クリックで表示されるメニュー) が組み込まれており、このメニューを使えば、選択した場所で実行するアサーションと検証をリストから選択できるようになっています。Selenium-IDE には、テストケースをきめこまかくコントロールするための充実した編集機能も備わっています。

Selenium-IDE は Firefox のみに対応するアドオンですが、Selenium-IDE で作成したテストは、Selenium-RC を使って、コマンドラインでテストスイートの名前を指定することで、ほかのブラウザでも実行することができます。

Selenium-RC (Remote Control)

Selenium-RC を利用すれば、テスト自動化開発者はプログラミング言語を使って、テストロジック開発の柔軟性と拡張性を最大限に高めることができます。たとえば、テスト中のアプリケーションが結果セットを返し、自動化されたテストプログラムではこの結果セットの各要素に対してテストを実行する必要がある場合、プログラミング言語がサポートする反復構造を使って結果セットに対して繰り返し処理を行い、各要素を対象にテストを実行するための Selenium コマンドを呼び出すといったことができます。

Selenium-RC では、API (アプリケーションプログラミングインタフェース) が提供されているほか、Selenium-RC でサポートされている言語、すなわち HTML、Java、C#、Perl、PHP、Python、および Ruby 用のライブラリも用意されています。Selenium-RC を高水準プログラミング言語とともに使ってテストケースを開発できるということは、自動化されたテストをプロジェクトの自動ビルド環境に統合できるということを意味します。

Selenium-Grid

Selenium-RC ソリューションは、Selenium-Grid を利用することで、大規模なテストスイートや、複数の環境で実行しなければならないテストスイートに対応させることができます。Selenium-Grid では、さまざまなオペレーティングシステムとブラウザ上で Selenium-RC の複数のインスタンスが実行されます。各インスタンスは、起動時にハブへの登録を行います。テストがハブに送られると、テストは利用可能な Selenium-RC にリダイレクトされ、該当する Selenium-RC はブラウザを起動してテストを実行します。このしくみによってテストを並行して実行することができるので、テストスイート全体の実行時間は、理論上、その中の最も長いテストの実行時間と同じになります。

サポートされているブラウザ

ブラウザ Selenium-IDE Selenium-RC オペレーティングシステム
Firefox 3 1.0 Beta-1 および 1.0 Beta-2: テストの記録と再生 ブラウザの起動、テストの実行 Windows, Linux, Mac
Firefox 2 1.0 Beta-1: テストの記録と再生 ブラウザの起動、テストの実行 Windows, Linux, Mac
IE 8   開発中 Windows
IE 7 Selenium-RC を介したテストの実行のみ* ブラウザの起動、テストの実行 Windows
Safari 3 Selenium-RC を介したテストの実行のみ ブラウザの起動、テストの実行 Mac
Safari 2 Selenium-RC を介したテストの実行のみ ブラウザの起動、テストの実行 Mac
Opera 9 Selenium-RC を介したテストの実行のみ ブラウザの起動、テストの実行 Windows, Linux, Mac
Opera 8 Selenium-RC を介したテストの実行のみ ブラウザの起動、テストの実行 Windows, Linux, Mac
Google Chrome Selenium-RC を介したテストの実行のみ (Windows) ブラウザの起動、テストの実行 Windows
上記以外 Selenium-RC を介したテストの実行のみ 部分的サポートが可能** 該当OS

* Selenium-IDE を使って Firefox 上で開発したテストは、シンプルな Selenium-RC コマンドラインを使って、サポートされているほかの任意のブラウザで実行することができます。

** Selenium-RC サーバーは任意の実行可能プログラムを起動できますが、ブラウザのセキュリティ設定によっては、技術的制限が生じ、機能が限定される可能性があります。

柔軟性と拡張性

実際に使ってみると、Selenium が非常に高い柔軟性を持っていることに気付くはずです。Selenium のフレームワークにはさまざまな方法で機能を追加することができ、ユーザーは各自のテストニーズに合わせて、テストの自動化をカスタマイズすることができます。おそらくこの点こそ、各種のプロプライエタリなテスト自動化ツールやほかのオープンソースソリューションに比べて、Selenium が最も威力を発揮する部分でしょう。Selenium-RC は複数のプログラミング言語やスクリプト言語をサポートしているので、テストの作成者は、自分が必要とするものならどのようなロジックでも、自動化されたテストに組み込むことができるうえ、自分が使い慣れたプログラミング言語またはスクリプト言語を使うことができます。

Selenium-IDE では、ユーザー定義の “user-extensions” を追加して、自分のニーズに応じてカスタマイズしたコマンドを新しく作成することができます。また、Selenium-IDE による Selenium-RC コードの生成方法を設定し直すこともできます。ユーザーはこうした機能を活用することで、実際に使用しているテスティングフレームワークに合うように、生成されるコードをカスタマイズすることができます。さらに、Selenium はオープンソースプロジェクトなので、コードを自分で変更することができ、機能を強化したら、それをコミュニティに還元して貢献することができます。

本書について

このリファレンスドキュメントは、Selenium の初心者と、すでに Selenium を使っているユーザーの両方を対象にしており、それぞれが知識を深めることができるように書かれています。初心者には Selenium によるテスト自動化について説明します。本書では、ごく基礎的なことを除いて、読者にテストの経験があることを前提としていません。

Selenium の熟練ユーザーも、本書から有益な情報を得ることができるでしょう。豊富な経験と知識を持つ多くの Selenium QA 専門家から寄せられた Selenium 活用のテクニックやベストプラクティスが 1 つのドキュメントにまとめられているからです。

本書のこれ以降の章で取り上げる内容は次のとおりです。

Selenium の基礎
自分が目的とするテスト作業に最も適した Selenium コンポーネントの選び方について説明します。また、Selenium のコマンドと構文についても大まかに解説します。この章を読めば、テスト自動化に対する Selenium のアプローチ方法についてもある程度感触をつかむことができるので、自分の場合はどこから手を着ければよいのか見当がつくでしょう。
Selenium-IDE
Selenium-IDE を使ってテストケースを作成する方法について説明します。また、スクリプトの可読性を高めるさまざまなテクニックも紹介します。スクリプトの可読性が向上すれば、作成した Selenium テストで見つかったバグを解釈するときに役立ちます。さらに、作成したテストスクリプトを、選択したプログラミング言語に「エクスポート」する方法についても説明します。最後に、テストケース開発を支援する Selenium-IDE の機能を拡張したり、カスタマイズしたりするのに利用できる設定項目について解説します。
Selenium のコマンド
Selenium の主要コマンドについて詳しく説明します。この章では、Web アプリケーションに対してどのような種類のアクション、検証、アサーションを適用できるかを示します。
Selenium-RC
Selenium-RC API を使って、自動化されたテストプログラムを開発する方法について説明します。プログラミング言語とスクリプト言語の両方について、たくさんの例を示します。また、Selenium-RC のインストールとセットアップについても説明します。Selenium-RC がサポートしているさまざまなモード (すなわち設定)、これらのモードを使うことによる代償と制限についても解説します。こうした点をわかりやすく示したアーキテクチャの図も示します。Selenium を使い始めたばかりのユーザーがしばしばつまづく問題の解決方法についてはこの章で説明します。たとえば、セキュリティ証明書や HTTPS リクエスト、ポップアップの扱い方や、新しいウィンドウの開き方などです。
テスト設計に関して考慮すべきこと
Selenium を効率的に使うための有益なテクニックを多数示します。たとえば、Selenium-RC で使用するためのスクリプト記述のテクニックやプログラミングテクニックなどです。テスト中のアプリケーションに存在するバグの報告方法を示すソースコード例も掲載します。また、データ駆動型テスト (異なるテストパスでデータを変更できるテスト) の実装方法など、ユーザーグループでよく質問される問題に対処するためのテクニックも紹介します。
Selenium-Grid
この章は未完成です。
ユーザー拡張スクリプト
Selenium を簡単に拡張するのに必要な情報を示します。

ドキュメントチーム

原著者

  • Dave Hunt
  • Paul Grandjean
  • Santiago Suarez Ordonez
  • Tarun Kumar

上に示したのは、このドキュメントの原著者のアルファベット順リストです。メンバーはそれぞれが担当する分野でリーダーシップを発揮し、ドキュメントの作成に大きく貢献しました。各章には、それぞれの章を最初に書き始めた原著者がいますが、最終的にはプロジェクト全体を通じて、すべてのメンバーがどの章の執筆にも協力しました。

現在の著者

  • Mary Ann May-Pumphrey
  • Peter Newhook

当初のドキュメントチームメンバーは現在も (2009 年 5 月時点) ドキュメントの作成に関与していますが、最近加わった Mary Ann と Peter も作業に大きく貢献しています。2 人はレビューや編集の面で貴重な貢献をしてくれました。Mary Ann は数々の新しいサブセクションの執筆に積極的に取り組んでいるほか、ドキュメント全体を通じてその優れた編集能力を遺憾なく発揮してくれています。Peter は、ドキュメントの中で最も扱いの難しかった章の構成の見直しに協力し、どんなトピックを取り上げればよいかについて、貴重なアドバイスをしてくれました。2 人の情熱と献身的な関与は大いに有益でした。今後も引き続きドキュメントの作成に協力してくれるものと期待しています。

謝辞

Patrick Lightbody には、特に大きな謝意を表したいと思います。SeleniumHQ Web サイトの管理者である Patrick のサポートは非常に貴重でした。Patrick は、私たちがこのドキュメントの読者である Selenium コミュニティについて理解するのを助けてくれました。また、このユーザーズガイドを開発、リリースするのに必要なあらゆるものを SeleniumHQ Web サイトに用意してくれました。Patrick の情熱的な姿勢と激励は、このプロジェクトを推進するうえで決定的な役割を果たしました。Patrick のほかに、ドキュメントのパブリッシュに関するソリューションについてアドバイスしてくれた Andras Hatvani、ドキュメントチームの議論に加わってドキュメントのレビューに協力してくれた Amit Kumar にも感謝の意を表します。

そしてもちろん、ドキュメントチームは Selenium の開発者たちにも感謝します 。彼らは本当にすばらしいツールを設計してくれました。当初の設計を行った開発者たちのビジョンがなければ、そして現在の開発者たちのたゆまぬ努力がなければ、このような非常に優れたツールをあなた、すなわち読者に届けることはできなかったでしょう。