91aaa在线国内观看,亚洲AV午夜福利精品一区二区,久久偷拍人视频,久久播这里有免费视播

<strong id="fvuar"></strong>

  • <sub id="fvuar"><dl id="fvuar"><em id="fvuar"></em></dl></sub>

    1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機構(gòu)

      手機站
      千鋒教育

      千鋒學(xué)習(xí)站 | 隨時隨地免費學(xué)

      千鋒教育

      掃一掃進入千鋒手機站

      領(lǐng)取全套視頻
      千鋒教育

      關(guān)注千鋒學(xué)習(xí)站小程序
      隨時隨地免費學(xué)習(xí)課程

      當(dāng)前位置:首頁  >  技術(shù)干貨  > Python中的Mock

      Python中的Mock

      來源:千鋒教育
      發(fā)布人:xqq
      時間: 2023-11-07 02:09:55 1699294195

      1.前言

      微服務(wù)架構(gòu)下,由于各類服務(wù)開發(fā)進度的不一致,導(dǎo)致聯(lián)調(diào)工作經(jīng)常會存在不確定性,進而導(dǎo)致項目延期

      在實際工作中,為了保證項目進度,我們經(jīng)常需要針對部分未完成模塊及不穩(wěn)定模塊采用Mock方式,以驗證已開發(fā)完的模塊

      本篇文章將介紹Python實現(xiàn)Mock的幾種常見方式

      2.Mock介紹

      Mock測試:在測試驗證過程中,對于那些尚未完成或不穩(wěn)定的對象,用一個虛擬對象來替代,以便測試的測試方法

      因此,這個虛擬的對象是Mock對象,Mock對象是真實對象在調(diào)試期間的代替品

      它的優(yōu)勢包含:

      ·前、后端并行開發(fā)

      ·模擬無法訪問的資源

      ·隔離系統(tǒng),避免臟數(shù)據(jù)干擾測試結(jié)果

      3.1mock

      在Python3.3之前使用mock,需要先安裝依賴

      #安裝mock依賴

      pip3installmock

      項目地址:

      https://github.com/testing-cabal/mock

      假設(shè)Product類中有2個方法

      ·get_product_status_by_id

      ·buy_product

      其中,get_product_status_by_id方法還沒有實現(xiàn);buy_product方法依賴于get_product_status_by_id方法的返回值。

      #product_impl.py

      classProduct(object):

      def__init__(self):

      pass

      defget_product_status_by_id(self,product_id):

      """

      通過商品id獲取產(chǎn)品信息(Mock)

      :return:

      """

      #待實現(xiàn)查詢數(shù)據(jù)庫的業(yè)務(wù)邏輯

      pass

      defbuy_product(self,product_id):

      """

      購買產(chǎn)品(真實邏輯)

      :return:

      """

      #產(chǎn)品信息

      #{"id":1,"name":"蘋果","num":23}

      product=self.get_product_status_by_id(product_id)

      ifproduct.get("num")>=1:

      result={"status":0,"msg":"購買成功!"}

      else:

      result={"status":1,"msg":"購買失敗,庫存不足!"}

      returnresult

      Mock的步驟如下:

      ·導(dǎo)入使用mock中的patch方法

      ·作為測試方法的裝飾器,對get_product_status_by_id方法進行Mock,方法參數(shù)為Mock對象

      ·測試方法中,對該Mock對象設(shè)置一個返回值

      ·調(diào)用并斷言

      frommockimportpatch

      frommock_.product_implimportProduct

      @patch('mock_.product_impl.Product.get_product_status_by_id')

      deftest_succuse(mock_get_product_status_by_id):

      #Mock方法,指定一個返回值

      mock_get_product_status_by_id.return_value={"id":1,"name":"蘋果","num":23}

      product=Product()

      assertproduct.buy_product(1).get("status")==0

      需要注意的是,Mock此方法的時候,必須制定該方法的完整路徑

      使用@patch.object同樣能完成Mock,不同的是,@patch.object包含2個參數(shù)

      第一個參數(shù)為該方法所在的類;第二個參數(shù)為方法名

      frommockimportpatch

      frommock_.product_implimportProduct

      #Mock一個方法

      #@patch.object:對象、方法名

      @patch.object(Product,'get_product_status_by_id')

      deftest_succuse(mock_get_product_status_by_id):

      #Mock方法,指定一個返回值

      mock_get_product_status_by_id.return_value={"id":1,"name":"蘋果","num":23}

      product=Product()

      assertproduct.buy_product(1).get("status")==0

      3.2unittest.mock

      Python3.3之后,mock作為標(biāo)準(zhǔn)庫,已經(jīng)內(nèi)置到unittest中了

      還是以3.1的場景為例,使用unittest編寫一個測試用例

      Mock步驟如下:

      ·導(dǎo)入unittest框架中的mock文件

      ·實例化Product對象

      ·mock.Mock(return_value=*)方法

      ·對get_product_status_by_id方法進行Mock

      ·調(diào)用并斷言

      importunittest

      fromunittestimportmock

      fromunittest_mock.product_implimportProduct

      classTestProduct(unittest.TestCase):

      deftest_success(self):

      #成功結(jié)果

      mock_success_value={"id":1,"name":"蘋果","num":23}

      product=Product()

      product.get_product_status_by_id=mock.Mock(return_value=mock_success_value)

      #調(diào)用實際函數(shù)

      assertproduct.buy_product(1).get("status")==0

      if__name__=="__main__":

      unittest.main()

      3.3pytest.mock

      相比unittest,pytest由于強大的插件支持,用戶群體可能更大!

      如果項目本身使用的框架是pytest,則Mock更建議使用pytest-mock這個插件

      #pytest依賴

      pip3installpytest

      Mock步驟如下:

      ·使用pytest編寫測試方法,參數(shù)為mocker

      ·實例化Product對象

      ·使用mocker.patch()方法對get_product_status_by_id方法進行Mock,并設(shè)置返回值

      ·調(diào)用并斷言

      importpytest

      frompytest_mock_.product_implimportProduct

      deftest_buy_product_success(mocker):

      """

      購買成功Mock

      :parammocker:

      :return:

      """

      #實例化一個產(chǎn)品對象

      product=Product()

      #對Product中的方法的返回值進行Mock

      mock_value={"id":1,"name":"蘋果","num":23}

      #Mock方法

      #注意:需要指定方法的完整路徑

      #mocker.patch的第一個參數(shù)必須是模擬對象的具體路徑,第二個參數(shù)用來指定返回值

      product.get_product_status_by_id=mocker.patch("product_impl.Product.get_product_status_by_id",

      return_value=mock_value)

      #調(diào)用購買產(chǎn)品的方法

      result=product.buy_product(1)

      assertresult.get("status")==0

      需要注意的是,mocker.patch方法第一個參數(shù)必須是Mock對象的完整路徑

      4.最后

      文中對Python中常見的Mock方案進行了講解,實際應(yīng)用中,建議根據(jù)項目實際情況進行選型

      以上內(nèi)容為大家介紹了Python中的Mock,希望對大家有所幫助,如果想要了解更多Python相關(guān)知識,請關(guān)注IT培訓(xùn)機構(gòu):千鋒教育。http://www.jsszjs.cn/

      聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
      10年以上業(yè)內(nèi)強師集結(jié),手把手帶你蛻變精英
      請您保持通訊暢通,專屬學(xué)習(xí)老師24小時內(nèi)將與您1V1溝通
      免費領(lǐng)取
      今日已有369人領(lǐng)取成功
      劉同學(xué) 138****2860 剛剛成功領(lǐng)取
      王同學(xué) 131****2015 剛剛成功領(lǐng)取
      張同學(xué) 133****4652 剛剛成功領(lǐng)取
      李同學(xué) 135****8607 剛剛成功領(lǐng)取
      楊同學(xué) 132****5667 剛剛成功領(lǐng)取
      岳同學(xué) 134****6652 剛剛成功領(lǐng)取
      梁同學(xué) 157****2950 剛剛成功領(lǐng)取
      劉同學(xué) 189****1015 剛剛成功領(lǐng)取
      張同學(xué) 155****4678 剛剛成功領(lǐng)取
      鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
      董同學(xué) 138****2867 剛剛成功領(lǐng)取
      周同學(xué) 136****3602 剛剛成功領(lǐng)取
      相關(guān)推薦HOT