ラベル テスト の投稿を表示しています。 すべての投稿を表示
ラベル テスト の投稿を表示しています。 すべての投稿を表示

2011年10月13日木曜日

Seleniumを使ってみた その3


前回前々回と引き続きSelenium 2.0の話。
Webアプリのテストに便利そうだけど、全部自分でスクリプト書くのはちょっと面倒だなぁ、なんて思っていたら、ちゃんとツールがあった。
Selenium IDE

Firefoxのアドインで、実際にブラウザ操作しながら記録できる。
しかも、その記録はJava, PHP, Perl, Rubyなど多種の言語にエクスポート可能!!
もちろんエクスポートしたコードはSeleniumが動いているサーバに置けば実行可能。
これはスゴイ!

自分でソース見ながら「このテキストボックスのIDがこれで、パスワードのIDがこれ…」とか地味な作業が一気になくなる。
なんて便利なんだ!!

とりあえずPerlでやってみる。
cpanでいろいろインストールが必要だったが、特に問題なく終了。
ただUTF8が前提なので、is_test_present_okなどで日本語の文字列の存在確認をしようとするとそのままだと失敗する。
use utf8;
を最初にくっつければ動くようになった!

2011年10月12日水曜日

Seleniumを使ってみた その2


前回は導入しただけなので、引き続き、Seleniumを使ってみる。

まずはWebDriverのドライバ(ややこしいな)を選ぶ。
大雑把に言ってしまうとWebDriverは、ブラウザの名前。
Firefox, IE, Chrome, Opera, iPhone, Android, それにHtmlUnitというのがある。
(2011年10月12日現在では、Opera, iPhone, Androidは使用不可)
例えば、Firefoxのドライバは、Firefoxをブラウザとして使用してテストする。
IE, Chromeもその名のとおり。
HtmlUnitというのはサーバから返されるHTML文書を解析して動くらしい。
テキストだけなのでやりやすいけど、実際の画面は見えないし、「本当にIEで動かしたらどう見えるか?」は分からないのが欠点。
でも、Rubyではサポートされてない…。

使い方は
driver = Selenium::WebDriver.for :<ドライバ名>
とすればロードされる。

テストしたいページを開くには
driver.get
となる。

さて、例えばログイン画面が出てきて、ちゃんとログインできるかテストするにはどうするか?
そんな難しい話ではなく、HTMLエレメントの名前やらIDを使って指定すればいい。

まずはエレメントを探す。
id = driver.find_element :name => "username"

そのエレメントに値を入力するには
id.send_keys <ユーザ名>

パスワードも同様に
pass = driver.find_element :name => "password"
pass.send_keys <パスワード>

でフォームの内容を送信。
pass.submit

divのcontentクラス内のh3を取得(10秒だけ待つような設定)
wait = Selenium::WebDriver::Wait.new(:timeout => 10 ) #10 秒
begin
  result = wait.until { driver.find_element(:xpath => "//div[@class='content']/h3") }
ensure
  driver.quit
end

これでassertとかすればよさそう。

Selenium 2.0は便利だけど、ドキュメントがまだまだ整備されていないのが残念。
これからどんどん増えることを希望。

さらに続きます。

Seleniumを使ってみた その1


最近リリースされたSelenium 2.0を使ってみた。
http://seleniumhq.org/
公式には前バージョンからいろいろ変わった点があるが、そもそも前バージョンを使ったことがないので、この辺は読み飛ばし。

テストプロジェクトの設定で、2011年10月12日現在ではJava, C#, Python, Rubyしかサポートされていないらしい。
この中じゃJavaが一番分かるかなぁ、と思いきやMavenを入れる必要があるっぽい。
いや、なくても出来るんだろうが大変らしい。
業務でJava使わないからそこで時間取られるのもなぁ。
う~ん、サンプルコードしか打ったことないけどRubyにするか(無謀?!)。

まずはインストール。
公式からSelenium Serverをダウンロードしたけど、要らなかったかも…。
http://seleniumhq.org/download/

単に
# gem install selenium-webdriver
でよかったみたい。

rubyのサンプルコードも公式にあったので、そのままコピペしてgoogleTest.rbというファイルに保存し動かしてみる。

