いまさらテストデータ自動生成できる faker を PHP で使ってみる、便利やなあ
fakerって
自動的にデータを作成してくれる部品です。日本語に対応しているので使いこなせば、なかなか有用に使えると思いますw。なんというか今までの経験上、会員データなりカードデータなり、考え無しに大量データを作成しようとすると偏ったデータになったり、にユニークデータとして登録できないとかとかあって結局、自動生成するプログラムを作成していたのでが、これを使えば少しは楽になるかもしれません。
インストール
簡単です。超簡単。
$ composer require fzaninotto/faker
使ってみる
faker のよくあるサンプルです。
<?php
require_once 'vendor/autoload.php';
$faker = Faker\Factory::create('ja_JP');
$data = array(
"email" => $faker->email,
"name" => $faker->name,
"first" => $faker->firstname,
"address" => $faker->address,
"randomNumber" =>$faker->randomNumber(2),
"sentence" =>$faker->sentence(3),
"randomNumber" =>$faker->randomNumber(2),
"betweenNumber" =>$faker->numberBetween(10,100),
"date" => $faker->date('Y-m-d', 'now'),
"dateTimeThisMonth" => $faker->dateTimeThisMonth->format('Y-m-d'),
"url" => $faker->url,
"realText" => $faker->realText($faker->numberBetween(10,20)),
"imageUrl" => $faker->imageUrl('800','600'),
);
var_dump($data);
結果
["email"]=>
string(20) "kudo.naoko@nagisa.jp"
["name"]=>
string(13) "吉田 洋介"
["first"]=>
string(6) "結衣"
["address"]=>
string(53) "9169392 群馬県高橋市北区津田町杉山7-9-4"
["randomNumber"]=>
int(43)
["sentence"]=>
string(23) "Aut architecto modi et."
["betweenNumber"]=>
int(60)
["date"]=>
string(10) "2015-02-16"
["dateTimeThisMonth"]=>
string(10) "2017-07-21"
["url"]=>
string(89) "http://www.nagisa.net/quaerat-delectus-consequatur-nihil-aliquid-voluptates-quaerat-rerum"
["realText"]=>
string(30) "にゆらゆるいはかせ。"
["imageUrl"]=>
string(36) "http://lorempixel.com/800/600/?71307"
なんとなく使えそうな感じ。
realText で、Warning がでる
なんだろうって思ったら mb_substr のパラメータエラー足りないって怒られているようだ。
issues#1003 でその解決策が出ていた。
PHP Warning: mb_substr() expects parameter 3 to be integer, string given in /home/vagrant/vendor/fzaninotto/faker/src/Faker/Provider/ja_JP/Text.php on line 623
人名=名前、苗字ではない
"name" => $faker->name,
"first" => $faker->firstname,
"last" => $faker->lastname,
"kanaName" => $faker->kananame,
"firstKanaName" => $faker->firstKanaName,
"lastKanaName" => $faker->lastKanaName,
結果
["name"]=>
string(13) "中村 明美"
["first"]=>
string(6) "加奈"
["last"]=>
string(9) "西之園"
["kanaName"]=>
string(19) "ノムラ ナナカ"
["firstKanaName"]=>
string(9) "マナブ"
["lastKanaName"]=>
string(9) "イシダ"
ははは、そうきたか。
まあ name で取得してから分割すればよし。流石に漢字=カナ、って一致してないのねw
JANコード
EAN13で生成されるが、日本国のいわゆる "49JAN" ではないため、単にコード生成されたという感じでしょうかね。まあチェックデジットは合っているのでとりあえずのチェック確認はできそうなのかな。
"ean13" => $faker->ean13,
↓
9773096538962
テキスト
Text.php みると、宮沢賢治の「銀河鉄道の夜」から漢字を作成しているようです。いいですね~~。
"realText" => $faker->realText($faker->numberBetween(10,20)),
↓
かるよ」「そうにうつっ。
数値
ランダムな数値、範囲が指定できるので事足りますね。
"randomNumber" =>$faker->randomNumber(2), ※2桁のランダム値
"betweenNumber" =>$faker->numberBetween(10,100), ※10~100のランダム値
住所
当然だけど郵便番号と住所が連動してないです。
まあでもこれも使えるかな。
"address" => $faker->address,
↓
9378537 群馬県山田市東区加納町青田9-4-2
使えるか使えないか
「使えます」ねこれ。自分で作成しようと思うとこうシンプルな感じでは作れませんので、いいですね。当たり前ですが、データの整合性はとられていないのでそこらは、faker で作成された後に自分でごにょごにょすればいいと思います。何だかんだ言ってますが十分使えますよw
あと testunit の実行にもこれいですね。
どうしてもテストケース作らせると境界値とか文字列数とかとか、やらない人多いし。
参考にさせて頂いたサイト様
Faker@PHPでダミーデータを作る
ダミーデータをhogehogeしないでFakerで生成する
fakerでフェイクなデータを作成してみる
大量のダミーデータのCSVを作るにはFakerが便利
Discussion