SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Selenium 0.7利用手順書

Selenium 0.7 TipsとExcelによるDB初期化

Seleniumによるテストの効率を上げるテクニック

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

Excelを使ったDB初期化

 テストを実施すると、その結果によってデータが更新される場合があります。そこで、テストを実施する前に毎回データを初期化する必要があります。そのような要件を満たすために、ここでは以下の2つの方法を組み合わせて使用します。

  • DbUnit
  • 単体テストツールJunitを拡張したテストフレームワークです。Excelを用いてDBデータ設定などが行えます。
  • DB初期化サーブレット
  • 今回新規作成します。Seleniumから呼び出されて、DbUnitの機能を用いて初期化を実施します。パラメータとして初期化に使うExcelのファイル名を指定します。

 今回作成したSeleniumTestプロジェクトは、Webアプリケーションとして動作するため、SeleniumTestアプリケーション内にサーブレットを作成することで、Seleniumからopenコマンドで初期化処理を起動させることが可能になります。

DbUnitの導入

 以下の手順でDbUnitを使用する準備を行います。

1. DbUnitのダウンロード

 以下のURLにアクセスして、DbUnitをダウンロードします。2006年5月26日時点の最新バージョンは2.1です。

 zipファイル、またはtar.gzファイルをダウンロードして解凍すると、「dbunit-2.1.jar」と「docs」フォルダ、「LICENSE.txt」が展開されます。「dbunit-2.1.jar」をSeleniumTestプロジェクトの「WEB-INF/lib/」フォルダにコピーします。

2. POIのダウンロード

 DbUnitはExcelファイルを扱うために内部でApache POIを使用しているので、POIもダウンロードします。最新のリリース版であるバージョン2.5.1を使用します。下記URLへアクセスします。

 zipファイル、またはtar.gzファイルをダウンロードして解凍すると、「poi-2.5.1-final-20040804.jar」とその他のフォルダ、およびjarファイルが展開されます。「poi-2.5.1-final-20040804.jar」をSeleniumTestプロジェクトの「WEB-INF/lib/」フォルダにコピーします。

3. DBのconnectorをコピー

 また、DBに接続するためconnectorも追加しましょう。初期化対象となるDBは、当然テスト対象のWebアプリケーションで用いているDBですから、テスト対象のWebアプリケーションで使用しているconnectorを使用すれば良いでしょう。SeleniumTestの「WEB-INF/lib/」フォルダにコピーします。ここではMySQLを使っているので、「mysqlconnector-java-3.1.12-bin.jar」をコピーしてきました。

4. jarファイルをクラスパスへ追加

 eclipseで、追加したjarファイルをSeleniumTestプロジェクトのクラスパスに追加します。

図5 dbunitなどのjarファイルをクラスパスに追加
図5 dbunitなどのjarファイルをクラスパスに追加

クラスとファイルの作成

 今回、新たに以下のクラスおよびファイルを作成します。

表5 DB初期化用に新規作成するファイル
フォルダファイル名概要
WEB-INF/src/test/util/ConnectionManager.javaDB接続用クラス。DB初期化サーブレットで使用する。
DbInitServlet.javaDB初期化サーブレット。DbUnitの機能を利用する。
WEB-INF/src/ext/initxls/init_xxxx.xls初期化するデータを設定したExcelファイル(必要に応じて複数作成)。
WEB-INF/web.xmlDB初期化サーブレットを登録する。
init-ok.html初期化正常終了表示用html
init-err.html初期化エラー表示用html

 eclipseのナビゲータで、以下の手順で作成していきます。

  1. 「WEB-INF/」配下に、ファイル「web.xml」を作成。
  2. 「WEB-INF/」配下に、ファイル「init-ok.html」と「init-err.html」を作成。
  3. 「WEB-INF/src/」配下に、フォルダ「test/util/」と「ext/initxls/」を作成。
  4. 「WEB-INF/src/test/util/」配下に、クラスDbInitServletConnectionManagerを作成。
  5. 「WEB-INF/src/ext/initxls/」配下に、別途作成した初期化データ用Excelファイル(「初期化データ用Excelファイルの作成方法」を参照)を置く。ここでは「init_common.xls」「init_search1.xml」「init_search2.xml」という3ファイルを作成。

 ここまで作成したプロジェクトの状態は次のようになります。