% ruby googleTest.rb
/usr/local/lib/ruby/gems/1.8/gems/selenium-webdriver-2.8.0/lib/selenium/webdriver/firefox/binary.rb:116:in `path': Could not find Firefox binary (os=linux). Make sure Firefox is installed or set the path manually with Selenium::WebDriver::Firefox::Binary.path= (Selenium::WebDriver::Error::WebDriverError)

失敗。
firefoxを使ってテストしているのに、firefoxが入ってなかった…。
そういえばfirefoxがなかった。yumでインストール後、再度実行。
% ruby googleTest.rb
/usr/local/lib/ruby/gems/1.8/gems/selenium-webdriver-2.8.0/lib/selenium/webdriver/firefox/launcher.rb:77:in `connect_until_stable': unable to obtain stable firefox connection in 60 seconds (127.0.0.1:7055) (Selenium::WebDriver::Error::WebDriverError)
        from /usr/local/lib/ruby/gems/1.8/gems/selenium-webdriver-2.8.0/lib/selenium/webdriver/firefox/launcher.rb:37:in `launch'
        from /usr/local/lib/ruby/gems/1.8/gems/selenium-webdriver-2.8.0/lib/selenium/webdriver/firefox/socket_lock.rb:20:in `locked'
        from /usr/local/lib/ruby/gems/1.8/gems/selenium-webdriver-2.8.0/lib/selenium/webdriver/firefox/launcher.rb:32:in `launch'
        from /usr/local/lib/ruby/gems/1.8/gems/selenium-webdriver-2.8.0/lib/selenium/webdriver/firefox/bridge.rb:19:in `initialize'
        from /usr/local/lib/ruby/gems/1.8/gems/selenium-webdriver-2.8.0/lib/selenium/webdriver/common/driver.rb:29:in `new'
        from /usr/local/lib/ruby/gems/1.8/gems/selenium-webdriver-2.8.0/lib/selenium/webdriver/common/driver.rb:29:in `for'
        from /usr/local/lib/ruby/gems/1.8/gems/selenium-webdriver-2.8.0/lib/selenium/webdriver.rb:81:in `for'
        from googleTest.rb:4

またも失敗。
そうか、firefoxだからGUIが必要。CUIでやってたらそりゃ起動できないわ。

気を取り直してGUIで実行。
(TeraTerm + Xmingの環境構築はこちらを参考に。)
http://d.hatena.ne.jp/information-world/20090602/1243938029

firefoxが起動後、パパっと勝手に動いて結果出たら終了。
% ruby googleTest.rb
Page title is Cheese! - Google 検索
Page title is Cheese! - Google 検索

なかなかおもしろい!
続きます!

2011年9月29日木曜日

TestLinkのインストール


テスト管理ツールのTestLink、redmineとも連携できるらしいので思い立ってインストールしてみた。
マニュアルに従ってインストール。
https://sourceforge.jp/projects/testlinkjp/downloads/33628/install_manual.pdf

が、ブラウザで最初に開いたときにPHP 5.2移行が必要ということで躓いた。
CentOS 4系なので、公式yumではPHP5.1までしかない。
ソースからしかないのかなぁ、と思って調べたところ、REMIというレポジトリを使えばPHP5.2をCentOS4系からもインストール出来るらしい。
http://memorandum.yamasnet.com/archives/Post-165.html
これでOK!

さて、ブラウザからクリック一つで自動インストール、と思いきや、
Your PHP installation don't have PHP DB extension - without it is IMPOSSIBLE to use Testlink.Failed!

なんだかよく分からない。
とりあえずyumでphp-mysqlを入れて、php.iniもいじってみたけど、ダメ。

仕方ないので、マニュアルにある通り手動でやってみた。
クリック一発でもないけど、そんなに大変でもない。

設定完了でログイン成功!!
…あれ、一瞬でセッションが切れました、再度ログインしてください、になってしまう。
Your session has expired! Please login again

どうやら
/var/lib/php/session
に書き込み権限がなかったので、セッション切れ状態になってしまったみたい。
書き込み権限を付与したところ、正常に動くようになった!

とは言え、TestLinkに慣れなすぎてなにしていいかよくわらない…。