*

Selenium入門その1[自動テストの概要]

公開日: : 最終更新日:2016/12/05 Selenium, SeleniumIDE , ,


スポンサードリンク



ソフトウェア業界って3Kですよね・・・

アジャイル開発手法が話題に上がるようになってもう10年以上になりますが、未だに開発の現場は幸せになっていないですよね・・・

その原因は色々あるとは思いますが、その解決方法の1つとして「テストの自動化」があると考えています。

「テストの自動化」といっても色々あります。

  • xUnitを利用したユニットテスト
  • Seleniumを利用したエンドツーエンドのテスト

が二大巨頭であると言えます。
まあツールに関してはRFT(Rational Functional Tester)やxUnit以外のユニットテストツールも存在しますが、多くの方が納得できると思います。

本ブログでは、xUnit系のツールであるJUnitのエントリーを扱ってきました。
「JUnitプラグインと関連プロダクトの利用方法」

その流れと言っては何ですが、Webアプリケーションのエンドツーエンドのテストのエントリーも扱って行こうと思います。
利用するツールは「Selenium」となります。

前置きが長くなりましたが、本エントリーの内容は以下の通りです。

  1. エンドツーエンドのテストの存在意義
  2. Seleniumの概要と関連プロダクト
  3. Seleniumを利用したテストの概要

 

となります。

なお、概要はもういいと言う方は
Seleniumの使い方
をご覧いただけばと思います。


1.エンドツーエンドのテストの存在意義

テストの自動化の有るべき姿

10年ぐらい前になるのですが、前述のようにアジャイル開発が脚光を浴びていました。
と言っても、アジャイルよりもリーン開発手法(トヨタ生産方式)がメジャーで、ソフトウェアカンバンが多くの現場で見られるようになっていました。最近あまり見かけないのは私だけでしょうか・・・

私の興味はXP(extreme programming)にしかなく。カンバンには全く興味なかったです。
その考え方に初めて触れた時の衝撃は今でも鮮明に覚えています。

「ユニットテストの自動化」これは「幸せ」になれると!!

しかし、実際にXPを実線してみると、XPもバラ色じゃないんですよね・・・
このエントリーを読んでいただいている方であれば、そんなの当たり前じゃん!!!、って言われるとは思うのですが、
プロジェクトって凄い人(この定義も人によって様々ですが・・・)ばかりで構成される訳ではなく、
かつ、初めての試みなのでそんなにうまく行く訳もなく・・・

「ユニットテストの自動化」は確かに実現したのですが、メンテが出来ないんですよね・・・
「大変です姉さん!!」みたいな・・・、せっかく実装した「ユニットテスト」が変更に弱かったのです・・・

頑張れば出来ない訳ではないのですが、その変更コストが思ったよりも高くなってしまい、最後には捨てる羽目になってしまいました。

このプロジェクトから以下の二点を痛感させられました。

  • 「ユニットテストの自動化」は変更に強いテストコードである必要がある。
  • 「ユニットテストの自動化」を行っても、IT(結合テスト)、ST(システムテスト)は必要である。

1点目はユニットテストの内容ですので、とりあえずスルーさせていただきます。
2点目も、当たり前だろ!!、とツッコミが入るとは思いますが、この点が楽にならないと幸せになれないんですよね・・・

以上のような流れから、
「ユニットテストの自動化」の長所と「エンドツーエンドのテストの自動化」をベストミックスした仕組みを取り入れることが良いとの結論に至りました。

「ユニットテストの自動化」で頑張りすぎないで、その分は「エンドツーエンドのテストの自動化」に注ぐとの意味です。
肝心なのは、お互いの得意な部分を組み合わせる事だと言えます。

Seleniumを利用したエンドツーエンドテストのメリット

Seleniumを利用したエンドツーエンドテストの特徴をメリットをメインに説明させていただきます。

エンドツーエンドテストの概要

まず、エンドツーエンドテストの定義を簡単に説明させていただきます。