図6 DB初期化用のフォルダとファイルを作成した状態
図6 DB初期化用のフォルダとファイルを作成した状態

初期化データ用Excelファイルの作成方法

 初期化データ用のExcelファイルを次のとおり作成します。

  • ファイル名は任意
  • 1シート=1テーブルに該当(シート名=テーブル名)
  • 1行目にカラム名を記述
  • 各行に設定したデータを記述

 例えば、「ADMIN」「BOOK」「CATEGORY」という3つのテーブルを使用している場合、次のようになります。

図7 初期化データ用Excelファイルの例
図7 初期化データ用Excelファイルの例

DB初期化処理クラスの作成

 先ほど作成したクラスに内容を記述していきます。

ConnectionManagerクラス

 DBとの接続を行うクラスです。DB初期化サーブレットがDBへ接続する際に利用します。DBのURLやuserの設定などを記述します。ソースコードの内容については「AppendixII:DB初期化処理クラスのソースコード」を参照してください。

ConnectionManager.java
…(中略)…
/**
 * DBとのコネクションを管理するクラス
 */
public class ConnectionManager {

    /*--- 定数設定 -------------------------------------------------*/
    /** URL */
    private static final String URL =
            "jdbc:mysql://localhost:3306/myapp ";
    /** user */
    private static final String USER = "testuser";
    /** password */
    private static final String PASS = "testpass";
    /** driver */
    private static final String DRIVER = "com.mysql.jdbc.Driver";
    /*--------------------------------------------------------------*/

    /**
     * コネクションを取得
     * @return Connection
     */
    public static Connection getConnection() {
    …(中略)…
    }

    /**
     * コネクションを切断します
     * @param connection Connection
     */
    public static void disConnect(Connection connection) {
    …(中略)…
    }
}

DbInitServletクラス

 DB初期化を行うサーブレットです。DbUnitの機能を用いて、Excelファイルでのデータ初期化を実施します。初期化用Excelファイルを読み込むフォルダ名の設定などを記述します。初期化に使用するExcelファイルはテストごとに異なるので、サーブレットを起動する際のHTTPリクエストのnameパラメータから読み込みます。また、MySQLのAUTO_INCREMENTを初期化するため、SQL(ALTER TABLE文)も実施しています。

 ソースコードの内容については「AppendixII:DB 初期化処理クラスのソースコード」を参照してください。

DbInitServlet.java
…(中略)…
/**
 * DBを任意のExcelに従って初期化するサーブレット。
 * GETパラメータ「name」の値(Excelファイル名)を読み込む。
 */
public class DbInitServlet extends HttpServlet {

    /*----- 定数設定 ---------------------------------------------*/
    /** 初期化Excelファイルを置くフォルダ */
    private static final String INIT_XLS_DIR = "/ext/initxls/";
    /** 初期化成功時に表示する画面のファイル */
    private static final String INIT_OK_FILE = "WEB-INF/init-ok.html";
    /** 初期化失敗時に表示する画面のファイル */
    private static final String INIT_ERR_FILE = "WEB-INF/init-err.html";
    /*------------------------------------------------------------*/
    …(中略)…

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        try {
            // 初期化Excelファイルのパスを設定
            String path = INIT_XLS_DIR + request.getParameter("name");

            // 初期化メソッドを実行
            boolean b = initDb(path);

            // 初期化成功画面を表示する
            RequestDispatcher rd = request
                .getRequestDispatcher(INIT_OK_FILE);
            rd.forward(request, response);
            return;

        } catch (Exception e) {
            // nameパラメータにExcelファイル名無しなど
            // 例外発生時はエラー画面を表示する
            RequestDispatcher rd = request
                .getRequestDispatcher(INIT_ERR_FILE);
            rd.forward(request, response);
            return;
        }
    }

    /**
     * 初期化メソッド
     * @param path initExcelFilePath
     * @return boolean
     */
    private boolean initDb(String path) {
    …(中略)…
    }
}

