selenium小技活用術・・?

このエントリーをはてなブックマークに追加

 こんにちは、QA所属おかもとです。
最近は寒くなり、うちの子がまた体調を崩す恐ろしい時期がやって参りました。
同い年のお子さんを持つ父母の皆さん、この時期一体どうやって乗り切ってるのでしょうか??
・・良かったらご意見お聞かせください。


今日は久しぶりの登場で何を書くか迷った結果、弊社QAでは欠かせないselenium(無償の自動化ツール)の小技を書いてみようかと思います。
 selenium ・・簡単に説明しますと、OpenQAというサイトから無償でダウンロード出来るFFで動作するブラウザテストの事です。
以下のサイトからダウンロード可能です。
特徴は、ビデオを録画するが如くseleniumIDE画面で(録画)を押すと、その録画中にターゲットブラウザで行われた動作が記録されていくもので、これを再生することで自分の代わりにリグレッションテストが簡単に出来てしまうという優れものです。

http://seleniumhq.org/

シャノンでのseleniumの導入、試み等に関しては過去記事を検索すればいっぱい出てくると思うのでそちらを見てください。。 QAリーダが書いたこれとかどうぞ。。

http://newsfeed.jp/v1/shanon-tech.blogspot.com/2011/11/selenium.html


今日私が紹介するのは、キュー○ー3分クッキング位の感覚で見てもらうとちょうどいいです。
・・特に新しいことではないです。

さて最初に紹介するのは、上記の様に動作を覚えさせるだけでは事足りないときに使うstoreコマンドです。
話が唐突過ぎるという方に補足するとリファレンスには以下と説明されているコマンドです。

store(expression, variableName)
Arguments:
  • expression - the value to store
  • variableName - the name of a variable in which the result is to be stored.
This command is a synonym for storeExpression.


・・例えば、こんなテスト。

ユーザを追加して、そのユーザの申込み情報が正しいかを確認したい

この様な動作確認は弊社のテストシーンでも良く出てくるのですが、
じゃー山田太郎さんね・・と簡単にその履歴を確認することは意外と難しいです。
なぜならリグレッションテストの特性上、何度も何度も同じテストを流すことになるので今日流した最新の山田太郎さんのユーザ申込みを見るには、今日の何時何分に流した山田太郎さんのこの履歴をピンポイントで見なくてはいけない・・という状況が出てくるからです。
そこで便利なのがこのstoreコマンドに時間を入れるという技。

 


<tr>
    <td>storeGlobal</td>
    <td>
javascript{DateFormatter.format(new Date(),"Ymd-His")}</td>
    <td>yamada_user</td>
</tr>




seleniumのコマンドでは、javascriptを使うことが出来るので上記の様に時間の形式を最初に定義して格納しておくことが出来ます。
またstoreコマンドにGlobalを付けておくことで、そのTestSuiteの中で有効な変数となり、同じ変数名を付けて汚染しない限りはこれを何度も呼び出すことが出来ます。
・・で、上記を実際に呼び出すときはこうします。


<tr>
    <td>type</td>
    <td>
name=D__P__D_name1</td>
    <td>山田${yamada_user}</td>
</tr>


上記は、姓を入力するフォームに山田${yamada_user}と入力している状態です。
実際には何が入力されたかというと山田20121026-010612 という山田、と先ほどstoreコマンドで作った日にちがくっついた状態のものが生成されています。
これをユーザ検索画面で検索すれば、常にユニークな山田さんの情報が引けるというわけです

では、次。。
簡単すぎますよね、すいません。


ここからは、普通一般的に使うuser-extensions.js 以外にもこんな拡張スクリプトを使ってみます。

user-extensions.js?の人はまずこちらを・・
http://oss.infoscience.co.jp/seleniumhq/docs/08_user_extensions.html#selenium-ide 

ここで使うのは、goto_sel_ide.jsです。
早速手元に持ってきて、セットしてみましょう。 ここら辺を参考にどうぞ。



http://oss.infoscience.co.jp/seleniumhq/docs/03_selenium_ide.html#id34

で、これで何をするかというと、常にユニークなIDを登録し続けるテストを作ってみます。
これを思いついたのは、こんなテストシーンからでした。

ID=114956を持つユーザからちょうど1000人まで(ID=115956)を連番でID指定して登録できないか

これはさっきstoreを使った理由と同様、IDEで録画できる限界を超えてます。
そんなときに、上記で登録したgoto_sel_ide.jsの恩恵を受けてこんなテストを作ることが可能です。

<tr>
    <td>store</td>

    <td></td>
    <td>count</td>   ←とりあえずこんな名前を定義。
</tr>
<tr>
    <td>store</td>

    <td>114956</td>  ←キーとなるID=114956も定義。
    <td>ID</td>
</tr>
<tr>
    <td>while</td>

    <td>storedVars.count++ &lt; 1000</td>  ←このテストを何度まで回すか回数を指定する。
    <td></td>                     この場合は、1000個追加したいので1000と定義。
</tr>
<tr>
    <td>store</td>

    <td>javascript{eval(storedVars['ID']) + 1}</td> ←さっき定義したIDに+1していくjavascriptを
    <td>ID</td>                       再定義。ここで重要なのはwhileコマンドの 
</tr>                             中でこれをやってるところ♪  

<tr>
    <td>type</td>
    <td>name=User_ID</td>              ←上記で作ったID変数をここで呼び出す
    <td>${ID}</td>
</tr>

 <tr>
    <td>endWhile</td>
         ←
endWhileでループさせる部分を終らせる。
    <td></td>               while~endWileで定義された中身の部分だけが定義された 
    <td></td>               回数分ぐるぐる回って勝手に終了する。
</tr>



こんな感じになります。このテストの場合はIDを1ずつプラスしていますが、javascript中で+か-にするかでカウントダウン・カウントアップが可能です。

・・さて、楽しい応用編はこちらです。。笑
これを何とか日常生活の中で生かせないか?と主婦は考えました。
そして前に一度、小人が欲しいな~と考えたこれを実行してみることに。


【ターゲット】
検索すればするほどポイントが貯まる某有名ネットショッピングのサイト

【注意】
ツールバーをインストールしてくださいね。笑
ネックは同じ文言ではポイント加算されないところです。。笑

【seleniumでさせる動作】
1.会員ログイン(これをしないといくら検索してもポイント貯まりません!)⇒
2.HOME画面を開き⇒
3.ランダムな文字列を入力するような変数を定義⇒
4.HOME画面で検索フォームに先ほど作った文字列を入力⇒
5.検索ボタンを押す⇒
6.画面が切り替わったところまで待たせて⇒
7.再び2.に戻して別の文字列を入れるの繰り返しをさせる。
  
【コツ】
別に速さは求めないので、落ちない程度に細く長く続けることを最優先に!

とした結果、どうなったでしょう・・?
果たして、自分で検索文言を入れるが如くポイントは貯まっていくのでしょうか・・?
・・それは次回。。と言いたい所ですが、興味がある方は試してみてください。


次の記事
« Prev Post
前の記事
Next Post »
Related Posts Plugin for WordPress, Blogger...