濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > python 如何在測(cè)試中使用 Mock

python 如何在測(cè)試中使用 Mock

熱門(mén)標(biāo)簽:正安縣地圖標(biāo)注app 舉辦過(guò)冬奧會(huì)的城市地圖標(biāo)注 電銷(xiāo)機(jī)器人系統(tǒng)廠家鄭州 400電話(huà)申請(qǐng)資格 螳螂科技外呼系統(tǒng)怎么用 qt百度地圖標(biāo)注 地圖地圖標(biāo)注有嘆號(hào) 遼寧智能外呼系統(tǒng)需要多少錢(qián) 阿里電話(huà)機(jī)器人對(duì)話(huà)

Mock概念

mock 的意思是模擬,也就是模擬接口返回的信息,用已有的信息替換它需要返回的信息,從實(shí)現(xiàn)對(duì)所依賴(lài)的模塊的測(cè)試。

一般有兩種場(chǎng)景:

  • 前端對(duì)后端接口的 mock,
  • 后端服務(wù)之間的測(cè)試中涉及的mock,常常發(fā)生在單元測(cè)試的時(shí)候。

前端mock可以通過(guò)一些工具來(lái)完成:

  • 使用抓包工具Fiddler,Charles 來(lái)實(shí)現(xiàn),通過(guò)修改代理返回的數(shù)據(jù),實(shí)現(xiàn)多種場(chǎng)景的測(cè)試。
  • 使用一些API管理工具來(lái)模擬,比如yapi,Easy Mock 等
  • 當(dāng)然有編碼能力的,也可以使用node.js,python的fastAPI來(lái)模擬

后端的 Mock 則是從接口的角度,如果一個(gè)接口A返回的數(shù)據(jù)需要依賴(lài)于另一個(gè)接口B,當(dāng)敏捷開(kāi)發(fā)中B接口還未開(kāi)發(fā)完全時(shí)候這里會(huì)需要用到 Mock。

對(duì)于測(cè)試人員,對(duì)接口測(cè)試的時(shí)候,部分接口尚未開(kāi)發(fā)完成,在約定了接口定義之后,也可以使用 Mock 來(lái)模擬。

在 python3.X 中 Mock 模塊已經(jīng)被集成到unittest里面。

Mock類(lèi)

class Mock(spec=None,side_effect=None,return_value=DEFAULT,name=None)

  • spec:定義Mock對(duì)象的屬性值,可以是一個(gè)列表,字符串,一個(gè)對(duì)象的實(shí)例
  • side_effect:可以用來(lái)拋出異?;蛘邉?dòng)態(tài)改變返回值,可以覆蓋return_value
  • return_value:定義mock的返回值
  • name:作為mock對(duì)象的標(biāo)識(shí)可以在print時(shí)候看到

簡(jiǎn)單的例子體驗(yàn)下 Mock 的功能特點(diǎn)

from unittest import mock
def add(num1,num2):
 return num1 + num2 # pass
 
add = mock.Mock(return_value=200) # 創(chuàng)建mock對(duì)象
 
print( add(10,20) )

你會(huì)發(fā)現(xiàn)無(wú)論輸入的參數(shù)是什么,輸出結(jié)果都是200。等于方法被 Mock 攔截處理了。

一個(gè)相對(duì)正式的 Mock 例子

正常情況:

import requests
def request_scm():
 # res = requests.get('http://www.mysx-scm.com')
 res = requests.get('http://baidu.com')
 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 出現(xiàn)錯(cuò)誤')

if __name__ == '__main__':
 unittest.main()

可以分別把兩個(gè) # 注釋移到下一句試試。

一個(gè)完整的測(cè)試?yán)?/h2>
import requests

class scmapi():
 def request_scm():
  res = requests.get('http://www.mysx-scm.com')
  # res = requests.get('http://baidu.com')
  return res.status_code

 def pay_alipay():
  '''
  待實(shí)現(xiàn)
  return 200
  '''
  return 0
 

import unittest
from unittest import mock

