目錄mock 的意思是模擬,也就是模擬介面返回的資訊,用已有的資訊替換它需要返回的資訊,從實現對所依賴的模組的測試。
一般有兩種場景:
前端mock可以通過一些工具來完成:
後端的 mock 則是從介面的角度,如果乙個介面a返回的資料需要依賴於另乙個介面b,當敏捷開發中b介面還未開發完全時候這裡會需要用到 mock。
對於測試人員,對介面測試的時候,部分介面尚未開發完成,在約定了介面定義之後,也可以使用 mock 來模擬。
在 python3.x 中 mock 模組已經被整合到unittest裡面。class mock(spec=none,side_effect=none,return_value=default,name=none)
from unittest import mock
def add(num1,num2):
return num1 + num2 # pass
add = mock.mock(return_value=200) # 建立mock物件
print( add(10,20) )
你會發現無論輸入的引數是什麼,輸出結果都是200。等於方法被 mock 攔截處理了。
正常情況:
import requests
def request_scm():
# res = requests.get('')
res = requests.get('')
return res.status_code
import unittest
from unittest import mock
class testscmapi(unittest.testcase):
def testurl(self):
# request_scm = mock.mock(return_value=200)
self.assertequal(request_scm(), 200, msg='testurl 出現錯誤')
if __name__ == '__main__':
unittest.main()
可以分別把兩個 # 注釋移到下一句試試。
import requests
class scmapi():
def request_scm():
res = requests.get('')
# res = requests.get('')
return res.status_code
def pay_alipay():
'''待實現
return 200
'''return 0
import unittest
from unittest import mock
class testscmapi(unittest.testcase):
needmock = true
def setupclass():
print("setupclass():所有方法之前執行")
def teardownclass():
print("teardownclass():所有方法之後執行")
def setup(self):
self.scmapi = scmapi()
print("setup():每個方法之前執行")
def teardown(self):
print("teardown():每個方法之後執行")
def test_request_scm(self):
if self.needmock:
scmapi.request_scm = mock.mock(return_value=200)
self.assertequal(scmapi.request_scm(), 200, msg='test_request_scm 出現錯誤')
def test_pay_alipay(self):
if self.needmock:
scmapi.pay_alipay = mock.mock(return_value=200)
self.assertequal(scmapi.pay_alipay(), 200, msg='test_pay_alipay 出現錯誤')
if __name__ == '__main__':
unittest.main()
基本的斷言方法提供了測試結果是true還是false。所有的斷言方法都有乙個msg引數,如果指定msg引數的值,則將該資訊作為失敗的錯誤資訊返回。
序號斷言方法
斷言描述
1assertequal(arg1, arg2, msg=none)
驗證arg1=arg2,不等則fail
2assertnotequal(arg1, arg2, msg=none)
驗證arg1 != arg2, 相等則fail
3asserttrue(expr, msg=none)
驗證expr是true,如果為false,則fail
4assertfalse(expr,msg=none)
驗證expr是false,如果為true,則fail
5assertis(arg1, arg2, msg=none)
驗證arg1、arg2是同乙個物件,不是則fail
6assertisnot(arg1, arg2, msg=none)
驗證arg1、arg2不是同乙個物件,是則fail
7assertisnone(expr, msg=none)
驗證expr是none,不是則fail
8assertisnotnone(expr, msg=none)
驗證expr不是none,是則fail
9assertin(arg1, arg2, msg=none)
驗證arg1是arg2的子串,不是則fail
10assertnotin(arg1, arg2, msg=none)
驗證arg1不是arg2的子串,是則fail
11assertisinstance(obj, cls, msg=none)
驗證obj是cls的例項,不是則fail
12assertnotisinstance(obj, cls, msg=none)
驗證obj不是cls的例項,是則fail
在python中使用websocket
介紹一款很帥的外掛程式autobahnpython,通過它可以在python中很方便的使用websocket進行通訊 基於twisted框架 這個外掛程式真正強大的地方是它提供了乙個 發布 訂閱模式,具體內容有空再寫,先簡單介紹一下如何建立傳統的連線。建立伺服器 必須的模組 from twisted...
在Python中使用 slots
這篇文章主要介紹了在python中使用 slots 方法的詳細教程,slots 方法是python的乙個重要內建類方法,基於python2.x版本,需要的朋友可以參考下 正常情況下,當我們定義了乙個class,建立了乙個class的例項後,我們可以給該例項繫結任何屬性和方法,這就是動態語言的靈活性。...
with語句在Python中使用
引言 with語句生於python2.5,通過 from future import with statement 匯入後使用 2.6以後無需匯入直接使用 with 語句適用於對資源進行訪問的場合,確保不管使用過程中是否發生異常都會執行必要的 清理 操作,釋放資源 用途 最常用的兩個地方,檔案使用後...