Python Mock模塊原理及使用方法詳解
一、mock是什么?
英譯中含義有:虛假的; 不誠實(shí)的; 模仿的; 模擬的 這個意思
這個庫的主要功能就是模擬一些事務(wù)
官方解釋:Mock是Python中一個用于支持單元測試的庫,它的主要功能是使用mock對象替代掉指定的Python對象,以達(dá)到模擬對象的行為
二、為什么要用mock?
舉例:
假設(shè)你開發(fā)一個項目,里面包含了一個登錄模塊,登錄模塊需要調(diào)用身份證驗證模塊中的認(rèn)證函數(shù),該認(rèn)證函數(shù)會進(jìn)行值的返回,然后系統(tǒng)根據(jù)這個返回值來做判斷是否能進(jìn)行登錄。但是身份證驗證模塊中的認(rèn)證函數(shù)只有在正式上線的系統(tǒng)上才提供。公司內(nèi)部的測試環(huán)境或者開發(fā)環(huán)境上不提供。
如果此時需要進(jìn)行登錄模塊的業(yè)務(wù)測試或接口測試,該如何做?
方法一:
搭建一個測試服務(wù)器,在測試的時候,讓認(rèn)證函數(shù)和這個測試服務(wù)器交互,返回值給登錄模塊;
缺點(diǎn):
1、測試服務(wù)器可能不好搭建,或者搭建效率很低;
2、搭建的測試服務(wù)器可能無法返回所有可能的值,或者需要大量的工作才能達(dá)到這個目的。方法二:
使用mock函數(shù)模擬即可。
三、mock應(yīng)用
3.1 mock安裝
在Python 3.3以前的版本中,需要另外安裝mock模塊,可以使用pip命令來安裝:
pip install mock
從Python 3.3開始,mock模塊已經(jīng)被合并到標(biāo)準(zhǔn)庫中,被命名為unittest.mock,可以直接import進(jìn)來使用:
from unittest import mock
備注:目前Python 3.3之后的版本,也可以使用第一種方式應(yīng)用mock
3.2 mock簡單舉例
from unittest import mockdef add(num1,num2): return num1 + num2 # passadd_value = mock.Mock(return_value=200) # 創(chuàng)建mock對象add = add_value # 把mock對象賦值給add方法print( add(10,20) )
從上述代碼執(zhí)行可以看出,假使我把a(bǔ)dd()方法的實(shí)現(xiàn)改為pass,暫時還未實(shí)現(xiàn),也可以通過mock先返回所需要的數(shù)據(jù)。
3.3 mock應(yīng)用舉例
import requestsdef send_request(url): r = requests.get(url) return r.status_codedef visit_newdream(): return send_request('http://www.hnxmxit.com/')print( visit_newdream() )
上述代碼是訪問我們公司的官網(wǎng),假設(shè)該官網(wǎng)訪問請求還沒被實(shí)現(xiàn),此時 visit_newdream() 方法需要 send_request 返回響應(yīng)狀態(tài)碼。這個時候可以用到mock。
# 當(dāng)前文件名為 mock_demo.pyimport unittestfrom unittest import mockimport requestsimport mock_demodef send_request(url): r = requests.get(url) return r.status_codedef visit_newdream(): return send_request('http://www.hnxmxit.com/')class TestClient(unittest.TestCase): def test_success_request(self): success_send = mock.Mock(return_value=’200’) mock_demo.send_request = success_send self.assertEqual(mock_demo.visit_newdream(), ’200’)if __name__=='__main__': unittest.main()
上述代碼完成了mock的簡單應(yīng)用,由于mock_demo.send_request = success_send 把mock對象賦值給了方法,使得方法再次調(diào)用的時候使用了mock的方法完成把模擬返回值傳遞給mock_demo.visit_newdream()方法。
四、小結(jié)
此文基礎(chǔ)的介紹了mock的入門; 讀者實(shí)操出來有一定的想法后完全可以應(yīng)用到接口測試和單元測試過程中去。以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. 詳解CSS開發(fā)過程中的20個快速提升技巧2. asp讀取xml文件和記數(shù)3. .Net Core使用Coravel實(shí)現(xiàn)任務(wù)調(diào)度的完整步驟4. 如何使用ASP.NET Core 配置文件5. 常見 PHP ORM 框架與簡單代碼實(shí)現(xiàn)6. 一篇文章帶你了解JavaScript-語句7. PHP下載CSS文件中的圖片8. ASP+ajax實(shí)現(xiàn)頂一下、踩一下同支持與反對的實(shí)現(xiàn)代碼9. .Net core 的熱插拔機(jī)制的深入探索及卸載問題求救指南10. XML 取得元素的字符數(shù)據(jù)
