最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python 如何在測試中使用 Mock

 更新時間:2021年03月01日 17:14:43   作者:路上有莉  
這篇文章主要介紹了python 如何在測試中使用 Mock,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下

Mock概念

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

一般有兩種場景:

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

前端mock可以通過一些工具來完成:

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

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

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

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

Mock類

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

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

簡單的例子體驗下 Mock 的功能特點

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

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

一個相對正式的 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)錯誤')

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

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

一個完整的測試?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():
  '''
  待實現(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():每個方法之前執(zhí)行")

 def tearDown(self):
  print("teardown():每個方法之后執(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)錯誤')

 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)錯誤')

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

斷言方法

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

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

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

相關(guān)文章

  • Python Unittest原理及基本使用方法

    Python Unittest原理及基本使用方法

    這篇文章主要介紹了Python Unittest原理及基本使用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • Python3連接SQLServer、Oracle、MySql的方法

    Python3連接SQLServer、Oracle、MySql的方法

    這篇文章較詳細(xì)的給大家介紹了Python3連接SQLServer、Oracle、MySql的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧
    2018-06-06
  • 使用Python開發(fā)個京東上搶口罩的小實例(僅作技術(shù)研究學(xué)習(xí)使用)

    使用Python開發(fā)個京東上搶口罩的小實例(僅作技術(shù)研究學(xué)習(xí)使用)

    這篇文章主要介紹了使用Python開發(fā)個京東上搶口罩的小實例(僅作技術(shù)研究學(xué)習(xí)使用),需要的朋友可以參考下
    2020-03-03
  • python多種數(shù)據(jù)類型輸出為Excel文件

    python多種數(shù)據(jù)類型輸出為Excel文件

    本文主要介紹了將Python中的列表、元組、字典和集合等數(shù)據(jù)類型輸出到Excel文件中,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03
  • Python定義空函數(shù)的6種方法小結(jié)

    Python定義空函數(shù)的6種方法小結(jié)

    本文主要介紹了Python中定義空函數(shù)的6種方法,包括注釋、pass、return、Ellipsis等,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • Django打印出在數(shù)據(jù)庫中執(zhí)行的語句問題

    Django打印出在數(shù)據(jù)庫中執(zhí)行的語句問題

    這篇文章主要介紹了Django打印出在數(shù)據(jù)庫中執(zhí)行的語句,文中給大家提到了Django 查看執(zhí)行的sql語句方法,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07
  • Python實現(xiàn)Mysql數(shù)據(jù)庫連接池實例詳解

    Python實現(xiàn)Mysql數(shù)據(jù)庫連接池實例詳解

    這篇文章主要介紹了Python實現(xiàn)Mysql數(shù)據(jù)庫連接池實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • python中元組創(chuàng)建、索引訪問和元組作用詳解

    python中元組創(chuàng)建、索引訪問和元組作用詳解

    在Python中,元組是一種內(nèi)置的不可變序列,使用圓括號定義,元組的創(chuàng)建可以通過直接使用圓括號或者逗號分隔的方式進(jìn)行,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-11-11
  • Python多進(jìn)程fork()函數(shù)詳解

    Python多進(jìn)程fork()函數(shù)詳解

    今天小編就為大家分享一篇關(guān)于Python多進(jìn)程fork()函數(shù)詳解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • pandas的to_datetime時間轉(zhuǎn)換使用及學(xué)習(xí)心得

    pandas的to_datetime時間轉(zhuǎn)換使用及學(xué)習(xí)心得

    這篇文章主要給大家介紹了關(guān)于pandas的to_datetime時間轉(zhuǎn)換使用及學(xué)習(xí)心得的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用pandas具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08

最新評論

荔浦县| 滕州市| 蒲城县| 虹口区| 正定县| 霸州市| 资源县| 洛扎县| 莱西市| 定结县| 临桂县| 南岸区| 澄城县| 周至县| 沛县| 开鲁县| 金秀| 玉屏| 榆树市| 曲水县| 衡山县| 桦川县| 喀喇沁旗| 叶城县| 八宿县| 宜春市| 西乡县| 陕西省| 潮安县| 徐州市| 五台县| 秦皇岛市| 洛扎县| 安丘市| 四平市| 德令哈市| 延安市| 北碚区| 龙门县| 玛多县| 南漳县|