0

Edit2: なぜエラーが発生するのか、パスワードが一致しません。これは、テスト データベースにユーザー名とパスワード自体が含まれていないためです。

編集1:

次に、ログインAPIのテストケースを作成しようとしましたが、クラスの外側でテストを作成するとエラーは発生しませんが、クラスを作成 class TestCase(TestCase):してメソッドを定義するとエラーが発生しますdef test_login(self):。パスワードの不一致が発生しますが、同じコードの外側で正常に実行されます。

from django.test import TestCase
from django.test import Client
import json

#Creating test out side class


credential=dict()
c =Client()
credential["username"]="john"
credential["password"]="xxx"
response =c.put('/api/login', data=json.dumps(credential)) 

print("content")
print(response.content)

"""
{"message": "", "result": {"username": "john", "session_key": "xyz"}, "error": 0}
"""


print("session_key")
content = json.loads(response.content)
key = content['result']['session_key']
print key


#Creating test inside class


class TestCase(TestCase):
   def test_login(self):
      User.objects.create(username="john", password="xxx")
      credential=dict()
      c =Client()
      credential["username"]="john"
      credential["password"]="xxx"
      response =c.put('/api/login', data=json.dumps(credential))
      content=json.loads(response.content)
      print 'content'
      print content


     {u'message': u'Username and Password mismatch', u'result': {}, u'error': 1}

ここで、メッセージが成功した場合の異なる形式であることがわかります
{"message": "", "result": {"username": "john", "session_key": "xyz"}, "error": 0}

失敗した場合
{u'message': u'username=john and password=xxx Username and Password mismatch', u'result': {}, u'error': 1}

login api は次のように記述されていますが、クラス Test_login 内で test を定義すると、if 部分ではなく、else 部分で実行されます。他の部分では、応答とともにユーザー名とパスワードを出力しようとしました。私は次のような応答を得ています{u'message': u'username=john and password=xxx Username and Password mismatch', u'result': {}, u'error': 1}

ここで、ユーザー名とパスワードが正しいことがわかります。なぜいけないのか?私はネットで同様の問題を調べています。同じ問題について言及していました。したがって、私が見たところ、ユーザー名とパスワードは正しいです。どうしたの ?

バックエンド ログイン API

user = auth.authenticate(username=username, password=password)
    if user is not None:
        print 'if user is not None:'
        msg=Some response 
    else:
      msg = strtemp+' username='+username+' and password='+password+' Username and Password mismatch'

したがって、私が見たところ、ユーザー名とパスワードは正しいです。どうしたの ?

4

1 に答える 1

1

何が起こっているのかは、パスワードを適切に設定していないことだと思います。

ご存じのとおり、 djangoは modelのパスワードをハッシュしますUser。呼び出す代わりに、次のUser.objects.create(username="john", password="xxx") ことを行う必要がありますUser.objects.create_user('john', password='xxx')

答えとは別に、 test class を呼び出さないでくださいTestCase。コードをきれいに保ち、おそらく将来の問題を回避するためです。

于 2015-09-19T07:57:01.463 に答える