class TestScmApi(unittest.TestCase):
 
 needmock = True
 def setUpClass():
  print("setUpClass():所有方法之前執(zhí)行")

 def tearDownClass():
  print("tearDownClass():所有方法之后執(zhí)行")
  
 def setUp(self):
  self.scmapi = scmapi()
  print("setUp():每個(gè)方法之前執(zhí)行")

 def tearDown(self):
  print("teardown():每個(gè)方法之后執(zhí)行")
 
 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 出現(xiàn)錯(cuò)誤')

 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 出現(xiàn)錯(cuò)誤')

if __name__ == '__main__':
 unittest.main()

斷言方法

基本的斷言方法提供了測(cè)試結(jié)果是True還是False。所有的斷言方法都有一個(gè)msg參數(shù),如果指定msg參數(shù)的值,則將該信息作為失敗的錯(cuò)誤信息返回。

序號(hào) 斷言方法 斷言描述
1 assertEqual(arg1, arg2, msg=None) 驗(yàn)證arg1=arg2,不等則fail
2 assertNotEqual(arg1, arg2, msg=None) 驗(yàn)證arg1 != arg2, 相等則fail
3 assertTrue(expr, msg=None) 驗(yàn)證expr是true,如果為false,則fail
4 assertFalse(expr,msg=None) 驗(yàn)證expr是false,如果為true,則fail
5 assertIs(arg1, arg2, msg=None) 驗(yàn)證arg1、arg2是同一個(gè)對(duì)象,不是則fail
6 assertIsNot(arg1, arg2, msg=None) 驗(yàn)證arg1、arg2不是同一個(gè)對(duì)象,是則fail
7 assertIsNone(expr, msg=None) 驗(yàn)證expr是None,不是則fail
8 assertIsNotNone(expr, msg=None) 驗(yàn)證expr不是None,是則fail
9 assertIn(arg1, arg2, msg=None) 驗(yàn)證arg1是arg2的子串,不是則fail
10 assertNotIn(arg1, arg2, msg=None) 驗(yàn)證arg1不是arg2的子串,是則fail
11 assertIsInstance(obj, cls, msg=None) 驗(yàn)證obj是cls的實(shí)例,不是則fail
12 assertNotIsInstance(obj, cls, msg=None) 驗(yàn)證obj不是cls的實(shí)例,是則fail

以上就是python 如何在測(cè)試中使用 Mock的詳細(xì)內(nèi)容,更多關(guān)于python 測(cè)試中使用Mock的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • python測(cè)試框架unittest和pytest區(qū)別
  • python使用pytest接口自動(dòng)化測(cè)試的使用
  • python 如何用 Hypothesis 來(lái)自動(dòng)化單元測(cè)試
  • python 基于DDT實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng)測(cè)試
  • Python自動(dòng)化測(cè)試基礎(chǔ)必備知識(shí)點(diǎn)總結(jié)
  • Python3 + Appium + 安卓模擬器實(shí)現(xiàn)APP自動(dòng)化測(cè)試并生成測(cè)試報(bào)告
  • 基于Python的接口自動(dòng)化unittest測(cè)試框架和ddt數(shù)據(jù)驅(qū)動(dòng)詳解
  • Appium+Python實(shí)現(xiàn)簡(jiǎn)單的自動(dòng)化登錄測(cè)試的實(shí)現(xiàn)
  • python如何進(jìn)行基準(zhǔn)測(cè)試

標(biāo)簽:濟(jì)源 阜新 信陽(yáng) 昭通 合肥 興安盟 隨州 淘寶好評(píng)回訪

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《python 如何在測(cè)試中使用 Mock》,本文關(guān)鍵詞  python,如,何在,測(cè)試,中,使用,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《python 如何在測(cè)試中使用 Mock》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于python 如何在測(cè)試中使用 Mock的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    磐石市| 淮滨县| 松溪县| 灌阳县| 泸定县| 绥江县| 四川省| 利川市| 汝南县| 南皮县| 格尔木市| 彭州市| 沈阳市| 安龙县| 淮南市| 梓潼县| 天镇县| 长兴县| 中江县| 伊宁县| 鞍山市| 静海县| 乌拉特中旗| 兴安盟| 开化县| 肥东县| 尚志市| 诸暨市| 连江县| 赤峰市| 泾川县| 镇宁| 涟源市| 会昌县| 满洲里市| 新巴尔虎右旗| 台中县| 壶关县| 安新县| 桃源县| 类乌齐县|