測試用例html
import datetime from django.test import TestCase from django.utils import timezone from .models import Question class QuestionModelTests(TestCase): def test_was_published_recently_with_future_question(self): """ was_published_recently() returns False for questions whose pub_date is in the future. """ time = timezone.now() + datetime.timedelta(days=30) future_question = Question(pub_date=time) self.assertIs(future_question.was_published_recently(), False)
執行python manage.py test polls,會進行以下操做
1 尋找 polls應用裏的測試代碼
2 找django.test.TestCase 的子類,如QuestionModelTests
3 建立一個特殊的數據庫供測試使用,如,建立future_question,並非在用戶數據庫建立,而是在一個測試數據庫建立的
4 在類中尋找測試方法—以 test 開頭的方法
5 使用assertls()方法,確認函數是否返回指望值python
Clientshell
Django 提供了一個供測試使用的 Client 來模擬用戶和視圖層代碼的交互數據庫
python shell UIdjango
from django.test import Client from django.urls import reverse client = Client() response = client.get('/') response.status_code response = client.get(reverse('polls:index')) #請求應用polls的視圖index response.status_code #輸出:200 response.content #輸出:index視圖對應html的內容 response.context['latest_question_list'] #輸出:<QuerySet [<Question: What's up?>]>
關於測試例
先寫代碼或先寫測試用例,可根據實際狀況來決定
每增長一項功能,都要追加相應的測試用例,而且測試用例越多越好
測試例過多,可能會失去控制,可在總體進行規劃,可參考如下原則:
對於每一個模型和視圖都創建單獨的TestClass
每一個測試方法只測試一個功能
給每一個測試方法起個能描述其功能的名字
當寫完測試用例並經過後,可將其永遠保留
由於該測試用例的做用,實際上就是在監控對應的代碼
好比,未來修改其餘代碼時,可能無心間形成這段代碼沒有返回指望值
則在修改後執行測試用例時,就會發現該bug
Selenium
Selenium是一款瀏覽器自動化測試工具
它僞裝成是瀏覽器正在和站點進行交互,就像真人在訪問網站同樣
Django提供了LiveServerTestCase與Selenium這樣的工具進行交互瀏覽器
代碼覆蓋率
找出代碼中未被測試部分的方法是檢查代碼覆蓋率
它有助於找出代碼中的薄弱部分和無用部分
若是沒法測試一段代碼,一般說明這段代碼須要被重構或者刪除服務器
持續集成
對源代碼進行自動化編譯、測試、代碼檢查,以及打包程序、部署(發佈)到應用服務器上函數