Robot Framework + Selenium2Libraryで簡単受け入れテスト
Robot Frameworkは受け入れテストや受け入れテスト駆動開発(ATDD)に使えるテスティングフレームワーク。 http://code.google.com/p/robotframework/で開発が進められている。 プレインテキストやHTML形式でテストケースを記述できること、pythonまたはjavaによってテストライブラリを作って拡張できることが特徴だ。
ここではRobot FrameworkとSelenium2(WebDriver)を組み合わせて、受け入れテストを自動化する方法について説明する。 WebDriverを単独で使ってWebアプリケーションのエンドツーエンドテストを作る場合、どうしても画面ができてからしかテストケースが作れないというのが大きな問題だ。そのため例えばPHPであればBeHatと組み合わせしたりするのだが、今回の方法は更に簡単だ。
例えば、アジャイルな開発の場合であれば、スプリントプランニングが終了して実装するストーリーが決まった時点でまずテキストやHTML等で受入れ試験のシナリオを先に作成する。あとはスプリント期間中にそのテストシナリオを通るように機能を実装していけばよいことになる。このように進めれば製品が成長し続けても常に自動化された受け入れテストによってガードされており回帰テストを人手でやり続けて時間を使い切ってしまうこともなくなる。
インストール
ここではRobotFrameworkとSelenium2Libraryを利用する。
インストールは以下のように行う。またRobot Frameworkが導入されていない場合でもSelenium2Libraryと依存関係があるので自動でインストールされ、同様にWebDriverもインストールされる。なお、実行にはpythonが必要である。
git clone https://github.com/rtomac/robotframework-selenium2library.git
cd robotframework-selenium2library
sudo python setup.py install
デモを動かしてみる
上記で入手したSelenium2Libraryにはデモアプリケーションが含まれている。
python demo/rundemo.py demo/login_tests/
これを動かすとブラウザが自動で起動してテストが実行される。テスト結果は 以下のように出力される。
コンソール
またHTML形式やXML形式でもテスト結果が出力される。XML形式であればJenkins等との連携も可能だ。
テストケースの作り方
ではGoogleを検索してごにょごにょするテストケースを作ってみよう。まずテストケースを保存する適当なディレクトリを用意する。
テストケース
Google検索テスト.txt という名前で以下のファイルを作る。 なおRobot Frameworkでは日本語のファイル名やテストの記述に日本語が普通に使える。 Settingsのブロックでは、Resourceという記述を使って、共通で使う定数を定義したり、テストの際に使われるキーワードに対する実際のアクション(以下でいうと、Googleのページを開く、とか、検索ボタンをクリックする、という処理の 中身を記述)を読み込む。
*** Settings ***
Documentation Googleを検索してごにょごにょするサンプルです_
Resource 環境設定.txt
Resource Google検索操作の実装.txt
*** Test Cases ***
Googleのサイトを開いてSeleniumを検索する
Googleのページを開く
検索用語を入力する selenium
検索ボタンをクリックする
検索でヒットしたSeleniumのサイトを開く
検索結果のSeleniumのリンクをクリックする
Seleniumのサイトが開くはず
[Teardown] Close Browser
上記でインデントされずに書かれている内容が、いわゆるテストのタイトルや説明であり、インデントされて複数記述されているのが、実際のテスト手順になる。上述の通り、実際のテスト手順について定義をしなければならない。 ここでは「Google検索動作の実装.txt」という名前で同じディレクトリに用意した。
*** Settings ***
Documentation テストの実装をしてるよ
*** Variables ***
${google_url} http://www.google.co.jp/
*** Keywords ***
Googleのページを開く
Open Browser ${google_url} ${browser}
Maximize Browser Window
Set Selenium Speed ${sel_speed}
Title Should Be Google
検索用語を入力する [Arguments] ${search}
Input Text q ${search}
検索ボタンをクリックする
Click Button btnG
検索結果のSeleniumのリンクをクリックする
Click Link http://seleniumhq.org/
Seleniumのサイトが開くはず
Title Should Be Selenium - Web Browser Automation
ここでは、テストケース内で使われている操作に対応する実際の操作を記述する。登場するInputやClick等はSelenium2Libraryで用意されているキーワードだ。キーワードの一覧はこちらを参照のこと。
さらに、WebDriverで利用するブラウザ等の共通定義を行うファイルを用意する。ここでは環境設定.txtという名前で用意した。
*** Settings ***
Documentation 共通設定の定義とSelenium2Libraryの読み込み
Library Selenium2Library
*** Variables ***
${browser} firefox
${sel_speed} 1
ここまでできれば準備完了だ。
作ったテストケースを実行する
実行するテストケースを指定する場合は以下のようにする
pybot Google検索テスト.txt
もちろんディレクトリ内にある全てのテストケースを実行することも可能だ。
pybot tests/
HTMLによるテストケースの作成
上記の例ではプレインテキスト形式でテストを記述したが、HTML形式でもテストを書くことができる。HTMLのテストケースの中でResource指定して、プレインテキストで書いたものを再利用することも可能だ。 上記の検索のテストをHTML化したものが以下だ。 テーブルの構造とキーワードが所定のものになっていればよく、自由度が高い。例えば設計資料や仕様等も記載して、設計書自身を動作するテストのようにすることもできるだろう。