web
程式開發過程一般包括以下幾個階段:
[需求分析,設計階段,實現階段,測試階段
]。其中測試階段通過人工或自動來執行測試某個系統的功能。目的是檢驗其是否滿足需求,並得出特定的結果,以達到弄清楚預期結果和實際結果之間的差別的最終目的。
測試從軟體開發過程可以分為:
整合測試
系統測試
在眾多的測試中,與程式開發人員最密切的就是單元測試,因為單元測試是由開發人員進行的,而其他測試都由專業的測試人員來完成。所以我們主要學習單元測試。
程式開發過程中,寫**是為了實現需求。當我們的**通過了編譯,只是說明它的語法正確,功能能否實現則不能保證。
因此,當我們的某些功能**完成後,為了檢驗其是否滿足程式的需求。可以通過編寫測試**,模擬程式執行的過程,檢驗功能**是否符合預期。
單元測試就是開發者編寫一小段**,檢驗目標**的功能是否符合預期。通常情況下,單元測試主要面向一些功能單一的模組進行。
舉個例子:一部手機有許多零部件組成,在正式組裝一部手機前,手機內部的各個零部件,
cpu、記憶體、電池、攝像頭等,都要進行測試,這就是單元測試。 在
web開發過程中,單元測試實際上就是一些「斷言
」(assert
)**。
斷言就是判斷乙個函式或物件的乙個方法所產生的結果是否符合你期望的那個結果。
python
中assert
斷言是宣告布林值為真的判定,如果表示式為假會發生異常。單元測試中,一般使用
assert
來斷言結果。
斷言方法的使用:
斷言語句類似於:
if not expression:
raise assertionerror
assertionerror
常用的斷言方法:
assertequal 如果兩個值相等,則pass
assertnotequal 如果兩個值不相等,則pass
asserttrue 判斷bool值為true,則pass
assertfalse 判斷bool值為false,則pass
assertisnone 不存在,則pass
assertisnotnone 存在,則pass
單元測試的基本寫法
首先,定義乙個類,繼承自unittest.testcase
import unittest
class testclass(unitest.testcase):
pass
其次,在測試類中,定義兩個測試方法
import unittest
class testclass(unittest.testcase):
#該方法會首先執行,方法名為固定寫法
def setup(self):
pass
#該方法會在測試**執行完後執行,方法名為固定寫法
def teardown(self):
pass
# 自定義方法名必須以test_開頭
def test_***(self):
pass
最後,在測試類中,編寫測試**
import unittest
class testclass(unittest.testcase):
#該方法會首先執行,相當於做測試前的準備工作
def setup(self):
pass
#該方法會在測試**執行完後執行,相當於做測試後的掃尾工作
def teardown(self):
pass
#測試**,
pass
import unittest
from settings.testing import testingconfig
import json
class suggestiontest(unittest.testcase):
"""搜尋建議介面測試案例"""
def setup(self):
"""在執行測試方法前先被執行
:return:
"""def test_missing_request_q_param(self):
"""測試缺少q的請求引數
:return:
"""resp = self.client.get('/v1_0/search')
self.assertequal(resp.status_code,404)
def test_request_q_param_error_length(self):
"""測試q引數錯誤長度
"""resp = self.client.get('/v1_0/search?q=' + 'e' * 51)
self.assertequal(resp.status_code, 400)
def test_normal_request(self):
"""測試正常請求
"""# 向flask伺服器傳送乙個get http請求, /1_0/search 介面,攜帶正常請求
# 方式一:通用的方式
# 使用python提供的http請求模組來呼叫urllib2 request
# 前提:再進行單元測試的時候,flask(web框架)的程式必須是啟動的
# 再進行單元測試的時候,不需要啟動flask程式,僅僅只執行單元測試檔案
# get client.get()
# post client.post()
resp = self.client.get('/v1_0/search?q=ptyhon')
# 得到檢視介面返回的資訊之後
# resp 是檢視的響應物件
# resp.status_code # 狀態碼
# resp.data -> 原始的響應體資料
# 判斷了返回的狀態碼是否是200
self.assertequal(resp.status_code, 200)
# 判斷響應體資料是否是json
resp_json = resp.data
resp_dict = json.loads(resp_json)
self.assertin('message', resp_dict)
self.assertin('data', resp_dict)
data = resp_dict['data']
self.assertin('options', data)
if __name__ == '__main__':
unittest.main()
關於Python單元測試模組Unitest
單元測試 白盒測試和黑盒測試 測試用例 測試執行後的輸出 使用test suite if name main suite unittest.testsuite 定義測試的內容列表 tests testmathfunc test add testmathfunc test minus 新增到測試中,a...
Python 單元測試
一 假設我們編寫了一段程式,主要功能是完成阿拉伯數字和羅馬數字之間的轉換 在羅馬數字中,利用7個字母進行重複或者組合來表達各式各樣的數字 i 1 v 5 x 10 l 50 c 100 d 500 m 1000 還有一些關於構造羅馬數字的規則。此程式的框架如下 其中,class romanerror...
python 單元測試
assertequal a,b assertnotequal a,b 斷言值是否相等 assertis a,b assertisnot a,b 斷言是否同一物件 記憶體位址一樣 assertlistequal list1,list2 assertitemnotequal list1,list2 斷言...