一番目のエンドはWebブラウザで、二番目のエンドはDB(データベース)となります。
厳密言うと、二番目のエンドはDBだけではなくXML等の場合もあります。

シンプルにエンドツーエンドの動作を文字列にすると以下のようになります。

  • テスト対象のWebアプリケーションをWebブラウザを介して操作して、DBに値を書き込む。
  • WebアプリケーションがDBの値を読み取って、Webブラウザに表示する。

上記の2処理をテスト自動化ツールを利用して、自動実行可能なテストを作成することを「エンドツーエンドのテストの自動化」と表現ます。

エンドツーエンドテストの自動化のメリット

メリットは色々あると言えますが、以下の4点が一般的であると言えます。

  1. IT(結合テスト)、ST(システムテスト)を自動化できるので、ソフトウェアの保守費用の抑制に大きく貢献できる。
  2. 複数のブラウザに対応したテスト自動化ツールを利用することで、ブラウザのバリエーションテストのコストが削減できる。
  3. 自動実行なので気軽にテストを実行でき、モジュール修正の悪影響を早い段階で検出できる。
  4. テスト結果のエビデンスが手動テストと比べて明確にしやすい。

 

エンドツーエンドテストの自動化のデメリット

自動実行できると言っても、デメリットもあります。

  1. なんと言ってもイニシャルコストが大きい。
  2. テストが失敗した時の問題点の切り分けコストがかかる。
  3. テストのメンテ費用が必要である。

 

イニシャルコストは大きいですよね・・・、
単純に表現すると、テストケースの作成と言う意味では、手動テストの10から15倍はかかります。
当然ですが、単純に、あまり考えずにテストを作成してしまうとメンテ費用が大きくなってしまうので、変更に強いテストを作るための仕組みの構築も必要な作業となります。

あまり起こって欲しくないし、出来る限り可能性を低くする努力は必要ですが、テストが失敗することもあります。その時に問題点の切り分けが素早く行えるように留意しておく必要があります。

2.Seleniumの概要と関連プロダクト

Seleniumの概要

Seleniumの動作イメージ

Selenium形式のテストスクリプト作成し、そのスクリプトを指定してSeleniumを実行すると、SeleniumがWebブラウザを操作し、テスト対象のWebアプリケーションが動作するサーバに接続し、テストが実行されます。
スクリーンショット 2016-04-09 16.25.50

テストスクリプトの対応言語とフレームワーク

テストスクリプトは、利用したいプログラミング言語とフレームワークによって記載の仕方が異なります。
対応しているプログラミング言語は以下の通りです。

  • Java
  • Ruby
  • C#
  • Perl
  • PHP
  • Python

プログラミング言語だけではWebブラウザを操作できるだけです。自動テストを実現させるためには検証を行う必要があります。「xUnit」ではアサートですね。

利用可能なフレームワークの有名どころは以下の通りです。

名称 対応言語
JUnit Java
TestNG Java
RSpec Ruby
Capybara Ruby
NUnit C#
Bromine Java、PHP

Seleniumのプロダクト説明

一言で「Selenium」と言っても、様々な関連プロダクトが存在していますが、
Selenium2の「Selenium IDE」、「Selenium WebDriver」がコアなプロダクトとなります。

Selenium IDE

Firefoxプラグインのプラグインで、ブラウザ操作をSeleniumのスクリプトに変換できます。
また、Seleniumのスクリプトを再生することもできます。

Selenium WebDriver

ブラウザの拡張機能やOSネイティブの機能を使ってブラウザを操作するライブラリです。スクリプトに記述した通りにブラウザを操作できます。

3.Seleniumを利用したテストの概要

「Selenium IDE」、「Selenium WebDriver」利用方法を簡単なサンプルをしながら説明させていただきます。
実際に自動テストを実現する時には、「Selenium IDE」を利用してスクリプトの録画を行い、そのスクリプトをファイルに保存し、「Selenium WebDriver」を用いてバッチ実行するとの流れとなります。

