軟體測試技術乾貨丨舉個例子告訴你,未開發完成的介面該如何測試
前言
在做介面測試的過程中,介面還沒有開發完成呢,領導就讓介入測試,剛開始小夥伴們肯定會懵,介面都沒有開發完成,怎麼測試?有的狀態不容易構造目前介面沒有辦法實現,這個時候怎麼測試?這個時候就要引入新的知識點---mock。
mock
什麼是mock?mock測試就是在測試過程中,對於某些不容易構造或者不容易獲取的物件,用一個虛擬的物件來建立以便測試的測試方法。在工作中如果在介面沒有開發完成時,也可以進行來模擬介面的返回資料從而驗證介面的正確性。加我VX:atstudy-js 回覆“測試”,進入軟體測試學習交流裙~~
mock需要場景
工作中,為了節約專案時間,開發測試可以進行同步進行,當開發沒有完成介面時,測試人員可以透過mock來模擬介面返回資料內容。
模擬暫時無法實現的功能:比如真實的支付功能。
測試覆蓋內容,當我們執行介面想要模擬狀態400、500的場景,這個時候也可以透過mock。
python中的mock
python中有多重執行mock的方法,其中mock模組在python3.3以上版本已經內建到單元測試unittest中,python3.3以下的版本需要透過pip install mock的方法進行安裝。
mock引數
mock在使用過程中需要最常用的3個引數。
name:表示mock的名稱。
from unittest import mock
result = mock.Mock(name='mock的名稱')
print(result)
# 結果:
<Mock name='mock的名稱' id='2721150378120'>
return_value:表示mock的值。
side_effect:表示mock需要呼叫的物件(當使用return_value和side_effect值同時存在時,優先返回side_effect的值)。
unittest.mock()
這裡安靜舉一個天氣的例子進行實現,測試查詢天氣這個介面,最近上海都沒有雪,那麼我怎麼去模擬雪這個場景?需要等到真正下雪的那天才可以嗎?這裡透過unittest.mock的方法。加我VX:atstudy-js 回覆“測試”,進入軟體測試學習交流裙~~
import unittest
from unittest import mock
class Test01(unittest.TestCase):
def weather(self):
'''天氣介面'''
# result = {'result': "雪", 'status': '下雪了!'}
pass
def weather_result(self):
'''模擬天氣介面返回值'''
result = Test01.weather(self)
if result['result'] == '雪':
print('下雪了!!!')
elif result['result'] == '雨':
print('下雨了!!!')
elif result['result'] == '晴天':
print('晴天!!!!')
else:
print('返回值錯誤!')
return result['status']
def test_01(self):
'''模擬下雪天場景'''
mock_xue_result = {'result': "雪", 'status': '下雪了!'}
# 使用mock庫進行模擬
Test01.weather = mock.Mock(return_value=mock_xue_result)
statues = Test01.weather_result(self)
self.assertEqual(statues, '下雪了!')
def test_02(self):
'''模擬下雨天場景'''
mock_yu_result = {'result': "雨", 'status': '下雨了!'}
# 使用mock庫進行模擬
Test01.weather = mock.Mock(return_value=mock_yu_result)
statues = Test01.weather_result(self)
self.assertEqual(statues, '下雨了!')
if __name__ == '__main__':
unittest.main()
透過執行發現,我們想要的下雪天氣已經模擬成功了,說明當查詢天氣介面返回為雪的時候,就代表會下雪了。這樣就不用在等到下雪的時候進行測試這個介面了。
mock.patch()
mock.patch()是mock的一個裝飾器方法,其中patch的值表示寫入需要mock的物件,還拿天氣舉例子,這裡的patch的引數就需要填寫天氣的介面,需要透過python呼叫的方式進行填寫天氣介面。
# w1.py
def weather():
'''天氣介面'''
pass
def weather_result():
'''模擬天氣介面返回值'''
result = weather()
if result['result'] == '雪':
print('下雪了!!!')
elif result['result'] == '雨':
print('下雨了!!!')
elif result['result'] == '晴天':
print('晴天!!!!')
else:
print('返回值錯誤!')
return result['status']
透過mock.patch()裝飾器進行來mock返回資料。
import unittest
from unittest import mock
# 匯入介面檔案
import w1
class Test01(unittest.TestCase):
@mock.patch(target="w1.weather")
def test_01(self, mock_login):
'''下雪了'''
mock_login.return_value={'result': "雪", 'status': '下雪了!'}
statues = w1.weather_result()
self.assertEqual(statues, '下雪了!')
@mock.patch(target='w1.weather')
def test_02(self,mock_login):
'''下雨了!'''
mock_login.return_value = {'result': "雨", 'status': '下雨了!'}
statues = w1.weather_result()
self.assertEqual(statues, '下雨了!')
if __name__ == '__main__':
unittest.main()
透過執行後發現,測試透過,已經成功的模擬了天氣介面的返回值內容。
pytest.mock()
上面介紹的屬於unittest中的mock,既然unittest中存在mock模組,那麼pytest中也存在mock模組pytest-mock。
安裝:
pip install pytest-mock
這裡的mock和unittest的mock基本上都是一樣的,唯一的區別在於pytest.mock需要匯入需要mock物件的詳細路徑。
# weateher_r.py
class Mock_weather():
def weather(self):
'''天氣介面'''
pass
def weather_result(self):
'''模擬天氣介面'''
result = self.weather()
if result['result'] == '雪':
print('下雪了!!!')
elif result['result'] == '雨':
print('下雨了!!!')
elif result['result'] == '晴天':
print('晴天!!!!')
else:
print('返回值錯誤!')
return result['status']
先將需要模擬的天氣介面,以及需要模擬的場景的程式碼寫好,然後在進行遵循pytest的用例規範進行書寫關於mock的測試用例。
# test_01.py
import pytest
from test_01.weather_r import Mock_weather
def test_01(mocker):
# 例項化
p = Mock_weather()
moke_value = {'result': "雪", 'status': '下雪了!'}
# 透過object的方式進行查詢需要mock的物件
p.weather = mocker.patch.object(Mock_weather, "weather", return_value=moke_value)
result =p.weather_result()
assert result=='下雪了!'
def test_02(mocker):
# 例項化
product = Mock_weather()
# Mock的返回值
mock_value = {'result': "雨", 'status': '下雨了!'}
# 第一個引數必須是模擬mock物件的完整路徑
product.weather = mocker.patch('test_01.weather_r.Mock_weather.weather', return_value=mock_value)
result = product.weather_result()
assert result=='下雨了!'
if __name__ == '__main__':
pytest.main(['-vs'])
透過上述程式碼,安靜提供pytest中mock的2種方法:
第一種中的第一個引數是透過object的方式進行查詢關於Mock_weather的類,然後在找到下面的需要mock的物件方法名稱,第2個參數列示mock的值。
第二種方法中的第一個引數是透過完整的路徑進行找到需要mock的物件,第2個引數是mock的值。
透過執行發現,兩種方法都是可以mock成功的。
總結
簡單的透過一個小的例子介紹瞭如何在python中使用mock的方法。大家也可以將mock方法加入到我們需要用到的專案中。從而更加方面的完成自動化,以及覆蓋更多的自動化測試用例。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31407649/viewspace-2768969/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 乾貨 | Dubbo 介面測試技術,測試開發進階必備
- 軟體測試技術-黑盒測試
- 【軟體測試】——介面測試
- 技術乾貨丨如何在Docker環境下搭建測試管理平臺?Docker
- 乾貨丨軟體測試行業迎來新時代,AI將成為主流技術?行業AI
- 軟體整合測試乾貨分享,2022國內軟體測試公司排名
- 乾貨分享▏軟體效能測試包括哪些測試內容?
- 介面測試工具好物分享,讓你的軟體測試事半功倍
- 學會軟體測試技術以後的發展如何?
- 技術乾貨:關於效能測試面試題及答案面試題
- 軟體測試技術及工具
- 軟體測試的四個測試階段簡析,軟體測試報告需要多少錢?測試報告
- 測試開發之介面篇-使用K6完成介面自動化測試
- 軟體測試培訓分享:軟體測試和軟體開發學哪個好呢
- 乾貨丨實現UI自動化測試,這5個常見問題你應該知道!UI
- 軟體測試面試問題_介面測試(二)面試
- 軟體測試之資料庫測試技術系列七資料庫
- 作為一個軟體測試新手,你知道軟體測試的幾個方向嗎?
- 為什麼要做介面測試?可做介面測試的軟體測試公司分享
- 舉個例子!Tableau技巧(27):如何在Tableau中用Python(技術乾貨,建議收藏)Python
- 如何讓軟體開發從功能測試轉入應用測試?
- 軟體確認測試乾貨分享,上海第三方軟體測試機構有哪些?
- 軟體確認測試有哪些內容?第三方軟體測試公司乾貨分享
- 滲透測試公司對測試報告寫作的乾貨經驗測試報告
- 測試人必須瞭解的軟體測試流程及5大測試過程模型,經典乾貨分享!模型
- 軟體效能測試報告應該包含的內容,效能測試報告需要多少錢?測試報告
- 第三方軟體測試報告是全國通用嗎?權威的軟體測試報告該如何申請?測試報告
- 軟體測試報告該怎麼編寫?第三方軟體測試機構如何收費?測試報告
- 軟體測試開發:常見測試型別概念型別
- 乾貨分享丨3種SQL語句最佳化方法,軟體測試必備!SQL
- 【乾貨】每個軟體測試員最怕被問的問題:“測得怎麼樣了?”
- 迴歸測試應該怎麼做?可出權威軟體測試報告的軟體測評中心推薦測試報告
- 軟體測試職業發展方向?2020軟體測試工作前景如何
- 乾貨|測試人員如何助軟體成功上線?如何建立一個好的部署計劃?
- 軟體測試員如何提取測試需求?
- 軟體測試應該重點關注的測試過程,廣東軟體測試公司推薦
- 軟體測試的五個目的,你知道幾個?
- 軟體安全測試有哪些測試手段?軟體測試報告收費貴嗎?測試報告