スポンサーリンク

"Excelenium"(エクセレニウム)で,快適な自動回帰テストを  (Seleniumのテストスクリプトとテスト仕様書を自動生成)

テスト仕様を書くだけで,仕様書自身がテストを自動でやってくれる。


それがExcelenium(エクセレニウム)。

 
   Excelenium = Excel + Selenium
 

  • 左側で,操作のステップを日本語で書くと,
  • 右側で,テスト仕様書風のフォーマットの文章をリアルタイムで自動生成してくれる。
    • ※画像中で「確認」と書いてあるのは,チェックポイントの部分。これは自動的にオレンジ色のセルになる。

書く必要があるのは,青い線より左側だけ。


そして, 「この仕様書の全テストを実行」 というボタンを押すと・・・


  • Seleniumのテストケースが自動生成され,
  • ブラウザが立ち上がり,
  • テスト仕様書に書いてあった全テストが実行される


(※ついでに,シート上の全テストケースに自動で番号が振られる。)



Webアプリケーションの結合テスト / 回帰テストが大幅に楽になる。

  • 従来のような「テスト仕様書」と称して,だらだらと長い文章を手入力させられ,それを見ながら手と目視で頑張って毎回一つ一つ操作・確認していく,という必要はなくなる。
  • また,テストスクリプトだけでドキュメントがないという状態も防げる。文章の形で出力することによって可読性を向上できるので,テストの質を吟味しやすくなる。
    Exceleniumでは,テストスクリプトを表示せずに,日本語の文章の部分だけを独立して印刷することが可能なようにページ分けしてある。

注:

  • 技術者は得てして,テストスクリプトさえあればテスト実行の証拠かつ品質の担保になる,と考える。しかし「一般の人々」はそれでは納得しない。テストの証拠が日本語で書かれていないと,何をテストしたのかわかってもらえないし,テストを実施した事さえ信じてもらえない。
  • なので,テストスクリプトから日本語のドキュメントを自動生成すればよい。「開発の足をひっぱるだけのドキュメントなのに,決まり上提出が求められている」という物に,無駄また無意味な労力を割かれなくて済むようになる。

Exceleniumはこちらからダウンロードできます。

Excelenium (テスト対象として,Ruby on Rails のサンプルアプリつき)

http://www.name-of-this-site.org/codi...


以下は,使い方。



使ってみよう


冒頭のリンクから excelenium.lzh をダウンロードし,解凍。

同梱物は

  • テスト仕様書となるExcelシート(test_01_keisan.xlsという名前)
  • サンプルRailsアプリケーション(controller + view)

の2点。


テスト対象は何でもよいのだが,ここでは同梱されているRailsアプリをテストしてみる。(※DBは不要)

以下では,ローカルPCに Ruby on Rails の動作環境がある事を前提にする。
(※あくまでテスト対象のアプリとしてRailsを使うだけであり,Excelenium自体の動作にはRubyは不要。)

seleniumの準備

まず,selenium core をダウンロードして解凍。

Selenium-Core: Download

http://selenium-core.openqa.org/downl...

Railsのpublicフォルダ内に置いて,フォルダ名をseleniumにリネーム。

テスト対象アプリの準備

上記で入手したサンプルアプリ内の

  • controllers\hoges_controller.rb
  • views\index.rhtml
  • views\get_month.rhtml

を,ローカルのRailsのappフォルダ内の適切な位置に設置。

ruby script\server

でWebrickサーバを起動。

が,それぞれアクセス可能であることを確認する。

シート上で環境設定

上記で入手したテスト仕様書用のExcelシートを,好きな場所に置く。

「初期設定」シートを開く。





