リアルなテストデータを簡単に作ってモック化までできるサービス「Mockaroo」を紹介する❗️データベースのテストデータを作ったり,フロントエンドを実装するときに必要になるバックエンド API をモック化できる.テストデータに test
や hoge
という文字列を使ってしまうと本番環境相当の確認がしにくく,できる限りリアルなテストデータを作りたい場面は多くあると思う💡
www.mockaroo.com
Mockaroo の特徴としては,サポートしてるタイプがなんと現時点で「13 カテゴリ(169 種類)」もある.以下にカテゴリごとにタイプ数をまとめる.What's new を見ると,定期的にタイプは増えている.
- Advanced(10 種類)
- Basic(29 種類)
- Car(1 種類)
- Commerce(13 種類)
- Construction(6 種類)
- Crypto(7 種類)
- Health(17 種類)
- IT(21 種類)
- Location(14 種類)
- Nature(5 種類)
- Personal(30 種類)
- Products(6 種類)
- Travel(10 種類)
さらに Mockaroo では「11 種類」のフォーマット(形式)でテストデータをダウンロードできる.以下にまとめる.注意点としては,データ件数は「最大 1000 件」となるところ.
- CSV
- JSON
- Tab-Delimited
- SQL
- Cassandra CQL
- Firebase
- InfluxDB
- Custom
- Excel
- XML
- DBUnit XML
お試し① SQL フォーマット
以下のタイプを選んで users
テーブルに使えそうなテストデータを作ってみた.
- Row Number
- Username
- Email Address
- Avatar (Size: 50x50)
- City
- Country
- Datetime (unix timestamp)
以下の条件で「SQL フォーマット」でダウンロードした.
- Rows: 1000
- Format: SQL
- Table Name: users
insert into users (id, username, email, avatar, country, created_at) values (1, 'mchedgey0', 'tmonkeman0@phoca.cz', 'https://robohash.org/dictaautmollitia.png?size=50x50&set=set1', 'Bangladesh', '1650159167000');
insert into users (id, username, email, avatar, country, created_at) values (2, 'spigram1', 'sgulleford1@live.com', 'https://robohash.org/utillosaepe.png?size=50x50&set=set1', 'Bangladesh', '1638834568000');
insert into users (id, username, email, avatar, country, created_at) values (3, 'bgranville2', 'hlarroway2@ezinearticles.com', 'https://robohash.org/nihiloccaecatidoloribus.png?size=50x50&set=set1', 'Palestinian Territory', '1620444328000');
insert into users (id, username, email, avatar, country, created_at) values (4, 'dblezard3', 'emcallaster3@shinystat.com', 'https://robohash.org/quiquiasunt.png?size=50x50&set=set1', 'Germany', '1598947981000');
insert into users (id, username, email, avatar, country, created_at) values (5, 'ehebbs4', 'lmaxworthy4@jalbum.net', 'https://robohash.org/rerumesteum.png?size=50x50&set=set1', 'United States', '1619682314000');
そして SQL を MySQL にロードして,クエリを実行すると,期待通りにデータを取得できた.便利❗️
mysql> SELECT COUNT(*) FROM users;
+
| COUNT(*) |
+
| 1000 |
+
1 row in set (0.01 sec)
mysql> SELECT * FROM users LIMIT 5;
+
| id | username | email | avatar | country | created_at |
+
| 1 | mchedgey0 | tmonkeman0@phoca.cz | https://robohash.org/dictaautmollitia.png?size=50x50&set=set1 | Bangladesh | 1650159167000 |
| 2 | spigram1 | sgulleford1@live.com | https://robohash.org/utillosaepe.png?size=50x50&set=set1 | Bangladesh | 1638834568000 |
| 3 | bgranville2 | hlarroway2@ezinearticles.com | https://robohash.org/nihiloccaecatidoloribus.png?size=50x50&set=set1 | Palestinian Territory | 1620444328000 |
| 4 | dblezard3 | emcallaster3@shinystat.com | https://robohash.org/quiquiasunt.png?size=50x50&set=set1 | Germany | 1598947981000 |
| 5 | ehebbs4 | lmaxworthy4@jalbum.net | https://robohash.org/rerumesteum.png?size=50x50&set=set1 | United States | 1619682314000 |
+
5 rows in set (0.00 sec)
mysql> SELECT country, COUNT(*) AS COUNT FROM users GROUP BY country HAVING COUNT > 50 ORDER BY COUNT DESC;
+
| country | COUNT |
+
| China | 203 |
| Indonesia | 105 |
| Philippines | 51 |
| Russia | 51 |
+
4 rows in set (0.00 sec)
お試し② CSV フォーマット
今度は他のタイプ(気になったもの)を適当に選んでテストデータを作ってみた.
- ULID
- Color
- Latitude
- Longitude
- File Name
- Company Name
- Credit Card Type
- Credit Card #
以下の条件で「CSV フォーマット」でダウンロードした.
- Rows: 1000
- Format: CSV
- Include: header
$ head -n 10 MOCK_DATA.csv
id,color,latitude,longitude,company_name,credit_card_type,credit_card_number
01GNHJCSXXATB5CJF9XME7KSF5,Violet,46.6473105,0.813275,Twitterworks,jcb,3529226789542666
01GNHJCSY1E70GJR7PEQ4WN1NA,Puce,-14.658228,49.6452092,Dabshots,jcb,3553539000204067
01GNHJCSY4YNVQ2G6GMHFJ6AP3,Turquoise,43.8051322,43.7759042,Livetube,jcb,3548207679524102
01GNHJCSY7G822Z6717N0MMYSR,Violet,23.0029267,105.2545888,Livetube,laser,67093426547314751
01GNHJCSYAW8P55K0X8B3EWB38,Pink,-9.2623446,-77.6929792,Eazzy,jcb,3544135599033025
01GNHJCSYDJB6BV6088EGGGCP4,Teal,45.72727,112.35563,Pixonyx,jcb,3572010371487902
01GNHJCSYGNSN0A529BHQ1FYYS,Purple,6.9782137,79.9115522,Trudoo,maestro,50203305431642795
01GNHJCSYKDXPGXENM5DDWFASG,Crimson,-7.3863388,108.1888233,Flashspan,jcb,3564637074986317
01GNHJCSYPF117F0YT2SFA0DMS,Red,29.3728871,113.1149933,Skajo,jcb,3528564263246532
そして CSV を Amazon S3 に置いて,Amazon DynamoDB にロードしてみた.
aws.amazon.com
期待通りに Amazon DynamoDB(テーブル/グローバルセカンダリインデックス)からデータを取得できた.便利❗️
$ aws ddb select mockaroo \
--no-consistent-read \
--max-items 5
Count: 1000
Items:
- color: Fuscia
company_name: Twinte
credit_card_number: '6706053594972617'
credit_card_type: laser
id: 01GNHJCWVBM133QADNWR1YP48K
latitude: '62.107429'
longitude: '129.517113'
- color: Green
company_name: Skimia
credit_card_number: '3565626637296552'
credit_card_type: jcb
id: 01GNHJCSYZYZPRE1AJVWVHDR56
latitude: '36.3573462'
longitude: '25.4459308'
- color: Indigo
company_name: Minyx
credit_card_number: '3542499593981213'
credit_card_type: jcb
id: 01GNHJCWN9RZ3DFFDDCAWBEK4Y
latitude: '25.200027'
longitude: '119.482942'
- color: Fuscia
company_name: Yombu
credit_card_number: '374283946958998'
credit_card_type: americanexpress
id: 01GNHJCV5QKDH1QMNP9SGHQ7MB
latitude: '44.5241667'
longitude: '129.5688889'
- color: Aquamarine
company_name: Devbug
credit_card_number: '675936707426408066'
credit_card_type: maestro
id: 01GNHJCVBQQYTP4YHRM27N1XQH
latitude: '32.790614'
longitude: '35.326882'
NextToken: eyJFeGNsdXNpdmVTdGFydEtleSI6IG51bGwsICJib3RvX3RydW5jYXRlX2Ftb3VudCI6IDV9
ScannedCount: 1000
$ aws ddb select mockaroo \
--index-name credit_card_type_gsi \
--key-condition 'credit_card_type = "visa"' \
--no-consistent-read \
--max-items 5
Count: 22
Items:
- color: Yellow
company_name: Skajo
credit_card_number: '4017959596578'
credit_card_type: visa
id: 01GNHJCWSWARJ3JW85VNKA8N37
latitude: '39.930136'
longitude: '119.576091'
- color: Red
company_name: Fivechat
credit_card_number: '4041590127551'
credit_card_type: visa
id: 01GNHJCTMH0V8CYAFKYS9JSKQ3
latitude: '-7.0386444'
longitude: '107.9692467'
- color: Khaki
company_name: Mymm
credit_card_number: '4041597904940630'
credit_card_type: visa
id: 01GNHJCWTV7NG6EMYG6EDPK57B
latitude: '29.709214'
longitude: '107.606105'
- color: Green
company_name: Kazu
credit_card_number: '4017952066698478'
credit_card_type: visa
id: 01GNHJCTT2SZGY195EN2S52JTG
latitude: '32.187849'
longitude: '119.425836'
- color: Pink
company_name: Leexo
credit_card_number: '4260700145435501'
credit_card_type: visa
id: 01GNHJCX9DSZYM826T0JBAQRY7
latitude: '-9.5541709'
longitude: '119.0285355'
NextToken: eyJFeGNsdXNpdmVTdGFydEtleSI6IG51bGwsICJib3RvX3RydW5jYXRlX2Ftb3VudCI6IDV9
ScannedCount: 22
その他
Mockaroo には他にも機能があって,気になった機能を紹介する❗️
blank
フィールドごとにブランク率 (%) を指定できる.意図的に「欠損値のあるテストデータ」を作れたりする.
Mockaroo Formula Syntax を使うと,データを変換できる.例えば,数値計算をしたり,大文字や小文字に変換したり,Base64 エンコードもできる.また if/elsif/else
を使って条件付きで変換もできる.
this + 1
upper(this)
lower(this)
base64(this)
Mockaroo APIs
Mockaroo APIs を使うと,Mockaroo の設定を API で操作できる.操作するためには API Key を取得しておく必要がある.
- GET /api/types
- POST /api/datasets/:name
- DELETE /api/datasets/:name
- POST /api/generate(.format)
API 仕様に関しては以下に詳しく載っている.
Mockaroo Mock API
Mockaroo Mock API を使うと,Mockaroo にホスティングされたモック API からテストデータを取得できる.フロントエンドを実装するときに必要になるバックエンド API をモック化できたりする❗️手順としては,作った「スキーマ」を登録して,それに対応した Mock API を簡単に作れる.それに対応した Mock API を作る.
以下の例では,users
スキーマからサンプルデータを5件取得している.これは便利〜👏
$ curl -s -H 'X-API-Key: xxxxxxxx' https://my.api.mockaroo.com/users.json | jq .
[
{
"id": 1,
"username": "rcranfield0",
"email": "tdavidovsky0@printfriendly.com",
"avatar": "https://robohash.org/utetnon.png?size=50x50&set=set1",
"country": "Somalia",
"created_at": "1602125107000"
},
{
"id": 2,
"username": "hjaggs1",
"email": "amilington1@alibaba.com",
"avatar": "https://robohash.org/nihiladipiscireiciendis.png?size=50x50&set=set1",
"country": "Portugal",
"created_at": "1584420589000"
},
{
"id": 3,
"username": "cscimoni2",
"email": "xpilley2@java.com",
"avatar": "https://robohash.org/errortemporibusdolorum.png?size=50x50&set=set1",
"country": "Greece",
"created_at": "1648988379000"
},
{
"id": 4,
"username": "kelletson3",
"email": "nzecchii3@mlb.com",
"avatar": "https://robohash.org/eligendietid.png?size=50x50&set=set1",
"country": "Russia",
"created_at": "1638996409000"
},
{
"id": 5,
"username": "bambage4",
"email": "jkendal4@cisco.com",
"avatar": "https://robohash.org/similiqueofficiisquisquam.png?size=50x50&set=set1",
"country": "Russia",
"created_at": "1630924325000"
}
]
まとめ
仕事でインストラクター(技術講師)をしているので,デモやプロトタイプを実装する機会が多くある.そのときにできる限りリアルなテストデータを使いたく,普段は Faker を使って,テストデータを流し込んでいる.Faker 以外に方法を探していたら Mockaroo を発見して,試してみたら良くて記事にまとめておくことにした❗️ Mockaroo は覚えておこう〜
www.mockaroo.com