歡迎您光臨本站 註冊首頁

Python Mock模塊原理及使用方法詳解

←手機掃碼閱讀     zmcjlove @ 2020-07-08 , reply:0

一、mock是什麼?
 

英譯中含義有:虛假的; 不誠實的; 模仿的; 模擬的 這個意思
 

這個庫的主要功能就是模擬一些事務
 

官方解釋:Mock是Python中一個用於支持單元測試的庫,它的主要功能是使用mock對象替代掉指定的Python對象,以達到模擬對象的行為
 

二、為什麼要用mock?
 

舉例:
 

假設你開發一個項目,裡面包含了一個登錄模塊,登錄模塊需要調用身份證驗證模塊中的認證函數,該認證函數會進行值的返回,然後系統根據這個返回值來做判斷是否能進行登錄。但是身份證驗證模塊中的認證函數只有在正式上線的系統上才提供。公司內部的測試環境或者開發環境上不提供。

如果此時需要進行登錄模塊的業務測試或接口測試,該如何做?

方法一:
 

搭建一個測試服務器,在測試的時候,讓認證函數和這個測試服務器交互,返回值給登錄模塊;
 

缺點:

1、測試服務器可能不好搭建,或者搭建效率很低;

2、搭建的測試服務器可能無法返回所有可能的值,或者需要大量的工作才能達到這個目的。
 方法二:
 

使用mock函數模擬即可。
 

三、mock應用
 

3.1 mock安裝
 

在Python 3.3以前的版本中,需要另外安裝mock模塊,可以使用pip命令來安裝:
 

pip install mock
 

從Python 3.3開始,mock模塊已經被合併到標準庫中,被命名為unittest.mock,可以直接import進來使用:
 

from unittest import mock
 

備註:目前Python 3.3之後的版本,也可以使用第一種方式應用mock

3.2 mock簡單舉例
 

  from unittest import mock  def add(num1,num2):    return num1 + num2  # pass    add_value = mock.Mock(return_value=200) # 創建mock對象  add = add_value # 把mock對象賦值給add方法    print( add(10,20) )

 

從上述代碼執行可以看出,假使我把add()方法的實現改為pass,暫時還未實現,也可以通過mock先返回所需要的數據。

3.3 mock應用舉例
 

  import requests  def send_request(url):    r = requests.get(url)    return r.status_code    def visit_newdream():    return send_request("http://www.hnxmxit.com/")    print( visit_newdream() )

 

上述代碼是訪問我們公司的官網,假設該官網訪問請求還沒被實現,此時 visit_newdream() 方法需要 send_request 返回響應狀態碼。這個時候可以用到mock。

  # 當前文件名為 mock_demo.py  import unittest  from unittest import mock  import requests  import mock_demo    def send_request(url):    r = requests.get(url)    return r.status_code    def 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的簡單應用,由於mock_demo.send_request = success_send 把mock對象賦值給了方法,使得方法再次調用的時候使用了mock的方法完成把模擬返回值傳遞給mock_demo.visit_newdream()方法。

四、小結
 

  • 此文基礎的介紹了mock的入門;

  • 讀者實操出來有一定的想法後完全可以應用到接口測試和單元測試過程中去。

                                                       

   


[zmcjlove ] Python Mock模塊原理及使用方法詳解已經有233次圍觀

http://coctec.com/docs/python/shhow-post-241807.html