json-generatorでテストデータを作成してみる

こんにちは!cocone connectでクライアントプログラマーを担当している I です。
ソフトウェア開発において、実装したコードが想定通りに動作しているか確認したい時、テストデータが必要なケースってあったりしますよね。
検証に必要なデータを一から自分で作成する方法もありますが、データ生成ツールなどを使用してテストデータを自動生成できれば、作業時間を減らすこともできて便利です。
そこで今回は、ソフトウェア開発において汎用性の高いjsonデータを自動で生成するTipsを紹介したいと思います。

 

本記事で使用するテストデータ自動生成ツールは、”JSON Generator” です。
まずはhttps://json-generator.com/のURLを開いて頂くと、下記のようなコードが直接編集可能なエディター上に表示されるかと思います。

[
  '{{repeat(5, 7)}}',
  {
    _id: '{{objectId()}}',
    index: '{{index()}}',
    guid: '{{guid()}}',
    isActive: '{{bool()}}',
    balance: '{{floating(1000, 4000, 2, "$0,0.00")}}',
    picture: 'http://placehold.it/32x32',
    age: '{{integer(20, 40)}}',
    eyeColor: '{{random("blue", "brown", "green")}}',
    name: '{{firstName()}} {{surname()}}',
    gender: '{{gender()}}',
    company: '{{company().toUpperCase()}}',
    email: '{{email()}}',
    phone: '+1 {{phone()}}',
    address: '{{integer(100, 999)}} {{street()}}, {{city()}}, {{state()}}, {{integer(100, 10000)}}',
    about: '{{lorem(1, "paragraphs")}}',
    registered: '{{date(new Date(2001, 0, 1), new Date(), "YYYY-MM-ddThh:mm:ss Z")}}',
    latitude: '{{floating(-90.000001, 90)}}',
    longitude: '{{floating(-180.000001, 180)}}',
    tags: [
      '{{repeat(7)}}',
      '{{lorem(1, "words")}}'
    ],
    friends: [
      '{{repeat(3)}}',
      {
        id: '{{index()}}',
        name: '{{firstName()}} {{surname()}}'
      }
    ],
    greeting: function (tags) {
      return 'Hello, ' + this.name + '! You have ' + tags.integer(1, 10) + ' unread messages.';
    },
    favoriteFruit: function (tags) {
      var fruits = ['apple', 'banana', 'strawberry'];
      return fruits[tags.integer(0, fruits.length - 1)];
    }
  }
]

上記のコードで既にデータを生成する準備は整っています。
画面上部中央にある「Generate」ボタンをクリックで、画面右側にテストデータが生成されると思います。テストデータをチューニングする場合は上記のコードを修正して「Generate」クリックという流れです。
基本的な使い方は至ってシンプルで非常にわかりやすいですね。

 

では早速テストデータを色々チューニングしていきたいと思います。
一旦不要なデータを除外し、indexの要素だけ残した雛形を作成します。
後は必要なデータを必要になった時に順次追加、という方針で進めます。

[
  '{{repeat(5, 7)}}',
  {
    "index": '{{index()}}'
  }
]

これでindex要素だけが表示されます。 エラーが発生した場合は、原因となっている行番号の隣にアイコンを表示して教えてくれます。
実行結果は以下の通りです。(今回のデータ数は5でしたが、実際は5~7がランダムで表示されます)

[
    {"index": 0},
    {"index": 1},
    {"index": 2},
    {"index": 3},
    {"index": 4},
    {"index": 5}
]

データ数は「{repeat(5, 7)}」で指定できます。
{repeat(最小データ数, 最大データ数)}

 

では次に、ランダムデータが入る要素「果物」を追加します。 ランダムデータの設定はrandom()関数の引数で設定できます。

[
  '{{repeat(5, 7)}}',
  {
     "index": '{{index()}}',
    "果物": '{{random("林檎", "梨", "蜜柑","葡萄","桃")}}'
  }
]

実行結果

[
    {"index": 0,"果物": "蜜柑"},
    {"index": 1,"果物": "林檎"},
    {"index": 2,"果物": "桃"},
    {"index": 3,"果物": "林檎"},
    {"index": 4,"果物": "梨"}
]

ランダムデータは以下のように「+」演算子を繋げることで、組み合わせて使用することもできます。
「果物」要素を「果物の評価」に変更します。

