ダミーデータを自動生成したい!プロジェクト

 先日のエントリから更に掘り下げて、ダミーデータをある程度自動的に生成できれば、手間がもっと減るのではないかと考えた。
 結果→GitHub - taiyoh/test-dummygenerator: for people who are lazy not to want to create many many test data...
 ハッシュリファレンスベースで、ある程度値の方向性がついている感じです。

#!/usr/bin/env perl

use strict;
use warnings;

use Test::DummyGenerator;
use YAML qw/Dump/;

my $dummy = Test::DummyGenerator->new(
    schema => YAML::Load(do { local $/; <DATA> })
);
my $data = $dummy->generate(3);
print Dump $data;

__DATA__
---
id: __exp(_)__
name: __str(\w{5})__
age: __rand(50)__
pattern: __range(1,3)__
status:
  param: __exp(int( (101 - _) / _ ))__

 というテストスクリプトを実行すると

---
- age: 24
  id: 1
  name: VHX5u
  pattern: 3
  status:
    param: 100
- age: 46
  id: 2
  name: XleoG
  pattern: 2
  status:
    param: 49
- age: 33
  id: 3
  name: eeldk
  pattern: 2
  status:
    param: 32

 こんなデータが生成されます。
 基本的な方向性として、

  • 人間にとってその文字列の意味の有る無しについてはあえて考えない
  • バリデーションライブラリに使われるような境界条件を基にダミーデータを作成

 と考えました。ダミーのメールアドレスを入れると言っても、mysqlで使う型は大抵varcharかtextだしね…。そういうスタンスで色々切り捨てています。
 一番の目玉としては、__exp()__の括弧内に使われるアンダースコアは$_と同じなので(s/_/$_/gしてから括弧内をevalしてるだけなので><)、生成するダミーデータ全体の中での、パラメータの移り変わりを関数的に表現できることです。といっても、実際できそうなのはN次方程式くらいですが…
 あと、データ生成のルールは、ユーザ自身で拡張できるようになっています。やり方はFormVlidator::Liteと全く同じなので(コード使わせてもらってます!><)、特に言う必要はないかな、と。