Django

Djangoでfixtureを使う

More than 1 year has passed since last update.


Fixtureの定義

Djangoは、Fixtureを各アプリケーション内のfixturesディレクトリから探します。

設定ファイルのFIXTURE_DIRSに追加のディレクトリを定義することもできますが、何か事情がない限り使うことはないでしょう。

Fixtureの形式としては、xml, yaml, jsonの3種類が使用できます。

以下にjsonの例をあげますが、xml, yamlでもそれぞれの形式で同じ表現を記述すれば問題ありません。


fixture.json

[

{
"model": "app.hoge",
"pk": 1,
"fields": {
"foo": 1,
"bar": 2
}
}
]


Fixtureの利用


Case1: 初期データ

マスタデータなど、初期データを投入したい場合は多々あると思います。

initial_data.[xml/yml/json]という名前のファイルをFixtureディレクトリ内に置いておくと、

python manage.py migrateを実行するたびにロードされます。

このデータは毎回ロードされるため、変更するべきではありません。

また、python manage.py loaddata <fixturename>を実行することで、明示的にロードすることもできます。

は、前述のディレクトリに加えて、通常のパスからも探索されます。


Case2: テスト用データ

Fixtureはテスト時にも活躍します。

各テストのクラスに、使用するFixture名を列挙したfixturesという配列を用意しておくと、setUp()で自動的にデータがロードされます。

Fixture名の拡張子は省略することができます。その場合は、[xml/yml/json]のすべてのファイルが探索されます。もちろん、拡張子を指定することもできます。

class HogeTest(TestCase):

fixtures = ['fixture1', 'fixtrue2.yml']

def setUp(self):
# your setup code here

def test_hoge(self):
# your test code here