ブログ

ryuzeeによるブログ記事。不定期更新

直近開催のScrum Alliance認定スクラムマスター研修のご案内

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化したものが以下だ。 テーブルの構造とキーワードが所定のものになっていればよく、自由度が高い。例えば設計資料や仕様等も記載して、設計書自身を動作するテストのようにすることもできるだろう。

アジャイル開発チーム向けのコーチングや、技術顧問、Scrum Alliance認定スクラムマスター研修などのトレーニングを提供しています。お気軽にご相談ください(初回相談無料)
前の記事 チームへの期待を明らかにする
次の記事 ストーリーポイントの見積りは何故時間の見積りより良いのか

プロダクト開発で、こんな課題を感じていませんか?

  • 何を作るべきか、順位の決め方が定まらない
  • プロダクトの方向性をチームで共有できていない
  • 開発組織の体制や役割がうまく機能していない
  • 開発プロセスが形骸化し、目的を見失っている
  • アジャイルを導入したが、組織に定着しない

プロダクトマネジメント、組織構造、開発プロセスの課題について、組織全体の視点から支援します。

お問い合わせ(初回相談無料)

契約を前提にした相談でなくて構いません。相談に際して事前の整理や準備は不要です。

Aligned ―プロダクト開発におけるステークホルダーとの関係性の築き方
ダイナミックリチーミング 第2版
Tidy First?
脳に収まるコードの書き方
プロダクトマネージャーのしごと 第2版
エンジニアリングマネージャーのしごと
チームトポロジー
スクラム実践者が知るべき97のこと
プロダクトマネジメント
SCRUM BOOT CAMP THE BOOK
みんなでアジャイル
レガシーコードからの脱却
Effective DevOps
変革の軌跡
ジョイ・インク
アジャイルコーチの道具箱
カンバン仕事術
Software in 30 Days
How to Change the World