もた日記

くだらないことを真面目にやる

Pythonメモ : fakerでテストデータを生成する

faker


github.com

fakerというPythonパッケージを使用するとテストデータを簡単に生成することができる。PHP Faker, Perl Faker, Ruby Fakerにインスパイアされたとのこと。


f:id:wonder-wall:20170724181123p:plain

インストール


pipでインストールできるので下記コマンドを実行。

$ pip install faker
$ faker --help
usage: faker [-h] [--version] [-o output] [-l LOCALE] [-r REPEAT] [-s SEP]
             [-i [INCLUDE [INCLUDE ...]]]
             [fake] [fake argument [fake argument ...]]

faker version 0.7.18

positional arguments:
  fake                  name of the fake to generate output for (e.g. profile)
  fake argument         optional arguments to pass to the fake (e.g. the
                        profile fake takes an optional list of comma separated
                        field names as the first argument)

optional arguments:
  -h, --help            show this help message and exit
  --version             show program's version number and exit
  -o output             redirect output to a file
  -l LOCALE, --lang LOCALE
                        specify the language for a localized provider (e.g.
                        de_DE)
  -r REPEAT, --repeat REPEAT
                        generate the specified number of outputs
  -s SEP, --sep SEP     use the specified separator after each output
  -i [INCLUDE [INCLUDE ...]], --include [INCLUDE [INCLUDE ...]]
                        list of additional custom providers to user, given as
                        the import path of the module containing your Provider
                        class (not the provider class itself)

supported locales:

  bg_BG, bs_BA, cs_CZ, de_AT, de_DE, dk_DK, el_GR, en, en_AU, en_CA, en_GB, en_TH, en_US, es, es_ES, es_MX, fa_IR, fi_FI, fr_CH, fr_FR, hi_IN, hr_HR, hu_HU, it_IT, ja_JP, ko_KR, la, lt_LT, lv_LV, ne_NP, nl_BE, nl_NL, no_NO, pl_PL, pt_BR, pt_PT, ru_RU, sk_SK, sl_SI, sv_SE, th_TH, tr_TR, uk_UA, zh_CN, zh_TW


使い方:コマンド


インストールが成功していればfakerコマンドが使えるようになっている。
基本的にはfakerの後に生成したいデータを指定する。

$ faker address
福岡県利島村白金台7丁目8番5号 アーバン長間949

-lでロケールを指定することも可能。

$ faker -l de_DE address
Rainer-Weinhage-Ring 9/3
88040 Peine

データによっては使用する属性だけを指定することも可能。

$ faker profile
{'name': '木村 知実', 'company': '有限会社 井高', 'ssn': '074-74-2984', 'website': ['https://miyake.jp/'], 'birthdate': '2017-02-01', 'current_location': (Decimal('23.967602'), Decimal('-162.041080')), 'residence': '大阪府横浜市戸塚区湯宮25丁目17番1号 パレス津久戸町909', 'job': 'Investment analyst', 'mail': '[email protected]', 'sex': 'F', 'address': '静岡県江東区藤金10丁目27番14号 太田ヶ谷クレスト103', 'username': 'kimuratakuma', 'blood_group': 'A-'}
$ faker profile ssn,birthdate
{'birthdate': '2002-07-30', 'ssn': '317-80-6184'}

複数生成する場合は-rで数値を指定する。-sはセパレータを指定するオプション。

$ faker -r=3 -s=";" name
吉田 涼平;
高橋 真綾;
村山 聡太郎;



生成可能なデータの一覧は下記リンクで確認できる。
Language ja_JP — Faker 0.7.18 documentation

または下記コマンドを実行する。

$ python -m faker

### faker.providers.address

        fake.random_sample(elements=('a', 'b', 'c'), length=None)                                   # ['c']
        fake.zipcode()                                                                              # 133-3925
        fake.country_code()                                                                         # NZ
        fake.address()                                                                              # 岐阜県あきる野市三ノ輪19丁目5番5号 パレス外国府間417
        fake.street_suffix()                                                                        # Street

 …省略…


使い方:コード


インポートと初期化は下記コードを参照。

from faker import Factory
fake = Factory.create('ja_JP')

# または
from faker import Faker
fake = Faker('ja_JP')

後はfake.name()のように生成したいデータを指定すればよい。

f:id:wonder-wall:20170724181600p:plain


追記:mimesisを使う方法もある。
wonderwall.hatenablog.com