入門
ユニットテストについての基本的な知識は、それだけで、もはやここにはありません:ユニットテストはコードの別の部分をテストするためのコードの一部です。最も一般的に使用されるフレームワークはPythonのユニットテストフレームワークである、ユニットテストで、フレームワークをテストジャンゴユニットはtest.TestCaseはPythonのたunittest.TestCaseを継承しています。
たunittest.TestCaseのTestCaseはまた、self.clientを定義するものとして、コードの繰り返しの多くを書く必要がなくなり、さらにパッケージングを行い、電子メールサービスは、メールを送信する便利な方法を提供します。
DjangoのモデルはよくTは、テンプレートはHTMLファイルは、HTMLのため、基本的に重要なロジックコードがない場合でも、死者を書くために、測定可能なコードが存在しないあるあるMTVモデルを、知られています。だから、モデルとビューでMとVの拡大に焦点を当てた時のユニットテスト、中。
道
ユニットテストは、2つの方法で行わ:
; 1. Djangoフレームワークは、文書tests.pyユニットテストを来る
; 2.カスタムはtest.pyファイルを作成し
、両方が同じですが、実行は同じ実行時のディレクトリではありません。
注:私は最初にここにいます。
モデルのテスト
公共の図書館利用をインポートして起動します。
django.test輸入のTestCaseから django_web.modelsからのイベント、ゲストインポート django.contrib.auth.modelsからユーザーをインポート #ここにあなたのテストを作成します。 インポート日時 。get_now = datetime.datetime.now()のstrftime( '%Y-%M-%D%H:%のM:%S')
試験モデル
クラスDjangoWebModelTest(テストケース): "" "测试模型" "" defのセットアップ(自己) - >なし: Event.objects.create(ID = 1、名前= '小米5'、状態=真、アドレス= '深圳'限界= 3、START_TIME = get_now) Guest.objects.create(ID = 1、EVENT_ID = 1、本名= '老王'、電話= 15099925893、Eメール= '11 @ qq.com」、記号=偽) DEF test_event_model(自己): "" "测试发布会表" "" 結果= Event.objects.get(名= '小米5') self.assertEqual(result.address、 '深圳') self.assertTrue(result.status) DEF test_guest_model (自己): "" "测试嘉宾表" "" 結果= Guest.objects.get(電話=」15099925893 ') self.assertEqual(result.realname、'老王') self.assertFalse(result.sign)
ビュー機能テスト
IndexPageTestクラス(テストケース): "" "テストインデックスログホーム" "" DEFのtest_index_page(自己): "" "テスト・インデックス・ビュー" "" レスポンス= self.client.get( '/インデックス/') self.assertEqual(レスポンス.status_code、200) self.assertTemplateUsed(応答、 'index.htmlを') クラスLoginActionの(テストケース): "" "テストアクションログ" "" DEFセットアップ(自己) - >なし: ""「ユーザーデータを作成します。2種類" ""さまざまな方法でユーザー作成 User.objects.create(ユーザ名= 'ADMIN') User.objects.create_user(、パスワードをユーザ名= 'ADMIN2'、Eメール= '11.com @ ADMINを' = '123456') DEFのtest_add_admin (自己): "" " "ユーザ管理テストを追加"" DEFのtest_add_admin2(セルフ): ユーザー= User.objects.get(ユーザ名=「管理者」) self.assertEqual(user.username、 '管理者') "" "添加用户ADMIN2测试" "" ユーザー= User.objects.get(ユーザ名= 'ADMIN2') self.assertEqual(user.username、 'ADMIN2') 自己。 assertEqual(user.email、 '管理者@ 11.com') デフtest_login_username_password_null(自己): "" "用户名密码为空" "" TEST_DATA = { 'ユーザ名': ''、 'パスワード': ''} 応答= self.client.post( '/ login_action /'、データ= TEST_DATA) self.assertEqual(response.status_code、302) DEF test_login_username_password_error(自己): "" "用户名密码错误" "" TEST_DATA = { 'ユーザ名': 'テスト'、 'パスワード': '123456'} 応答= self.client.post( '/ login_action /'、データ= TEST_DATA)123456' } self.assertEqual(response.status_code、302) DEF test_login_action_success(自己): "" "登录成功" "" TEST_DATA = { 'ユーザ名': 'ADMIN2'、 'パスワード': '123456'} 応答= self.client.post( '/ login_action /'、データ= TEST_DATA) self.assertEqual (response.status_code、302) クラスEventManageTest(テストケース): "" "发布会管理" "" defのセットアップ(自己) - >なし: #创建用户账号 User.objects.create_user( '管理者'、 '管理者@ QQ。 comの」、 '123456') Event.objects.create(名= '小米3'、リミット= 3、アドレス= '深圳'、状態=真、START_TIME = get_now) self.login_user = { 'ユーザ名': '管理者' 「パスワード」:「123456」} #事前に登録 ( '/ login_action /'、データ= self.login_user)self.client.post DEFのtest_add_event_data(自己):LOGIN_USER) "" "テスト会議を追加:キビ3" "" イベント= Event.objects.get(名= "アワ3") self.assertEqual(event.address、 "深圳") DEF test_event_success(自己): "" "测试发布会:小米3" "" 応答= self.client.post( '/ event_manager /') self.assertEqual(応答。 STATUS_CODE、200) self.assertIn( "小米3" .encode( 'UTF-8')、response.content) DEF test_event_search_success(自己): "" "测试发布会搜索" "" 応答= self.client.post( '/ SEARCH_NAME /') self.assertEqual(response.status_code、200) self.assertIn( '小米3'.encode(' UTF-8' )、response.content) クラスGuestManageTest(テストケース): "" "嘉宾管理" 「」 DEFセットアップ(自己) - >なし: User.objects.create_user( '管理者'、 '[email protected]'、 '123456') Event.objects.create(ID = 1、名前= 'キビ2'、限界= 3、アドレス = ' 深'、ステータス真=、= START_TIME get_now) Guest.objects.create(=本名'サバイバルソング'、電話= 15099925798、'11 @ = qq.comメールでの'ログイン= 0、EVENT_ID =。1) self.login_user = {'ユーザ名" : 'ADMIN'、 'パスワード': '123456'} #あらかじめ登録さ self.client.post( '/ login_action /'、データ= self.login_user) DEF test_add_guest(自己): "" "テスト追加ゲスト:サバイバル・ソング" "" ユーザーレビュー= Guest.objects.get(=本名の'サバイバル歌') self.assertEqual(guest.realname、 'サバイバル・ソング') self.assertEqual(guest.phone、'15099925798') self.assertEqual(guest.email、'11 @ qq.com ') self.assertFalse(guest.sign) DEFセットアップ(自己) - >なし: 看板) DEFのtest_guest_success(自己): 「」「テストのゲストリスト:サバイバル歌」「」 応答= self.client.post( '/ guest_manager /') self.assertEqual(response.status_code、200) self.assertIn( '小李子' .encode( 'UTF-8')、response.content) self.assertIn( '15099925798'.encode(' UTF-8 ')、response.content) DEF test_guest_search_success(自己): "" "测试嘉宾搜索" "" 応答= self.client.post(' / search_phone / ') self.assertEqual( response.status_code、200) self.assertIn( '小李子' .encode( 'UTF-8')、response.content) self.assertIn( '15099925798'.encode(' UTF-8' )、response.content) クラスSignIndexActionTest(テストケース): "" "发布会签到" "" User.objects.create_user( '管理者'、 '[email protected]'、 '123456') Event.objects.create(ID = 1、名前= '小米1'、限界= 3、アドレス= '广州'、状態=真、START_TIME = get_now) Event.objects.create(ID = 2、NAME = '小米9 '限界= 3、アドレス= '北京'、状態=真、START_TIME = get_now) Guest.objects.create(本名= '老张'、電話= 15099925798、email='[email protected]'、符号= 0 、EVENT_ID = 1)#未签到 Guest.objects.create(本名= '老周'、電話= 15099925700、email='[email protected]」、符号= 1、EVENT_ID = 2)#未签到 self.login_user = { 'ユーザ名': '管理者'、 'パスワード': '123456'} self.client.post( '/ login_action /'、データ= self.login_user) DEF test_phone_null(自己): "" "テストは、電話番号は空です。" "" 応答= self.client.post(」 / sign_index_action / 1 /」、{ "電話": ""}) self.assertEqual(response.status_code、200) self.assertIn( '電話番号を入力してください。'エンコード( 'UTF-8')、response.content。) DEFのtest_phone_error(自己): "" "電話番号が間違っ" "" レスポンス= self.client.post(「/ sign_index_action / 2 / '{ "電話": "15,099,925,732,398"}) self.assertEqual(response.status_code、200)である 。self.assertIn( "間違った電話番号"エンコード(' UTF- 8「)、response.content) test_phone_or_eventid_error DEF(セルフ): "" "" "電話番号は、会議のゲストの一部ではない" ( '/ sign_index_action / 2 /'、{ "15099925798" "電話"})応答= self.client.post self.assertEqual (response.status_codeは、200) self.assertIn(「電話番号は、会議の一部ではないゲストを属します。」。 "" "" "ユーザーがチェックしていること" DEF test_already_sign(自己): 応答= self.client.post( '/ sign_index_action / 2 /'、{ "電話": "15099925700"}) self.assertEqual(response.status_code、200) self.assertIn(「您已经签到! "エンコード( 'UTF-8')、response.content) DEF test_sign_success(自己 ):"""签到成功"" " 応答= self.client.post( '/ sign_index_action / 1 /'、{"電話":" 15099925798 "}) (self.assertEqual response.status_code、200) !。self.assertIn(" 签到成功」コード( 'UTF-8')、response.content)
ユニットテストコードを実行します
「」 " ファイル名を指定して実行すべてのユースケース: のpython3 manage.pyテスト 実行をアプリケーション内のすべてのユースケースdjango_web: のpython3 manage.pyテストdjango_webの 実行tests.pyユースケースファイルアプリケーションの記号で: のpython3 manage.pyテストdjango_web.testsは django_webでアプリケーションを実行tests.py DjangoWebModelTest試験クラスファイル: のpython3 django_web.tests.DjangoWebModelTest manage.py試験の 試験方法(ユースケース)DjangoWebModelTest試験クラスdjango_web実行中のアプリケーション: のpython3 manage.py試験django_web.tests.DjangoWebModelTest.test_event_modelに ファジーマッチング試験ファイル テストのpython3 -p manage.pyテストdjango_webを実行するための*の.py ...... 「」 "
結果
D:\ my_django_guest>のpython3 manage.pyテストdjango_web 別名「デフォルト」のためのテスト・データベースを作成しています... システムは何の問題を(0沈黙)確認されなかっチェック。 ................... ------------------------------- --------------------------------------- 3.080sで実行した19回のテスト OK ためのテストデータベースの破棄別名「デフォルト」...