「Selenium IDE」の説明に行く前に、「Selenium IDE」の問題点を述べさせて頂きます。
近年のWebアプリケーションは非同期処理を用いる事が一般的と言え、「Selenium IDE」でスクリプトを録画する事ができないことが結構あります。

ページの各要素にID属性が付与されており、非同期処理が終わる、終わらないに関わらず画面操作が行え場合は問題ないのですが・・・

Selenium IDEの利用方法

「Selenium IDE」

Selenium IDEのインストール方法

FireFoxを起動して
http://docs.seleniumhq.org/download/
にあるリンクからインストールできるはずなのですが、2016年4月9日現在うまくいきません。

https://addons.mozilla.org/en-US/firefox/addon/selenium-ide/
にアクセスして、以下の画像の赤枠部分をクリックし、インストールを行います。
スクリーンショット 2016-04-09 21.41.48

Selenium IDEを用いたスクリプトの録画方法

「Selenium IDE」の利用方法の詳細は別エントリーを作成いたしますが、まずは利用イメージ的なところを記載させていただきます。

「Selenium IDE」をインストールすると、以下の画像の赤枠部分のアイコンが表示されるようになります。
スクリーンショット 2016-04-09 21.55.09

このアイコンをクリックすると「Selenium IDE」が起動されます。
スクリーンショット 2016-04-09 21.57.40

右上にあるボタンで、録画の開始、停止を制御できます。
起動した時には既に録画状態なのでクリックする必要はありません。
スクリーンショット 2016-04-09 21.57.40

https://www.google.co.jp/
にアクセスして検索ワードにsmall java worldを入力し検索ボタンをクリックしてみます。

すると画面が以下のように変わりました。
スクリーンショット 2016-04-09 22.14.48

「Baes Url」の部分を拡大すると以下のように、https://www.google.co.jp/がセットされていることが分かります。
スクリーンショット 2016-04-09 22.18.37

同じくコマンドの一覧部分は以下のようになります。
スクリーンショット 2016-04-09 22.20.07

このスクリプトを保存してみます。
「Selenium IDE」のメニューの「ファイル」-「テストケースに名前を付けて保存」をクリックします。
スクリーンショット 2016-04-10 12.09.05

ファイル選択ダイアログが表示されますので、名前を付けて保存します。

作成されたファイルの中身は以下の通りです。

デフォルトのフォーマット(スクリプト)はHTMLとなります。
フォーマットはオプションで変更可能です。
スクリーンショット 2016-04-10 11.48.12

Selenium IDEを用いたスクリプトの実行方法

既に録画したスクリプトが入力された状態ですので、「現在のテストケースを実行」ボタンをクリックします。
スクリーンショット 2016-04-10 11.55.24

すると録画したスクリプトが実行されます。

以前に録画していたスクリプトを実行する場合は、「Selenium IDE」のメニューの「ファイル」-「テストケースを開く」をクリックし、スクリプトファイルを選択し、「現在のテストケースを実行」ボタンをクリックするだけです。

先ほど保存したスクリプトを少し修正し、そのファイルを開いて実行してみます。

・ファイルの修正する
21行目のsmall java worldを
Selenium入門その1[自動テストの概要]
に変更しファイルを上書き保存します。

・テストケースを開く
「Selenium IDE」のメニューの「ファイル」-「テストケースを開く」をクリックし、先ほどのスクリプトファイルを選択します。
スクリーンショット 2016-04-10 12.23.10

・テストケースを実行する
「現在のテストケースを実行」ボタンをクリックします。

テストケースが実行されて以下の様な画面が表示されました。
スクリーンショット 2016-04-10 12.27.02

正しい動きですが、残念な結果ですね・・・

Selenium WebDriverの利用方法

「Selenium WebDriver」の利用方法の概要も説明させていただきます。

何と言っても「Gradle」プラグインをインストールした「Eclipse」を利用するのが簡単です。

プロジェクトの作成

[新規]-[その他…]をクリックします。
スクリーンショット 2016-04-10 14.39.12

