3

私はいくつかの外部サービスを持っています。私の Django アプリは、外部サービス API の上に構築されています。外部サービスと通信するには、認証 Cookie を渡す必要があります。これは、読み取りによって取得できますUser(その Cookie != django Cookie)。

のようなテスト ツールを使用するwebtestsと、requestsテストを書くのに苦労します。

class MyTestCase(WebTest):
    def test_my_view(self):
        #client = Client()
        #response = client.get(reverse('create')).form
        form = self.app.get(reverse('create'), user='dummy').form
        print form.fields.values()
        form['name'] = 'omghell0'
        print form

        response = form.submit()

たとえば、外部サービスでユーザーを作成するフォームを送信する必要があります。しかし、それを行うには、通常はパスインしますrequest.user(外部サービスに対する権限を認証するため)。しかし、私は持っていませんrequest.user

この種のものにはどのようなオプションがありますか?

ありがとう...


これが私のtests.pyだとします

import unittest
from django.test.client import Client
from django.core.urlresolvers import reverse
from django_webtest import WebTest
from django.contrib.auth.models import User


class SimpleTest(unittest.TestCase):
    def setUp(self):
        self.usr = User.objects.get(username='dummy')
        print self.usr
    .......

私は得る

Traceback (most recent call last):
  File "/var/lib/graphyte-webclient/webclient/apps/codebundles/tests.py", line 10, in setUp
    self.usr = User.objects.get(username='dummy')
  File "/var/lib/graphyte-webclient/graphyte-webenv/lib/python2.6/site-packages/django/db/models/manager.py", line 132, in get
    return self.get_query_set().get(*args, **kwargs)
  File "/var/lib/graphyte-webclient/graphyte-webenv/lib/python2.6/site-packages/django/db/models/query.py", line 341, in get
    % self.model._meta.object_name)
DoesNotExist: User matching query does not exist

しかし、私がビューでテストすればUser.objects、私は大丈夫です。

4

3 に答える 3

5

テスト用のテスト ユーザーを作成するには、setUp() メソッドを使用する必要があります。テストではライブ データは使用されませんが、単体テストを実行するために一時的なテスト データベースが作成されます。詳細については、こちらをお読みください: https://docs.djangoproject.com/en/dev/topics/testing/?from=olddocs#writing-unit-tests

編集:

次に例を示します。

from django.utils import unittest
from django.contrib.auth.models import User

from myapp.models import ThisModel, ThatModel

class ModelTest(unittest.TestCase):
    def setUp(self):
        # Create some users
        self.user_1 = User.objects.create_user('Chevy Chase', 'chevy@chase.com', 'chevyspassword')
        self.user_2 = User.objects.create_user('Jim Carrey', 'jim@carrey.com', 'jimspassword')
        self.user_3 = User.objects.create_user('Dennis Leary', 'dennis@leary.com', 'denisspassword')

また、複数のメソッドを使用してさまざまな機能をテストする場合は、次のテストのためにオブジェクトを再インスタンス化する前に、tearDown メソッドを使用してオブジェクトを破棄する必要があることに注意してください。これは、最終的に理解するのに時間がかかったものなので、手間を省きます。

def tearDown(self):
        # Clean up after each test
        self.user_1.delete()
        self.user_2.delete()
        self.user_3.delete()
于 2012-03-27T22:57:59.327 に答える
1

Djangoは、ここで説明するように、単体テストまたはドキュメントテストのいずれかを使用することをお勧めします。これらのテストは、各アプリディレクトリのtests.pyに配置でき、コマンド `pythonmanage.pytest"を使用すると実行されます。

Djangoは、ここで説明するように、単体テストに非常に役立つクラスと関数を提供します。特に、このクラスdjango.test.Clientは非常に便利で、ユーザーなどを制御できます。

于 2012-03-27T22:28:28.290 に答える
1

https://docs.djangoproject.com/en/1.4/topics/testing/#module-django.test.client

djangoテストクライアントを使用してリクエストをシミュレートします。返された結果の動作をテストする必要がある場合は、Seleniumを使用してください。

于 2012-03-27T22:30:16.227 に答える