IE AutoTester で,UIの回帰テストを完全自動化
テスト仕様を書けば,仕様書自身がテスト(ブラウザ操作)を自動でやってくれる。
Excelのシート上に,下記のように記述する。
IE起動 開く http://www.yahoo.co.jp/ 存在判定 srchtxt 存在判定 srchbtn 入力 srchtxt hogeraccho クリックして待機 srchbtn
が,それだけではない。
- テスト仕様書に,試験の結果も自動で記録してくれる。
- Seleniumで可能な通常のDOM操作に加えて,
- マウスのドラッグドロップや,
- ファイルのアップロード・ダウンロードといった,込み入ったUIのテストも自動化できる。
- クロスドメインでテストできる。(テスト対象のサーバ上に,テスト用のファイル不要)
「Excelでテスト仕様書を書く」というのはExceleniumと同じやり方だが,上記のようにSeleniumで不可能だった点を補っている。
それが,今回紹介する IE AutoTester というツール。
動作キャプチャ:
- Excelのシートの左側で,操作のステップを書く。
- すると右側で,テスト仕様書としての文章がリアルタイムで生成される。Exceleniumと同じ。
ここで「全シートを実行」のボタンを押すと,シートに書いてある通り,ブラウザが自動的に動く。
- マウスのドラッグドロップを自動でテストしている風景。
- テストしながら,「実行ログ」の欄に結果が書き込まれてゆく。
- OKのセルは緑に,NGは赤になる。
- NG数はシート上部で集計される。
テストだけでなく,ブラウザの気軽な自動操作にも利用できるだろう。
IE AutoTester ダウンロード
以下は,サンプルと使い方。
上の圧縮ファイルを解凍すると,「IEAutoTester.xls」というエクセルファイルがある。
これを開く際,Excelの設定が必要なので済ませておく。
(Excel2003の場合)
ツール>マクロ>セキュリティ>信頼できる発行元>Visual Basic プロジェクトへのアクセスを信頼する をオン
(Excel2007の場合)
リボンの「開発」タブ>マクロのセキュリティ>VBAプロジェクトオブジェクトモデルへのアクセスを信頼する
http://support.microsoft.com/kb/28283...
※「プログラミングによるVisual Basicプロジェクトへのアクセスは信頼性に欠けます」というエラーメッセージが出ないようになる。
(1)導入
導入に必要な手順は,3つだけ。
1番目に,
下記サイトから「UWSC」というWindowsスクリプトエンジンをダウンロード。(フリー版)
http://www.uwsc.info/download.html
適当なフォルダに解凍。
2番目に,
先ほどダウンロードしたIEAutoTester.xlsと同じフォルダに同梱されている「IEManipulation.uws」を,uwsc.exeと同じフォルダに設置。
3番目に,
上で入手したエクセルの1ページ目,「初期設定」シートに
- UWSC.exe設置パス
- スクリプト設置パス
として,uwsc.exeの存在するパスを記入。
これだけ。
(2)動作
動かしてみよう。
テストケースのシート上で「全シート実行(ログなし)」というボタンを押下。
IEが動き出す。
- Yahooで検索
- マウスで並び替え
の2サンプルが実行される。
ログなしなので,結果は記録されない。
(3)ログを記録させよう
今度は,「全シート実行(ログあり)」というボタンを押下。
ブラウザの動作が終わると,「ログを閲覧しますか?」と聞かれる。
「はい」を押すと,テスト仕様書が開く。
右の方を見ると,「OK」と書いてあるはずだ。
簡単な使い方の説明はここまで。
もし,動作にバリエーションがほしかったら・・・
- 「コマンド一覧」シートの内容を増やす。
- 「Uコード」コマンドで,UWSCコードを埋め込む。
- 「JSコード」コマンドで,JavaScriptコマンドを埋め込む。
など,拡張のしようがある。
以下は動作原理。
裏側でやっていること
実行可能なコマンドについては,「コマンド一覧」のシートを見ればわかる。
それらのコマンドの実装は,IEManipulation.uwsの中身を見ればわかる。
ブラウザの自動テスト中に,テスト結果をExcelに記録させる(UWSCでIEを自動操作するライブラリ 1.3)
http://language-and-engineering.hatenablog.jp/entry/20090918/p1
サンプルと同じく,Excel上で下記のようなコマンドを記述したとする。
IE起動 開く http://www.yahoo.co.jp/ 存在判定 srchtxt 存在判定 srchbtn 入力 srchtxt hogeraccho クリックして待機 srchbtn
「実行(ログなし)」のボタンを押すと,マクロで下記のようなuwsスクリプトが生成され・・・
// システム名:テスト記述のサンプル // 機能大区分:基本機能 // ※このファイルを直接編集しないでください。 call .\IEManipulation.uws // ---------- シート番号:1,機能小区分:01_サーチエンジン操作 ---------- // 検索 _ie = IE.new(); IE.show( _ie ) IE.jump( _ie, "http://www.yahoo.co.jp/") IE.assert_element_present( _ie, "srchtxt" ) IE.assert_element_present( _ie, "srchbtn" ) IE.type( _ie, "srchtxt", "hogeraccho" ) IE.click_and_wait( _ie, "srchbtn" ) // 終了処理 IE.save_and_close_logfile() IE.end_manipulation()
そして,このスクリプトがuwsc.exeに渡される。
Excelをいじっている人からは,ひとりでにIEが動き出すように見える。
「実行(ログあり)」のボタンを押した場合はどうか。
下記のようなuwsスクリプトが生成される。
// システム名:テスト記述のサンプル // 機能大区分:基本機能 // ※このファイルを直接編集しないでください。 call .\IEManipulation.uws IE.use_log(True) Sleep(3) IE.open_xls_as_logfile("D:\temp\excel_ie\IEAutoTester\IEAutoTester.xls") // ---------- シート番号:1,機能小区分:01_サーチエンジン操作 ---------- // 検索 IE.set_pgcount( "01_サーチエンジン操作", 11, 11 ) _ie = IE.new(); IE.show( _ie ) IE.set_pgcount( "01_サーチエンジン操作", 12, 11 ) IE.jump( _ie, "http://www.yahoo.co.jp/") IE.set_pgcount( "01_サーチエンジン操作", 14, 11 ) IE.assert_element_present( _ie, "srchtxt" ) IE.set_pgcount( "01_サーチエンジン操作", 15, 11 ) IE.assert_element_present( _ie, "srchbtn" ) IE.set_pgcount( "01_サーチエンジン操作", 17, 11 ) IE.type( _ie, "srchtxt", "hogeraccho" ) IE.set_pgcount( "01_サーチエンジン操作", 18, 11 ) IE.click_and_wait( _ie, "srchbtn" ) // 終了処理 IE.save_and_close_logfile() IE.end_manipulation()
ログなしの場合と比べて,IE.set_pgcountコマンドの分だけ,行数が増える。
このコマンドは,ログの記録位置を指定している。たとえば
IE.set_pgcount( "01_サーチエンジン操作", 14, 11 )
は,次の検証コマンドのログ記録位置を,テスト仕様書の「01_サーチエンジン操作」というシートの14行11列目に指定している。
だから,続く行にある
IE.assert_element_present( _ie, "srchtxt" )
の結果は,その位置に記録される。
※pgcountというのは「プログラムカウンタ」のつもり。
なお,VBAマクロは IEAutoTesterCore.basに記述されており, 複数のブックから共有できる。
下記の手法を使っている。
Excel VBAのマクロを,複数のブックから利用する方法 (標準モジュールをブックの外部で管理して,共通ライブラリとして読み込み)
http://language-and-engineering.hatenablog.jp/entry/20090731/p1
比較
Selenium / Excelenium と,このIE AutoTester を比較する。
Selenium/Excelenium | IE AutoTester | |
---|---|---|
Excelに操作手順を書くだけ | ○ | ○ |
テストにJavaScriptを埋め込み可能 | ○ | ○ |
クロスドメイン | × | ○ |
テスト結果を直接記録 | × | ○ |
ローカル環境(ファイル等)の操作 | × | ○ |
要素のドラッグドロップ | × | ○ |
ファイルのアップロード | × | ○ |
ファイルのダウンロード | × | ○ |
クロスブラウザ | ○ | ×(名前の通り,IEのみ) |
テストメソッドの充実度 | ○ | △(増やせる) |
XPath標準サポート | ○ | × |
本ツールは,Exceleniumの欠点を補う目的で作成された。
- 基本はExceleniumで
- 複雑なUIの部分はIE AutoTesterで
それぞれ,回帰テストを組むといいだろう。
また興味深い点として,Exceleniumと本ツールの間で,「Excel仕様書からのスクリプト生成」が一般化された。
両ツールにおいて,異なっているのは
- コマンドのセット(「コマンド一覧」シートの内容)
- 生成物を渡して解釈させる行先
だけ。
この形式を流用すれば,開発プロジェクト内のさまざまな手順を自動化できることだろう。
補足:ファイルアップロードのテスト
サンプルの3シート目には,「ファイルアップロード」という内容が載っており,コメントアウトされている。
このシートを動かすためのサンプルアプリケーションを掲載する。
Ruby on Railsで,ファイルをアップロードする簡単なコード:
hoges_controller
require 'kconv' class HogesController < ApplicationController # アップロード画面 def uptest end # アップロード実行アクション # http://rails.takeda-soft.jp/blog/show/51 def uptest_exec # 送信されてきたファイル file_obj = params[ "my_file" ] # 保存パスを決定 @file_name = file_obj.original_filename save_path = Dir::pwd + "/public/" + get_platform_filename( @file_name ) # 現時点でのカレントディレクトリは,/appの上の階層 #raise Dir::pwd # 保存 file_content = file_obj.read File.open( save_path, "wb"){ |f| f.write( file_content ) } end private # OSに適したファイル名に変換します。 # http://ruby-gnome2.sourceforge.jp/ja/hiki.cgi?libglade2-tut-create-src def get_platform_filename( filename ) if RUBY_PLATFORM.include?( "mswin32" ) # Windowsの場合,ファイル名の文字コードはSJIS return Kconv.tosjis( filename ) else # その他はUTF8 return Kconv.toutf8( filename ) end end end
uptest.rhtml (アップロードするためのフォーム)
<select id="hoge1"> <option>a</option> <option>b</option> </select> <br> <select id="hoge2"> <option value="1">a</option> <option value="2">b</option> </select> <br> <!-- アップロードに関係のある部分 --> <%= form_tag( { :action => "uptest_exec" }, :multipart => true ) %> アップロードしたいファイル: <%= file_field_tag( "my_file" ) %> <%= submit_tag( "送信", { :id => "commit_button" } ) %> <%= end_form_tag %>
uptest_exec.rhtml
<%= link_to "ダウンロード", "/" + @file_name %>
アップしたファイルをRailsのpublicフォルダに直接置いているという,何とも危険な構成だが,まあテスト実行用なのでOKとする。
ファイルアップロード部分のテストを動作させるためには,デスクトップに「a.txt」というファイルを作成しておくこと。
関連する記事:
UWSCのマクロで,IEを起動して自動操作するサンプルコード
http://language-and-engineering.hatenablog.jp/entry/20140204/controlIeBrowser...
JScript / VBScript (WSH)で,IEを自動操作しよう
http://language-and-engineering.hatenablog.jp/entry/20090713/p1
「実行可能ドキュメント」が満たすべき性質 − テスト自動化ツール「Excelenium」で使われている技術や手法
http://language-and-engineering.hatenablog.jp/entry/20101112/p1