Author Archive

    はてなブックマーク - ドメイン分析テスト
    このエントリーをはてなブックマークに追加

    こんにちは。耳鼻科にいって初めて自分の声帯の画像をみたフクダです。声帯なかなか面白いです。

    前回までSeleniumIDEについて書いてきましたが、そろそろSeleniumでやりたいことの行き着く先がJavascriptになってしまいましたので 今回は新しく知ったテスト技法について書こうと思います。

    テスト技法って何?


    そもそもテスト技法とは何でしょうか?プログラマであれば、無意識に行っていたりします。
    例えば、境界値分析というとピンとこられる方もいらっしゃるかもしれません。
    例えば、テストが60点以上であれば合格 という条件があるときに

    テストケース1)60点のときに合格になること
    テストケース2)59点のときに不合格になること

    についてテストする。
    60点という境界線をみて、その内側と外側をテストする事を境界値分析テストになります。

    プログラムを作るにあたって、無意識にテストケースを考えられるようになっていると思います。
    このようにテストを行うにあたっての技法は数多くあり、要所に応じて適切なテスト技法を使うことになります。
    この適切なテスト技法を使えるかどうかで、無駄なテストを省くことができたり、必要なデータを取ることができると思います。
    私自身、テスト技法についての学習は全くしてこず、今回初めて学習を行って知った技法がありましたので紹介します。

    ドメイン分析テスト

    ドメイン分析テストとは、JSTQB(Japan Software Testing Qualifications Board)に出てくる用語ではありませんが、関係性がある複数の変数を同時にテストする方法です。
    on, off, in, out という用語とその概念を使って、テスト数を減らすことができます。

    ・on ・・・着目している境界値
    ・off・・・onポイントに隣接する境界線
    ・in・・・ドメイン(定義値)の内側の値
    ・off・・・ドメイン(定義値)の外側の値

    となります。

    例えば、x>10という条件があった場合に
    on ・・・10
    off・・・11
    in ・・・例:15
    out・・・例:5
    となり、必ずしもonが条件を満たす値になるとは限らない。という点が私の発想にありませんでした。

    引用元 ソフトウェアテスト技法ドリル/秋山浩一 著
    今回はコチラの本で勉強させていただきました。

    本書ではもっとわかりやすく図や表を起こすことにより、テスト内容を明白化するなどの説明があり、テスト技法を学ぶよい本だと思います。

    この本はTEFというソフトウェアテスト技術者交流会のMLで知った本なのですが、近日福岡市内でこの本を使って勉強会をしようという動きがあります(だから買ったのだけど・・)
    私も是非参加しようと思っているので、興味のある方はTEFの参加、テスト勉強会の参加してみてはいかがでしょうか?

      はてなブックマーク - Selenium IDEで連番をjavascriptでつける
      このエントリーをはてなブックマークに追加

      こんにちは。フクダリナです。
      連投になりますが、今回は以前からずっとやりたくてもいまいちやり方を分かっていなかったSeleniumでの連番での登録方法です。

      Selenium IDEで連番をふるには

      Selenium IDEだけで連番を振ろうと思うと、手でせこせこ番号を入れる方法しか思いつきませんでした。
      どうにかして動的に番号を振れるはずだとは思っていましたが、録音でできるものではなく。
      Javascriptを使って登録します。

      今回使うコマンドはコチラ
      『getEval』

      前回のinnerHTMLを操作するときと同じコマンドですね。

      getEvalでJavascriptの操作が可能になります。

      <tr>
      	<td>getEval</td>
      	<td>i=1;</td>
      	<td></td>
      </tr>

      これで変数iに1をセットすることになります。いたってシンプル。

      変数の保持期間ですが、Seleniumオブジェクトに保持されるようです。
      ですので、test caseをまたごして使用することも可能ですし、初期値セットを通さなければ1回目のテストの続きの番号を2回目のテストで使用することが可能になります。

      連番を振りながら登録してみる

      実践してみます。
      いつもはページネーションのデータ作るときに使っているのですが、公開できる画面がありませんので、前々回書いたSelenium IDEでスクリーンショットをとりながらテストするを改良して、連番のファイル名でスクリーンショットを保存します。

      改良点は以下
      ・storeしていたファイルパスをjavascriptの変数に変更

      <tr>
      	<td>getEval</td>
      	<td>file_path="C:\\test\\";</td>
      	<td></td>
      </tr>

      ・固定値だったファイル名をjavascriptでインクリメントした変数を2桁ゼロパディングした名称に変更

      <tr>
      	<td>captureEntirePageScreenshot</td>
      	<td>javascript{file_path+ ( "0"+i).slice(-2) + ".jpg";}</td>
      	<td>background=#FFFFFF</td>
      </tr>

      スクリーンショットを以下の3回撮るようにします。
      1.ZENPREのTOPページを開いたとき
      2.ログイン画面ページを開いたとき
      3.エラー画面表示時

      完成したものがコチラ。

      <table border="1" cellspacing="1" cellpadding="1">
      <thead>
      <tr>
      <td colspan="3">New Test</td>
      </tr>
      </thead>
      <tbody>
      <!--==ZENPRE使ってテスト==-->
      <!-- 変数セット-->
      <tr>
      	<td>getEval</td>
      	<td>i=1;</td>
      	<td></td>
      </tr>
      <!-- 画像保存パスをJavascript側で指定-->
      <tr>
      	<td>getEval</td>
      	<td>file_path="C:\\test\\";</td>
      	<td></td>
      </tr>
      <!-- Zenpreのページを開きます-->
      <tr>
      	<td>open</td>
      	<td>http://zenpre.net/</td>
      	<td></td>
      </tr>
      <!--1回目:スクリーンショットを撮ります-->
      <tr>
      	<td>captureEntirePageScreenshot</td>
      	<td>javascript{file_path+ ( "0"+i).slice(-4) + ".jpg";}</td>
      	<td>background=#FFFFFF</td>
      </tr>
      <!--インクリメント-->
      <tr>
      	<td>getEval</td>
      	<td>i=i+1;</td>
      	<td></td>
      </tr>
      <!-- ログインをクリック-->
      <tr>
      	<td>clickAndWait</td>
      	<td>css=#no_logined_header > a > img.fright</td>
      	<td></td>
      </tr>
      <!--2回目:スクリーンショットを撮ります-->
      <tr>
      	<td>captureEntirePageScreenshot</td>
      	<td>javascript{file_path+ ( "0"+i).slice(-4) + ".jpg";}</td>
      	<td>background=#FFFFFF</td>
      </tr>
      <!--インクリメント-->
      <tr>
      	<td>getEval</td>
      	<td>i=i+1;</td>
      	<td></td>
      </tr>
      <!-- test/testでログイン-->
      <tr>
      	<td>type</td>
      	<td>login</td>
      	<td>test</td>
      </tr>
      <tr>
      	<td>type</td>
      	<td>password</td>
      	<td>test</td>
      </tr>
      <tr>
      	<td>clickAndWait</td>
      	<td>//input[@type=&#039;image&#039;]</td>
      	<td></td>
      </tr>
      <!-- エラーメッセージが正しく表示されているか確認-->
      <tr>
      	<td>verifyTextPresent</td>
      	<td>ログインID、または、パスワードが違います</td>
      	<td></td>
      </tr>
      <!--3回目:スクリーンショットを撮ります-->
      <tr>
      	<td>captureEntirePageScreenshot</td>
      	<td>javascript{file_path+ ( "0"+i).slice(-4) + ".jpg";}</td>
      	<td>background=#FFFFFF</td>
      </tr>
      </tbody>
      </table>

      実行すると、C:\testに3つの画像ファイルが保存されます。

      連番がふれるというだけで、だいぶテストケースを作る手間がかからなくなりますので、ぜひご活用ください。

        はてなブックマーク - Selenium IDEでinnerHTMLを操作する
        このエントリーをはてなブックマークに追加

        こんにちは。フクダリナです。久しぶりすぎて、いろいろ忘れてしまいました。
        Fusicでは、テスターと、時々マニュアル作成、趣味とまでいきませんが、Fusic内の写真を撮っています。
        先日行った上海社員研修では、2200枚超の写真を撮りましたが、面白いと思う写真がとれなくて、写真の難しさを痛感しています。

        Selenium IDEでテスト

        もうだいぶ前になりますが、Selenium IDEでスクリーンショットをとりながらテストするというのを書かせていただきました。

        今回もSelenium IDEについてです。

        Selenium IDEで録音できることの限界

        Selenium IDEの録音機能を使えば、HTMLやJavascriptの知識がなくても、テストケースを簡単に作ることが可能です。
        しかし、録音にも限界というものがあり、innerHTMLや、Flashプレーヤーの操作などはできません。

        Selenium IDEでinnerHTMLを操作したい

        録音機能を使っては操作できませんが、Seleniumの「getEval」コマンドを使えば、innerHTMLの操作は可能です。
        innerHTMLのテキストエリアの要素をとるには
        this.page().getDocument().getElementById(“content_ifr”).
        contentWindow.document.getElementById('tinymce').innerHTML = 'hoge';
        というので可能です。

        ということで、ここからソース

        <!--サイトを開く-->
        <tr>
        	<td>open</td>
        	<td>http://www.tinymce.com/tryit/full.php</td>
        	<td></td>
        </tr>
        <!--innerHTMLの部分に文字を入れる-->
        <tr>
        	<td>getEval</td>
        	<td>this.page().getDocument().getElementById("content_ifr").contentWindow.document.getElementById(&#039;tinymce&#039;).innerHTML = &#039;hoge&#039;;</td>
        	<td></td>
        </tr>

        サンプルにwww.tinymce.com/tryit/full.php
        を使ってみます。

        さっそく実行。
        実行結果

        ・・・あっさりできてしまいました。

        storeコマンドを使って、入力しやすくする

        これだけではアレなので。
        このコマンドは、「対象」と呼ばれる部分に入力値も入れることになるので、修正がしづらいです。
        hogeの部分を書き換えるのがめんどくさい

        そこで、以前もでてきたstoreコマンドを使って、書き換えます。

        storeコマンドでinput_dataという変数を宣言し、入力文字を設定します。
        先ほどのinnerHTMLにセットしていた hogeの部分を${input_data}と変数定義することで、storeでセットした文字がセットできます。

        ソースはこちら

        <!--サイトを開く-->
        <tr>
        	<td>open</td>
        	<td>http://www.tinymce.com/tryit/full.php</td>
        	<td></td>
        </tr>
        <!--変数を設定-->
        <tr>
        	<td>store</td>
        	<td>ここに入力値をいれます。</td>
        	<td>input_data</td>
        </tr>
        <!--innerHTMLの部分に文字を入れる-->
        <tr>
        	<td>getEval</td>
        	<td>this.page().getDocument().getElementById("content_ifr").contentWindow.document.getElementById(&#039;tinymce&#039;).innerHTML = &#039;${input_data}&#039;;</td>
        	<td></td>
        </tr>

        変更

        これで、storeコマンドの対象を変更するだけで入力値を簡単に変更できます。
        入力が簡単になった

        おわりに

        Selenium IDEはプログラマーでなくても、簡単にテストの自動化を行ってくれるツールですが、使い方をマスターすると、より複雑な操作も可能になります。
        まだまだ勉強中ですので、次回はWYSIWYGエディタの完全操作や、Flash Playerを操作できるようになりたいと思います。