Djangoユニットテスト
2868 ワード
本稿では,Djangoフレームワークに基づいて開発されたwebプログラムによるユニットテストについて紹介する.
djangoプログラムを使用するview関数のパラメータは一般的にrequest形式なので、ユニットテストはどのように行いますか?次の2つのセクションで説明します.実現原理 簡単な例
テストについては、DjangoのライブラリファイルTestCase、Clientを使用できます.
Djangoのユニットテストでは、pythonを使用したunittestモジュール、djangoを使用します.test.TestCaseはpythonのunittestに継承されています.TestCase. ディレクトリの下にある「test」で始まるすべてのファイルを次のコードで実行できます.
ここのTestCaseクラスは、仮想的な実行環境を構築し、新しいデータベースを構築することに相当します(「test_」先頭)は、新しく確立されたデータベースに基づいてtestプログラムを実行します.また、各テスト・インスタンスには、新しいデータベースがあります.したがって、各テスト・インスタンスの開始には、データが必要な場合は、ライブラリの構築、挿入、ログインなどの操作を再開する必要があります.
多くのview関数がrequestsを受信しているので、Webページのクリックをシミュレートする必要があります.ここでClientを用いてpost,getリクエストを送信する必要がある.
シミュレーションpostリクエストとgetリクエストを簡単に実現しました.
1.getリクエストのパラメータ({'name':'fred','age':7})はデフォルトで、2を書かなくてもよい.postのリクエストパラメータは必須です.エラーが発生します:django.http.request.RawPostDataExceptionこれはdjangoがpostを処理する方法と関係がある.詳細は以下を参照してください.https://github.com/encode/django-rest-framework/issues/2774
もちろんClientに対していくつかの修正を行うこともできます.例えば、Web側の操作をシミュレートします.
Clientのクラスは、ユーザーのログインとログインをシミュレートすることもできます.
urlsを含む例を示します.py,test.py,views.py
1.https://docs.djangoproject.com/en/dev/topics/testing/tools/#the-test-client 2.https://www.jianshu.com/p/5533c866453a
djangoプログラムを使用するview関数のパラメータは一般的にrequest形式なので、ユニットテストはどのように行いますか?次の2つのセクションで説明します.
実装の原理
テストについては、DjangoのライブラリファイルTestCase、Clientを使用できます.
from django.test import TestCase, Client
TestCaseクラス
Djangoのユニットテストでは、pythonを使用したunittestモジュール、djangoを使用します.test.TestCaseはpythonのunittestに継承されています.TestCase. ディレクトリの下にある「test」で始まるすべてのファイルを次のコードで実行できます.
python manage.py test
ここのTestCaseクラスは、仮想的な実行環境を構築し、新しいデータベースを構築することに相当します(「test_」先頭)は、新しく確立されたデータベースに基づいてtestプログラムを実行します.また、各テスト・インスタンスには、新しいデータベースがあります.したがって、各テスト・インスタンスの開始には、データが必要な場合は、ライブラリの構築、挿入、ログインなどの操作を再開する必要があります.
Clientクラス
多くのview関数がrequestsを受信しているので、Webページのクリックをシミュレートする必要があります.ここでClientを用いてpost,getリクエストを送信する必要がある.
from django.test import Client
c = Client()
# post , url,
response = c.post('/login/', {'username': 'john', 'password': 'smith'})
print(response.content)
c.get('/customers/details/', {'name': 'fred', 'age': 7})
print(resp.content)
シミュレーションpostリクエストとgetリクエストを簡単に実現しました.
1.getリクエストのパラメータ({'name':'fred','age':7})はデフォルトで、2を書かなくてもよい.postのリクエストパラメータは必須です.エラーが発生します:django.http.request.RawPostDataExceptionこれはdjangoがpostを処理する方法と関係がある.詳細は以下を参照してください.https://github.com/encode/django-rest-framework/issues/2774
もちろんClientに対していくつかの修正を行うこともできます.例えば、Web側の操作をシミュレートします.
from django.test import Client
c = Client(HTTP_USER_AGENT='Mozilla/5.0')
Clientのクラスは、ユーザーのログインとログインをシミュレートすることもできます.
from django.test import Client
c = Client()
c.login(username='fred', password='secret')
c.logout()
単純な例
urlsを含む例を示します.py,test.py,views.py
# urls.py
from django.conf.urls import url
from adminpage.views import *
urlpatterns = [
url(r'^login/?$', AdminLogin.as_view()),
]
# test.py
c = Client(HTTP_USER_AGENT='Mozilla/5.0')
class AuthLoginGet(TestCase):
def test_admin_login_get(self):
# c = Client(HTTP_USER_AGENT='Mozilla/5.0')
resp = c.get('/api/a/login')
mess = json.loads(str(resp.content, encoding="utf-8"))
self.assertEqual(mess['code'], 4)
self.assertEqual(mess['msg'], '')
# views.py
#
class AdminLogin(APIView):
def get(self):
if self.request.user.is_authenticated():
return
else:
raise LoginError('')
参考資料
1.https://docs.djangoproject.com/en/dev/topics/testing/tools/#the-test-client 2.https://www.jianshu.com/p/5533c866453a