Pythonメモ : mimesisでテストデータを生成する
mimesis
mimesis
というというPythonライブラリを使用するとテストデータを簡単に生成することができるので試してみる。
特徴としては、
- fakerなどの他のライブラリに比べて高速
- 様々なデータを生成可能
- Python標準ライブラリ以外を必要としないのでシンプル
とのこと。
ここにfaker
と速度を比較するコードがあったので試したところ確かに高速だった(コードのfrom elizabeth
はfrom mimesis
に変更。名前が変わったのだろうか)。
$ python comp.py [0.87593889s] generate_elizabeth(250000) -> 'Generated 250000' [130.84236121s] generate_faker(250000) -> 'Generated 250000'
インストール
pipでインストールできるので下記コマンドを実行。
$ pip install mimesis
使い方
基本的な使い方は以下の通り。
>>> import mimesis >>> person = mimesis.Personal(locale='en') >>> person.full_name(gender='male') 'Linwood Ellis' >>> person.occupation() 'Project Leader'
ロケールを指定する場合は以下のようにする。利用可能なロケール一覧はここの詳細に書いてある。もちろん日本語も使用可能。
>>> from mimesis import Personal >>> de = Personal('de') >>> ja = Personal('ja') >>> de.full_name() 'Jacqueline Bauer' >>> ja.full_name() 'かおり 遠藤'
Generic
を使用すれば全てのプロバイダ(データ種別)にアクセス可能。
>>> import mimesis >>> g = mimesis.Generic('ja') >>> g.datetime.month() '6月' >>> g.food.fruit() 'イナゴマメ'
作成可能なデータ種別
作成可能なデータ種別は下記表を参照。
No | Provider | Description |
1 | Address | Address data (street name, street suffix etc.) |
2 | Business | Business data (company, company_type, copyright etc.) |
3 | Code | Codes (ISBN, EAN, IMEI etc.). |
4 | ClothingSizes | Clothing sizes (international sizes, european etc.) |
5 | Datetime | Datetime (day_of_week, month, year etc.) |
6 | Development | Data for developers (version, programming language etc.) |
7 | File | File data (extension etc.) |
8 | Food | Information on food (vegetables, fruits, measurements etc.) |
9 | Games | Games data (game, score, pegi_rating etc.) |
10 | Personal | Personal data (name, surname, age, email etc.) |
11 | Text | Text data (sentence, title etc.) |
12 | Transport | Dummy data about transport (truck model, car etc.) |
13 | Science | Scientific data (scientist, math_formula etc.) |
14 | Structured | Structured data (html, css etc.) |
15 | Internet | Internet data (facebook, twitter etc.) |
16 | Hardware | The data about the hardware (resolution, cpu, graphics etc.) |
17 | Numbers | Numerical data (floats, primes, digit etc.) |
18 | Path | Provides methods and property for generate paths. |
19 | UnitSytem | Provides names of unit systems in international formal |
20 | Generic | All at once |
21 | Cryptographic | Cryptographic data |
実際にどのようなテストデータがあるかは下記リンクで確認できる。
共通:
mimesis/mimesis/data/int at master · lk-geimfari/mimesis · GitHub
日本語:
mimesis/mimesis/data/ja at master · lk-geimfari/mimesis · GitHub
JSONスキーマを指定して出力
JSONスキーマを指定して出力することも可能。
>>> from mimesis.schema import Schema >>> schema = Schema('ja') >>> schema.load(schema={ ... "id": "cryptographic.uuid", ... "name": "text.word", ... "version": "development.version", ... "owner": { ... "email": "personal.email", ... "token": "cryptographic.token", ... "creator": "personal.full_name" ... } ... }).create(iterations=2) [{'owner': {'email': 'kandra-687@outlook.com', 'token': '9ebc404a3a4465b69ff6b30a6c31b8b3cffc38f37f6c40f0e19555034575e126', 'creator': 'ひろみ 平井'}, 'name': '追い討 ちを掛ける', 'version': '8.11.5', 'id': 'f6b76a45-f7a8-c664-bae6-6a575c04bc58'}, {'owner': {'email': 'bernardina1857@yandex.com', 'token': '3193d5d5f74be19181f9b975aa9ee679b9785d778f6407a7f3245df37efe6d2a', 'creator': 'みどり 下地'}, 'name': '精いっぱい', 'version': '4.10.1', 'id': '95f71948-9ab1-f3c3-5a39-2cc718b1b19b'}] >>> # あるいはschema.jsonファイルから読み込み >>> schema.load(path='schema.json').create(iterations=2) [{'owner': {'creator': 'ももこ 猪股', 'token': '06c4409d636866c0c85024812c80ac6b133a56dc4b9c43a2991a4daa86081bbd', 'email': 'mardell-1550@live.com'}, 'name': '啄ばむ', 'version': '2.9.1', 'id': '692d0578-293f-e0df-e39a-63deb8d76fdb'}, {'owner': {'creator': '麻乃 末吉', 'token': '296c0dd9d6c71ade5419705bf085d0a3d25bed5dd8419734f778bd987d7af23e', 'email': 'madalyn_1219@outlook.com'}, 'name': 'のうみそをしぼる', 'version': '1.7.3', 'id': 'a6019f9d-cf9c-7434-8de1-4d92e5fcc379'}]
その他、READMEにはWebアプリケーションフレームワークFlaskで使用する例が書いてある。