大量のテストデータを作る
※MySQLを前提として書いています
WEBアプリ・データベースにデータを作る話。
少なくとも自分の場合、テストデータを作るときは大きく分けて下記の3パターンがあります。
- ロジックのテスト等の用途で、パターンを網羅したデータを揃える
- 負荷テスト等の用途で、中身をランダムにしたデータをたくさん用意する
- 結合テスト以降
ロジックのテスト等の用途で、パターンを網羅したデータを揃える
よほど膨大な件数になるわけでないのなら、
Excelでパターンを表にまとめ、それをそのままINSERT文に加工するのが一番早いです。
そのExcelはテスト時のチェックリストとしても使用できますし…。
結合テスト以降
通常の操作での作成が困難なデータでもない限り、データベースの直接操作は極力控えるべきです。
尚、WEBアプリではないのですが、以前はテストの自動化にIBMのRFTを使用していたこともあります。
(シェアウェアですが、無料期間もあります)
放置しておくだけで、あらかじめ決めておいたデータを入力してくれます。
スクリーンショットなども撮っておいてくれます。
ただし、このためのコーディングにも若干工数がかかるので、1回限りの使用であれば手作業の方が早いかもしれません。
開発や保守期間の長い中~大規模プロジェクト向けだと思います。
参考:Rational Functional Tester -IBM
http://www-03.ibm.com/software/products/ja/functional
負荷テスト等の用途で、中身をランダムにしたデータをたくさん用意する
ランダム値で大量なINSERT文を生成したいときは専用のコードを書いてしまいます。
下記のサンプルでは、
`table`テーブルのカラム `id`,`hoge`,`fuga`,`up_date`
に、それぞれ
連番、1~10のランダム値、「test+ランダム値」文字列、現在日時
を1万行INSERTしています。
前半部分でテーブル名やフィールド名などを設定し、それに合わせてINSERT文を作成し実行します。
作業用なので別にきっちりやる必要はないのですが、いつもの癖でプレースホルダを使用。
public function makeTestData() { // >> テーブル情報などの設定 >>>>>>>>>>>>>>>>>>>>>>>>> // テーブル名 $table = "table"; // フィールド名 $column_list = array( "id", "hoge", "fuga", "up_date", ); // 作成レコード数 $record_count = 10000; // INSERTする値 $value_list = array(); for ($i = 0; $i < $record_count; $i ++) { $value_list[] = $i + 1; // id $value_list[] = rand(1,10); // hoge $value_list[] = "test_" . rand(1,10); // fuga $value_list[] = date("Y-m-d H:i:s"); // up_date } // << ここまで <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // SQL生成 $sql = "INSERT INTO `" . $table . "` "; $sql .= "(" . implode("," ,$column_list) . ") "; $sql .= "VALUES "; for ($i = 0; $i < $record_count; $i ++) { if ($i > 0) { $sql .= ","; } $sql .= "(" . implode(",", array_fill(0, count($column_list), "?")) . ")"; } // 実行 // (※各環境に合わせた実行方法でどうぞ) }
ただし、この程度の単純なデータであればSQLクエリだけで済ませることもできます。
idはauto_increment設定、up_dateはcurrent_timestamp設定にでもしておき、
適当な1レコードをINSERTして、あとは以下のようなクエリを繰り返し打つだけ。
INSERT `table` (`hoge`, `fuga`) SELECT CEIL(RAND() * 10), CONCAT('test', CEIL(RAND() * 10)) FROM `table`;
実行するごとに
1件→2件→4件→8件→16件…
と増えるので、増えすぎには注意です。
参考:MySQLで簡単にランダムなテストデータを作成する方法 - Qiita
http://qiita.com/tayasu/items/c5ddfc481d6b7cd8866d
また、ブログ移転前の当記事のコメントで教えていただきましたが、
以下のようなExcel拡張機能を使う(いっそ作る?)こともできそうです。
参考:Excelの作業効率アップ-2 擬似個人情報データ作成(複数シート) - 経理兼SE担当の10年間の纏めから厳選した無駄のない100Excel拡張機能!
http://superdbtool.blog.jp/archives/490043.html