情シスは何度でも甦るさ。

VBA!VBA!

Oracle Functional TestingをSeleniumで置き換える

第一回OpenScriptとは
第二回OpenScriptでスクリプト作成
第三回OpenScriptをJenkinsから呼ぶ
第四回Oracle Functional Testing OpenScriptで定常作業を自動化する

Oracle Functional Testingのライセンス費用は、1ユーザー:869,600円 年間サポート191,312円
高い

さすがOracle印(余談だがHPの似たようなツールであるHP Unified Functional Testingはもっと高かったりする)

転職してライセンスがない会社にいる俺からすれば、テストのためだけに、こんな高いツール買えるわけねぇ。

そこで、オープンソースに浮気したくなるわけです。
そこで、登場Selenium
第一回目でも、二つの製品を機能比較してますが、SeleniumOracle Functional Testingでの最も大きな違いは、Databank(データバンク)

Webの入力項目とcsvの項目をバインディングするこの機能により、大量データの登録自動化などテストツールの範囲を超えて活躍できる。

しかし、Seleniumも機能拡張して、いまやプログラムから呼び出す事ができる。
ここではSeleniumでDatabank機能を実現してみる。

手順

  1. シナリオ
  2. Rubyのインストール
  3. selenium-webdriverのダウンロード
  4. csvの準備
  5. Rubyのプログラミング書く

1.シナリオ

実際あり得ないけど、cookpadで、検索を繰り返す。
cookpadでは、食材と用途という二種類の入力項目からレシピ検索ができるのですが、卵料理が好きなオレは、朝、昼、晩に食べる卵料理を連続して検索してみる。


2.Rubyのインストール

言語はRubyを使う。別にJavaでもいいし、その他の言語(phpC#PythonPerlJavascript)にも対応してるので公式サイト参照のこと。
Rubyのインストールは、るびまの記事を参照のこと


3.selenium-webdriverのダウンロード

driverをダウンロードする。Chromeがインストールされてたら不要なのかと思ったが、その場合以下のエラーが出た(Macで動かしてます)

/Users/user/dev/selenium-test/vendor/bundle/ruby/2.1.0/gems/selenium-webdriver-2.42.0/lib/selenium/webdriver/chrome/service.rb:20:in 
`executable_path': Unable to find the chromedriver executable. Please download the server from 
http://chromedriver.storage.googleapis.com/index.html and place it somewhere on your PATH. 
More info at http://code.google.com/p/selenium/wiki/ChromeDriver. (Selenium::WebDriver::Error::WebDriverError)

なので、エラーメッセージにある通り、http://chromedriver.storage.googleapis.com/index.html から自分のOS用のzipファイルをダウンロードし、解凍後、任意のディレクトリに移動して、そのディレクトリにPATHを通しておく。


4.csvの準備をする

食材と用途のそれぞれのテキストボックスに任意のワードを入れたいので、以下のようなcsvを作る。
これを、この後作るrubyのプログラムと同じディレクトリに置く。
#databank.csv

卵,朝
卵,昼
卵,夜

5.Rubyのプログラミング書く

と、その前にgemをインストールする(gemとは、Rubyの外部ライブラリのパッケージマネージャ)

$ gem install selenium-webdriver

rubyプログラムを書く
書式は、http://qiita.com/tomerun/items/9cb81d7a98150ff22f53 参考
#selenium.rb

# coding: utf-8
require 'selenium-webdriver'
require 'csv'

databank_path = File.expand_path('../databank.csv',__FILE__)
driver = Selenium::WebDriver.for :chrome #chrome のdriverを設定

#csv read
CSV.foreach(databank_path) do |row|  
  driver.navigate.to "http://cookpad.com/" #URL移動
  keyword = driver.find_element(:id, 'keyword') #id属性がkeywordのテキストボックス
  keyword.send_keys(row[0]) #csvのデータをセット
  purpose = driver.find_element(:id, 'search_purpose')
  purpose.send_keys(row[1])
  purpose.submit  #form submit
end

driver.quit  #ブラウザ終了


動かす

$ ruby selenium.rb

以外と簡単にDatabankの機能が実現できました。
ruby的には、Rspecなどのテスティングフレームワークから呼べるようにしておけば、オッケーですかね。

ただ、Oracle Functional Testingでは、csvのどの列をどの項目にマッピングするかは、かなり柔軟に設定できるので、そこは分があるが、コストを考えるとこれで十分かな。