その他のファイル作成

web.xml

 Webアプリケーションの設定を記述するファイルです。作成したDbInitServletをサーブレットとして登録します。

web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
  PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
  "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
  <display-name>Application for Selenium Test</display-name>

  <!-- Standard Action Servlet Configuration (with debugging) -->
  <servlet>
    <servlet-name>DbInitServlet</servlet-name>
    <servlet-class>test.util.DbInitServlet</servlet-class>
  </servlet>

  <!-- Standard Action Servlet Mapping -->
  <servlet-mapping>
    <servlet-name>DbInitServlet</servlet-name>
    <url-pattern>/dbinitservlet</url-pattern>
  </servlet-mapping>

</web-app>

init-ok.html/init-err.html

 初期化が成功した場合、および失敗した場合に表示する画面のhtmlです。内容はシンプルなもので十分です。

init-ok.html
<html>
<head>
    <title>
        init ok
    </title>
</head>
<body>
        init ok
</body>
</html>
init-err.html
<html>
<head>
    <title>
        init error
    </title>
</head>
<body>
        init error!!<br>
        nameパラメータに初期化用Excelファイル名を指定してください。
</body>
</html>

初期化サーブレットの使用方法

 作成したDB初期化サーブレットDbInitServletは2通りの方法で使用することができます。1つはSeleniumからopenコマンドを使用する方法、もう1つはブラウザからURLを指定して起動する方法です。

Seleniumから呼び出す

 Seleniumではopenコマンドを使ってURLを指定することでDbInitServletを呼び出すことができます。テストケースの記述は次のようになります。

01_Login_Test_XX.html
<tr>
    <td>open</td>
    <td>/SeleniumTest/dbinitservlet?name=init_common.xls</td>
    <td></td>
</tr>

 DB初期化サーブレットでは、初期化処理が正常終了した場合は正常終了画面を表示します。そのため、openコマンドでDB初期化サーブレット起動した後に次のような行を追加することで、初期化処理を実施してから試験項目を実施することができます。

01_Login_Test_XX.html
<tr>
    <td>open</td>
    <td>/SeleniumTest/dbinitservlet?name=init_common.xls</td>  …【1】
    <td></td>
</tr>
<tr>
    <td>assertTitle</td>
    <td>init ok</td>  …【2】
    <td></td>
</tr>

<tr>
    <td>open</td>
    <td>/MyApp/001_login.jsp</td>  …【3】
    <td></td>
</tr>
    【1】DB初期化サーブレットの呼び出し。nameパラメータに初期化用Excelのファイル名を指定。
    【2】初期化が正常終了したか確認。
    【3】初期化が正常終了したら試験開始。

URLを直接指定する

 ブラウザのアドレスバーに、次のようなURLを直接指定することでSeleniumTestアプリケーションのDbInitServletを呼び出すことができます。

http://localhost:8080/SeleniumTest/dbinitservlet?name=init_common.xls

 Seleniumを使った結合試験以外の場合でも、上記URLを指定することで、該当するExcelファイルを使ってDBの初期化を行うことができます。

次のページ
AppendixI:参考サイト・参考資料

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Selenium 0.7利用手順書連載記事一覧

もっと読む

この記事の著者

大田尾 一作(株式会社DTS)(オオタオ イサク)

株式会社DTS イノベーション推進部在籍。業務内容は、FintechやIoT、AIといった新しい領域でのビジネスを推進するための調査・研究。日本Seleniumユーザーコミュニティに参加。   

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/437 2006/08/18 00:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング