python 如何在測試中使用 Mock

2022-10-04 13:03:14 字數 3166 閱讀 3354

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():

# reswww.cppcns.com = requests.get('')

res = requests.get('')

return res.status_code

import unittest

from unittest import mock

class testsc程式設計客棧mapi(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 scmirmrmdairmrmdpi():

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():所有方法之前執行")

dewww.cppcns.comf 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

如何在react專案中使用axios和mock資料

你好!我們在react專案中需要經常使用axios請求mock模擬資料,本文將簡單粗暴介紹如何使用axios請求mock資料。各位看官您往下看。1.在需要的頁面中引入axios import axios from axios 2.mock模擬資料的操作 2.1在src資料夾下建mock資料夾和ind...

說說如何在 Python 中使用日誌

通過日誌,我們可以理解程式中發生的事件,以及事件發生的順序。通過 python 的 logging 模組可以建立自定義的日誌記錄。這些日誌記錄可以包含呼叫時間以及當時變數的值 而且如果日誌記錄有缺失,說明有部分 被跳過。al sweigart 寫過這樣乙個示例,很好地詮釋了使用日誌來排查程式問題的實...

如何在AndroidStudio中使用AIDL

本章節介紹如何在androidstudio中使用aidl 2.在aidl下建立乙個包,包裡建立乙個 aidl檔案,右鍵aidl new aidl aidl file 紅框就是建立完成後的樣子 3.在aidl檔案寫要被呼叫的方法,此方法不能有許可權修飾符 4.首先build下,然後建立乙個servic...