3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

TestData 作成ライブラリ Mimesisの紹介

Posted at

はじめに

大量の(それっぽい)企業データがあったら良いなぁという状況があり、Mimesisというライブラリが便利だったので紹介します

対象

フロントエンジニア、テストデータを作成したい人、Pythonが好きな人
python3.6以上がインストールされていること

ゴール

インストール〜簡易的なJSONテストデータを出力できるまで

Mimesisとは

テストデータ作成ライブラリ
Fakerが有名のようだが、法人データ作成がないと思われた
Mimesisでは法人データが作成でき、かつちょっと変わったHomePageだとか
IPアドレスのようなデータも作成できるようなので、このライブラリを使用してデータを作成してみました
Mimesis公式

インストール

Mimesisのインストールはpipのみ

$ pip install Mimesis

pipってとても優秀なやつだと、毎回思います(コピペ)

Getting Started

簡単な使い方

main.py
import mimesis

# テストデータを日本語に設定
g = mimesis.Generic('ja')

# 会社名と法人タイプ 
print("{0} {1}".format(g.business.company_type(), g.business.company()))
# homePage
print(g.internet.home_page())

起動&閲覧

ターミナルで

$ python main.py 
株式会社 デンカ生研
https://bantay.moscow

なんとなくありそうな会社名じゃないでしょうか

JSONデータとして出力

せっかくなのでJSONのテストデータを作成してみます
(SwaggerにしろImportするにしろそのほうが便利なので)

ソース

先程のソースを

main.py
import json
from datetime import date, datetime
import mimesis

# 日付と数値のフォーマットを揃える(JSON出力時にはこれを用意しておくと便利)
def format_default(obj):
    if isinstance(obj, datetime) or isinstance(obj, date):
        return obj.isoformat()
    if isinstance(obj, decimal.Decimal):
        #小数部分が無ければIntで返す
        if float(obj).is_integer():
            return int(obj)
        else:
            return float(obj)
    raise TypeError

# 複数件セットできるようにDictを準備
data = []
g = mimesis.Generic('ja')

# 複数件生成してDictにセット(必要件数分ここを変更
for idx, x in enumerate(range(0, 2)):
    ins_data = {}
    ins_data['company_id'] = idx  # Id
    ins_data['company_name'] = "株式会社 {0}".format(g.business.company())  # 会社名
    ins_data['foundation_date'] = g.datetime.formatted_date("%Y/%m")  # 設立年月日
    ins_data['postal_code'] = g.address.postal_code()  # 郵便番号
    ins_data['state'] = g.address.state()  # 都道府県
    ins_data['city'] = g.address.city()  # 〜市
    ins_data['street'] = g.address.street_name()  # 番地
    ins_data['home_page'] = g.internet.home_page()  # homepage
    data.append(ins_data)  # Dictに追加

# DictをJSONとしていい感じに整形して出力
print(json.dumps(data, default=format_default, indent=2, ensure_ascii=False))
$ python main.py 
[
  {
    "company_id": 0,
    "company_name": "株式会社 三菱UFJフィナンシャルグループ",
    "foundation_date": "2003/08",
    "postal_code": "559-9285",
    "state": "秋田県",
    "city": "松山市",
    "street": "目黒",
    "home_page": "https://trachytes.frl"
  },
  {
    "company_id": 1,
    "company_name": "株式会社 大丸",
    "foundation_date": "2004/02",
    "postal_code": "564-0918",
    "state": "福島県",
    "city": "太田市",
    "street": "要町",
    "home_page": "https://arvin.tui"
  }
]

どうでしょう、見てるだけでも楽しい感じがしますね

あとはこんな感じで

$ ptyhon main.py > testData.json

テストデータ(JSON)を作成して、SwaggerやFrontのMock用データに利用しています

おまけ

最後に公式に書いてあることですがどんなデータを作成できるか紹介しておきます
(他にも使い所がわからないような面白いものもあるので

Random

idやamountなど

Address

countryやcityなど

Business

companyやcompany_typeなど

Datetime

daysやhoursなど

Food

drinkやvegetableなど (これ面白いですよね

Person

first_nameやemail, blood_typeなど

Text

alphabetやanswerなど

Development

osやversionなど

File

file_nameやmime_typeなど

Hardware

cpuやscreen_sizeなど

Internet

home_pageやhttp_method, ip_v4など

Numbers

complex_numberやintegers(start=0, end=10, n=10)など

Path

homeやrootなど

Path

homeやrootなど

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?