[
  '{{repeat(5, 7)}}',
  {
     "index": '{{index()}}',
    "果物の評価": '{{random("林檎", "梨", "蜜柑","葡萄","桃") + "は" + random("美味し", "すっぱ", "甘","苦","不味") + "かった。"}}'
  }
]

実行結果

[
    {"index": 0,"果物の評価": "蜜柑は甘かった。"},
    {"index": 1,"果物の評価": "桃はすっぱかった。"},
    {"index": 2,"果物の評価": "葡萄は不味かった。"},
    {"index": 3,"果物の評価": "林檎は美味しかった。"},
    {"index": 4,"果物の評価": "葡萄はすっぱかった。"},
    {"index": 5,"果物の評価": "梨は美味しかった。"}
]

こちらの方法で殆どのランダムなテストデータの設定はカバーできそうですね。

 

では最後に、各要素の値を使用したテストデータ設定方法をご紹介したいと思います。
要素「姓」「名」をランダムデータとして追加し、
更に「姓」「名」要素を使用した「自己紹介」要素を追加します。

要素の値を他の要素のデータに含める場合は、function (tags){}関数の中で「this.要素名」とすることで設定できます。

[
  '{{repeat(5, 7)}}',
  {
     "index": '{{index()}}',
    "果物の評価": '{{random("林檎", "梨", "蜜柑","葡萄","桃") + "は" + random("美味し", "すっぱ", "甘","苦","不味") + "かった。"}}',
    "姓": '{{random("佐藤", "鈴木", "高橋","田中","伊藤")}}',
    "名": '{{random("太郎", "小太郎", "一郎","二郎","三郎")}}',
    "自己紹介": function (tags) {
      return 'こんにちは!。 私は「' + this.姓 +this.名 + "」です!。";
    }
  }
]

実行結果

[
  {
    "index": 0,
    "果物の評価": "葡萄は甘かった。",
    "姓": "高橋",
    "名": "二郎",
    "自己紹介": "こんにちは!。 私は「高橋二郎」です!。"
  },
  {
    "index": 1,
    "果物の評価": "桃は美味しかった。",
    "姓": "佐藤",
    "名": "一郎",
    "自己紹介": "こんにちは!。 私は「佐藤一郎」です!。"
  },
  {
    "index": 2,
    "果物の評価": "梨はすっぱかった。",
    "姓": "佐藤",
    "名": "小太郎",
    "自己紹介": "こんにちは!。 私は「佐藤小太郎」です!。"
  },
  {
    "index": 3,
    "果物の評価": "蜜柑は不味かった。",
    "姓": "佐藤",
    "名": "二郎",
    "自己紹介": "こんにちは!。 私は「佐藤二郎」です!。"
  },
  {
    "index": 4,
    "果物の評価": "林檎は甘かった。",
    "姓": "伊藤",
    "名": "一郎",
    "自己紹介": "こんにちは!。 私は「伊藤一郎」です!。"
  }
]

「this.姓」「this.名」こんな書き方で実行できるのか?と思いますが、実行できる上に正常に表示されてしまいます(だが構文チェックではエラーが出ている・・・)
気になる方は以下のように要素名をfirstName、lastNameに修正するなどして対応しましょう。

[
  '{{repeat(5, 7)}}',
  {
     "index": '{{index()}}',
    "果物の評価": '{{random("林檎", "梨", "蜜柑","葡萄","桃") + "は" + random("美味し", "すっぱ", "甘","苦","不味") + "かった。"}}',
    lastName: '{{random("佐藤", "鈴木", "高橋","田中","伊藤")}}',
    firstName: '{{random("太郎", "小太郎", "一郎","二郎","三郎")}}',
    "自己紹介": function (tags) {
      return 'こんにちは!。 私は「' + this.lastName +this.firstName + "」です!。";
    }
  }
]

Tipsのご紹介は以上となります。
「開発期間の終了間際になって急遽大量のテストデータが必要になった!でも今から作るのも大変だし・・・」
という時に、こういったツールを知っていると助かりますよね。

 


 

cocone connectでは一緒に働く仲間を募集中です。

ご興味のある方は、こちらのリンクからぜひご応募ください。

 

cocone connect株式会社 採用情報

https://recruit.jobcan.jp/coconeconnect

 

cocone connect株式会社 公式サイト

https://connect.cocone.co.jp/

 

また、ココネでも一緒に働く仲間を募集中です。

ご興味のある方は、ぜひこちらの採用特設サイトをご覧ください。

https://www.cocone.co.jp/recruit/contents/

Category

Tag

%d人のブロガーが「いいね」をつけました。