私はDjango(1.8)+ DRF + uwsgi + nginxを使用しており、私が作った単体テストAPIを試しています。テストを実行するには、dbにデータを入れる(たとえば、ユーザーを作成する)必要があり、すべてのテストでこのデータを使用する必要があります。だから私は、次の2つの方法を試してみた:djangoのビルトインテストツール用のdbデータの設定
はTestCase.setUpで直接作成します。
class ApiTests(TestCase):
def setUp(self):
Account.objects.create_user(username='username', password='password')
または備品を使用します。
class ApiTests(TestCase):
fixtures = ['dump.json']
次の私は上司を通じて私のプロジェクトを実行します。
system("service supervisord startall")
すべての準備ができたら、私はテストのために私のAPIにアクセスしてログインします:
login_data = {"username": "username", "password": "password"}
rslt = client.post(HOST_NAME + '/login/', data=login_data)
...しかし、ユーザーが何らかの形でdbに存在しないため、私は認証できません!
Djangoテストのドキュメントで見つけたように、TestCaseはdbにデータを書き込むのではなく、テスト後にロールバックしてトランザクションに格納します。私が見ることができるように、このデータはテスト側(User.objects.all()を使ってユーザが作成されていることを示している)で取得できますが、nginx-server側(User.objects.allこの側に0項目を示しています)。
- どういうわけか、DBにデータをコミットするのTestCaseを強制:私はいくつかのオプションを見ることができます
ATM。
- 他の方法でデータを入力します(ただし、?)。
- 異なるテストライブラリを使用してください。
助けてください。
なぜテストのコンテキスト外でテストデータにアクセスしたいのですか? –
また、 'test-side'と' nginx-server-side'の意味を理解していませんか? –
@ShangWang、setUp()中にテストを実行するために、私は2つのことを行います.dbにデータを入力し、私のWebサーバーのために私のロールアウトスクリプトを実行します。実際には、私は2つのPythonプログラムを実行しています.1つは、 "manage.py test myapp"(いわゆるテスト側)とテストしたいWebサーバです。 "サービススーパーバイザstartall "(いわゆるnginx - サーバー側)。私のテスト側はサーバー側にのみHTTP要求を送信するので、サーバー側はテストのコンテキストから分離されます。 – Fian