SHOEISHA iD

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

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

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

Selenium 0.7利用手順書

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

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

AppendixI:参考サイト・参考資料

参考サイト

ページ名URL
Selenium 公式HPhttp://www.openqa.org/selenium/
Selenium Core 公式HPhttp://www.openqa.org/selenium-core/
Selenium IDE 公式HPhttp://www.openqa.org/selenium-ide/
Selenium 公式wikihttp://wiki.openqa.org/display/SEL/Home
アスキーデジタル用語辞典http://yougo.ascii24.com/
IT用語辞典 e-Wordshttp://e-words.jp/

参考資料

AppendixII:DB 初期化処理クラスのソースコード

 DB初期化処理を行うためのConnectionMangerクラスとDbInitServletクラスのソースコードを掲載します。

ConnectionManagerクラス

 DBとの接続を行うクラスです。DB初期化サーブレットがDBへ接続する際に利用します。DBのURLやuserの設定などを記述します。

ConnectionManager.java
package test.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 * 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";

    /*----------------------------------------------------------------*/

    /** デフォルトコンストラクタ */
    private ConnectionManager() { }

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

        //JDBCドライバの登録
        try {
            Class.forName(DRIVER);
        } catch (ClassNotFoundException e) {
            System.out.println(
                "Caution!!! kenshu.util.ConnectionManager#getConnection():"
                    + "\n\tドライバ(" + DRIVER + ")が見つからないため"
                    + "Connectioinの取得に失敗しました。");
            throw new RuntimeException(e);
        }

        //DBへの接続
        Connection connection = null;
        try {
            connection = DriverManager.getConnection(URL, USER, PASS);
        } catch (SQLException e) {
            System.out.println(
                "Caution!!! test.util.ConnectionManager#getConnection():"
                    + "\n\tURL, USER, DRIVERのいずれかが違うため"
                    + "Connectioinの取得に失敗しました。");
            throw new RuntimeException(e);
        }
        return connection;
    }

    /**
     * コネクションを切断します
     * @param connection Connection
     */
    public static void disConnect(Connection connection) {
        try {
            if (connection != null) {
                connection.close();
            } else {
                System.err.println(
                    "Caution!!! test.util.ConnectionManager#getConnection():"
                        + "\n\tConnectioinの切断に失敗しました。"
                        + "(引数のConnectionがnull)");
            }

        } catch (SQLException e) {
            throw new RuntimeException("Connectionの切断に失敗しました。", e);
        }
    }
}

DbInitServletクラス

 DB初期化を行うサーブレットです。DbUnitの機能を用いて、Excelファイルでのデータ初期化を実施します。また、MySQLのAUTO_INCREMENTを初期化するためSQL(ALTER TABLE文)も実施しています。

DbInitServlet.java
package test.util;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.util.ArrayList;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.statement.SimplePreparedStatement;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.excel.XlsDataSet;
import org.dbunit.operation.DatabaseOperation;

/**
 * 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";
    /*------------------------------------------------------------*/

    /**
     * @see javax.servlet.http.HttpServlet
     * #doGet(javax.servlet.http.HttpServletRequest,
     * javax.servlet.http.HttpServletResponse)
     */
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        System.out.println("param name:" + request.getParameter("name"));

        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) {
        try {

            /* 初期化対象テーブル */
            ArrayList tablelist = new ArrayList();
            tablelist.add("rental");
            tablelist.add("book");
            tablelist.add("book_info_category");
            tablelist.add("book_info");
            tablelist.add("category");
            tablelist.add("publisher");
            tablelist.add("admin");

            /* コネクション生成 */
            Connection conn = ConnectionManager.getConnection();
            DatabaseConnection dbconn = new DatabaseConnection(conn);

            // テーブルのDELETEとAUTO_INCREMENTの初期化実行
            String tablename;
            for (int i = 0; i < tablelist.size(); i++) {
                tablename = (String) tablelist.get(i);

                String sql = "DELETE FROM " + tablename + ";";
                //System.out.println("delete table data.. SQL: " + sql);
                SimplePreparedStatement st =
                    new SimplePreparedStatement(sql , conn);
                st.addBatch();
                st.executeBatch();

                sql = "ALTER TABLE " + tablename + " AUTO_INCREMENT=0;";
                //System.out.println("init auto_increment..SQL: " + sql);
                st = new SimplePreparedStatement(sql , conn);
                st.addBatch();
                st.executeBatch();
            }

            // Excelから初期化データを投入
            InputStream is = this.getClass().getClassLoader()
                    .getResourceAsStream(path);
            IDataSet initDataSet = new XlsDataSet(is);
            DatabaseOperation.CLEAN_INSERT.execute(dbconn, initDataSet);

            conn.close();
            dbconn.close();

            return true;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

まとめ

 Webアプリケーション用テストツールSeleniumを使ったテストケースの書き方のTipsと、DB初期化のノウハウについて解説してきました。『Selenium 0.7利用手順書』(前編/後編)と併せて、再帰試験(リグレッションテスト)による品質アップに役立ててください。

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

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
Selenium 0.7利用手順書連載記事一覧

もっと読む

この記事の著者

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

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

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

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/437 2006/08/18 00:00

イベント

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

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

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

メールバックナンバー