[Gradle]-[Gradleプロジェクト]をクリックします。
スクリーンショット 2016-04-10 14.40.45

「プロジェクト名」にSeleniumTest
「サンプル・プロジェクト」はJava Quickstartを選択し「完了」ボタンをクリックします。
スクリーンショット 2016-04-10 14.43.28

作成に少し時間がかかります。

build.gradleのdependenciesにseleniumを追加

compile ‘org.seleniumhq.selenium:selenium-java:2.53.0’を追加します。

dependenciesは以下のようになります。

追加後に依存関係のリフレッシュを行います。
スクリーンショット 2016-04-10 14.58.53

これで「Selenium WebDriver」が利用できるようになりました。

スクリプトの作成

seleniumhqにあるサンプルをそのまま利用します。
http://docs.seleniumhq.org/docs/03_webdriver.jsp#introducing-the-selenium-webdriver-api-by-example

スクリーンショット 2016-04-10 16.04.30

パッケージ:org.openqa.selenium.example
名前:Selenium2Example
を入力して「完了」ボタンをクリックします。
スクリーンショット 2016-04-10 16.03.03

Selenium2Exampleが開かれますので、
http://docs.seleniumhq.org/docs/03_webdriver.jsp#introducing-the-selenium-webdriver-api-by-example
のサンプルで上書きします。

スクリプトの実行

今回のサンプルはJavaのクラスですので、クラスを選択し[実行]-[Javaアプリケーション]をクリックします。
スクリーンショット 2016-04-10 16.10.18

Firefoxが開き、http://www.google.comにアクセスし、Cheeseを検索ワードに指定して検索が行われます。

「Selenium入門その1[自動テストの概要]」は以上です。


スポンサードリンク



関連記事

Selenium入門その6[Selenium3でWebDriver(Java/Junit4)の環境を作成しEdge,Chrome,Firefoxで確認してみる]

Selenium3も3.0.1がリリースされましたし、今後は本格的にSelenium3が利用されてい

記事を読む

Selenium利用時のトラブルシューティング方法[クリック編]

Seleniumは便利なテスト自動化ツールですし、今後は更なる利用者の増加が見込まれます。 とは言

記事を読む

Selenium入門その5[ページオブジェクトパターン(Page Object Design Pattern)を利用して変更に強いテストを作成する方法]

Selenium入門その2 では「UIマップファイル」と言う仕組みが存在していることに言及させてい

記事を読む

Selenium入門その2[Selenium IDEの使い方]

「Selenium入門その1」 に引き続き、今回はSeleniumIDEの使い方を説明させていただ

記事を読む

Selenium入門その3[Selenium WebDriver(Java/Junit4)の使い方]

WebDriverでは、予め中継サーバを起動しなくても、テスト実行時にブラウザ拡張機能や、OSのネイ

記事を読む

Selenium入門その4[Selenium WebDriver(Java/Junit4)の基本コマンド]

前回はEclipse環境でSelenium WebDriverでJava/Junit4を利用したテス

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Spring5入門[STS(Spring Tool Suite)で簡単なWebアプリの典型的なユニットテストの実現方法]

前回は「Spring入門」で、Spring MVCを利用した簡単なWe

Spring5入門[STS(Spring Tool Suite)の環境作成と簡単なWebアプリの作成]

Struts1ももう過去の遺物になり、SAStrutsもEOLとなりも

Selenium入門その6[Selenium3でWebDriver(Java/Junit4)の環境を作成しEdge,Chrome,Firefoxで確認してみる]

Selenium3も3.0.1がリリースされましたし、今後は本格的にS

Selenium利用時のトラブルシューティング方法[クリック編]

Seleniumは便利なテスト自動化ツールですし、今後は更なる利用者の

Java8のラムダ式とStream APIを利用してコーディング量の削減サンプル集

Java8になりラムダ式と「Stream API」が利用できるようにな

→もっと見る

Optimization WordPress Plugins & Solutions by W3 EDGE
PAGE TOP ↑