58

私の Django ビューのいくつかでは、基本的な HTTP アクセス認証を実行するデコレーターを作成しました。しかし、Django でテスト ケースを作成しているときに、ビューに対する認証方法を理解するのに時間がかかりました。これが私がやった方法です。誰かがこれが役立つことを願っています。

4

6 に答える 6

89

これが私がそれをした方法です:

from django.test import Client
import base64
auth_headers = {
    'HTTP_AUTHORIZATION': 'Basic ' + base64.b64encode('username:password'),
}
c = Client()
response = c.get('/my-protected-url/', **auth_headers)

注: ユーザーも作成する必要があります。

于 2011-03-31T04:50:51.353 に答える
34

Django TestCase では、クライアントのデフォルトを更新して、HTTP 基本認証資格情報を含めることができます。

import base64
from django.test import TestCase

class TestMyStuff(TestCase):

    def setUp(self):
        credentials = base64.b64encode('username:password')
        self.client.defaults['HTTP_AUTHORIZATION'] = 'Basic ' + credentials
于 2012-01-31T23:22:02.287 に答える
2

ログイン フォームがあると仮定して、次の手法を使用してテスト フレームワークからログインします。

    client = Client()
    client.post('/login/', {'username': 'john.smith', 'password': 'secret'})

clientすでに認証されているため、他のテストで持ち歩きます。この投稿に対するあなたの質問は何ですか?

于 2011-03-31T15:34:24.913 に答える
-1

これを行う別の方法は、Django Client() をバイパスし、代わりに Requests を使用することです。

class MyTest(TestCase):
    def setUp(self):
        AUTH = requests.auth.HTTPBasicAuth("username", "password")

    def some_test(self):
        resp = requests.get(BASE_URL + 'endpoint/', auth=AUTH)
        self.assertEqual(resp.status_code, 200)
于 2014-10-30T15:24:32.170 に答える