以下の項目を記入する。

  • テスト対象システム名と,その識別子。
    • 1つのシステムの結合テスト仕様書を複数のファイルに分割する場合,どのファイルでもこの欄には同じものを書くことになる。
  • このブックのテスト対象機能名と,その識別子。
    • このブックに固有のテスト対象範囲。このブックが生成するテストスクリプトのファイル名には,この識別子が含まれることになる。
  • selenium設置パス。
    • Railsの場合は,前項で設置したpublicフォルダ内のseleniumフォルダ。この中にテストスクリプトが生成される。
  • seleniumのルートURL
  • シートの終わりとみなすために必要な空行の数
    • シート内でこの数だけ空行が続くと,それより下の行は読み取られない。
  • ブラウザ呼び出しコマンド
    • ここを書き換えれば,いろんなブラウザでテストできる。
画面項目マスタを書く

「項目マスタ」というシートを開く。

ここに,テスト時に使う(seleniumから操作する)画面上の項目の情報を書く。

  • 項目名称の列:項目の日本語名(わかりやすい論理名)。
    • テストケース用のシートにテスト仕様を書く際には,この日本語名称を使える。
  • 項目内容の列:項目を一意に特定する物理名。
    • テスト仕様からテストスクリプトを生成する際,論理名がこの物理名に変換される。


項目としては,

  • URLにページ名を付ける
  • DOM要素にユーザフレンドリーな要素名をつける

などが可能。物理名にはxpathも使える。

コマンド一覧を見ておく

「コマンド一覧」シートを見ておこう。

  • 操作略称:行ないたい操作の略称。
    • テスト仕様はこれを使って記述する。この列だけ覚えておけば(or 書いてる最中に参照できるようにしておけば)よい。
  • 説明表示のテンプレート:テスト仕様書風の文章のテンプレート。
    • シート左側で操作略称を使って書いたものは,シート右側でこの文章に自動的に変換される。
  • コマンド:seleniumが利用するコマンド。
    • テストスクリプトでは操作略称がこれに変換される。
用意されているテストを実行してみよう


ここで,試しにサンプルRailsアプリをテストしてみよう。

「01_足し算(正常系)」のシートを開き,「この仕様書の全テストを実行」ボタンを押下する。


初期設定シートの内容が正しければ,ブラウザが起動し,seleniumのTesuRunnerの画面が現れる。


画面右側の緑色の三角のボタンを押すと,テストが実行される。

スピードは画面右上のスライダで調節できる。


※seleniumの基本的な使い方の入門は,下記の記事を参照。

今から3分で selenium の使い方を身に付ける (回帰テスト自動化)

http://language-and-engineering.hatenablog.jp/entry/20081016/1224080409

自分でテストを書いてみよう

「コマンド一覧」のシートは,印刷して手元に持っておくとよい。

それを見ながらなら,自分でテストが書きやすいだろう。


新規テストを書くには下記のようにする。

  • 「テストケース原紙」をコピー。
  • シート名として,テスト対象の機能の小区分名を書く。このシート名が自動的にシート左上「テスト対象機能:小区分」のセルに反映される。
  • テストのステップを書いていく。
    • テストケース概要の列に,ステップのまとまりの説明を書く。
      • 「〜の場合」など。
    • 操作略称の列に,コマンド一覧の操作略称を書く。対応する引数も書く。
      • 似たケースはコピペで済ませると楽。
    • スキップの列に何か書くと,その行はテスト実行されない。


例題:

  • 「02_経過月数の計算」のシートで,7〜12月のテストケースも書いて,実行してみましょう。
  • テストでNGが出たら,http://language-and-engineering.hatenablog.jp/entry/20090314/p1 を参考に,アプリを修正してみましょう。
  • 修正後のアプリで,テスト結果がオールグリーンになる事を確認しましょう。

では,楽しいテストと,楽しい開発を。




補足記事:

Selenium 中級者になろう (変数+XPath+JavaScriptを,テストケース中で利用する方法)
http://language-and-engineering.hatenablog.jp/entry/20090818/p1


IE AutoTester で,UIの回帰テストを完全自動化
http://language-and-engineering.hatenablog.jp/entry/20090922/p1


「実行可能ドキュメント」が満たすべき性質 − テスト自動化ツール「Excelenium」で使われている技術や手法
http://language-and-engineering.hatenablog.jp/entry/20101112/p1