dbunitng (0.6) | 2008-10-02 16:31 |
5000件をBeanのListで取得して、XMLの期待値と比較するパフォーマンステストをやってみました。
こういうのって一概に参考にならないことも多いと思うんですけど、感触だけでも伝えられたらって感じです。
こんなテーブルに5000件入れます。
データはこんなのです。期待値のXMLです。
- mysql> desc emp;
- +----------+-------------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +----------+-------------+------+-----+---------+-------+
- | EMPNO | int(11) | NO | PRI | NULL | |
- | ENAME | varchar(10) | YES | | NULL | |
- | JOB | varchar(9) | YES | | NULL | |
- | MGR | int(11) | YES | | NULL | |
- | HIREDATE | date | YES | | NULL | |
- | SAL | float(7,2) | YES | | NULL | |
- | COMM | float(7,2) | YES | | NULL | |
- | DEPTNO | int(11) | YES | MUL | NULL | |
- +----------+-------------+------+-----+---------+-------+
こういうテストです。
DAOは内部でiBatisを使ってデータを取得してます。
実行結果はこうでした!
テスト全体での実行時間は14秒ちょい(3回実行してもほぼこの時間でした)。
DAOのメソッドを呼び出す前後で時間を計測しましたが、それが0.4秒なので、
CLEAN_INSERTして、データセットへの変換とアサーションで14秒かかってます。
まさかユニットテストで5000件入れることはないし、 結合テストとかならビルドマシンやデイリービルドで実行するので、 十分実用にたえると思います。
以下実行環境や詳しいテスト内容を記述します。
僕のマシンスペックはこうです。
MySQLのバージョンです。
テストクラスです。
実行時間を計測するリスナークラスです。
- package org.dbunitng.sample.test;
- import java.util.List;
- import org.dbunit.DatabaseUnitException;
- import org.dbunitng.annotations.DatabaseOperationType;
- import org.dbunitng.annotations.SetUpOperation;
- import org.dbunitng.assertion.AssertionHelper;
- import org.dbunitng.dataset.BeanListConverter;
- import org.dbunitng.sample.dao.EmpDao;
- import org.dbunitng.sample.entity.Emp;
- import org.testng.annotations.Test;
- @Test(groups = "performance")
- public class PerformanceTest {
- @SetUpOperation(value = DatabaseOperationType.CLEAN_INSERT, pathname = "org/dbunitng/sample/test/result.xml")
- public void testPerformance() throws DatabaseUnitException {
- EmpDao dao = new EmpDao();
- long start = System.currentTimeMillis();
- List<Emp> list = dao.listAllEmployee();
- System.out.printf("DAO execute time : (%d ms)\n", System.currentTimeMillis() * start);
- AssertionHelper.assertEqualsOnlyColumnsInFile(new BeanListConverter(
- list).convert(), getClass(), "result.xml");
- }
- }
- package org.dbunitng.sample.test;
- import org.testng.ISuite;
- import org.testng.ISuiteListener;
- public class PerformanceListener implements ISuiteListener {
- private long start;
- public void onStart(ISuite suite) {
- System.out.println("Test Suite starts.");
- start = System.currentTimeMillis();
- }
- public void onFinish(ISuite suite) {
- System.out.println("Test Suite ends.");
- System.out.printf("execute time : (%d ms)", System.currentTimeMillis()
- * start);
- }
- }