亚洲精品中文免费|亚洲日韩中文字幕制服|久久精品亚洲免费|一本之道久久免费

      
      

            <dl id="hur0q"><div id="hur0q"></div></dl>

                接口自動化測試之Mock

                1.Mock實現(xiàn)原理和實現(xiàn)機制

                在某些時候,后端在開發(fā)接口的時候,處理邏輯非常復雜,在測試的時候,后端在未完成接口的情況下該如何去測試呢?

                我們需要測試,但是有些請求又需要修改一下參數(shù),或者改變一下request實現(xiàn)的方式,比如修改狀態(tài)碼,產(chǎn)生的圖片要進行替換,或者是替換執(zhí)行文件等

                Mock介紹

                • Mock這個詞在英語中有模擬的這個意思,因此我們可以猜測出這個庫的主要功能是模擬一些東西。準確的說,Mock是Python中一個用于支持單元測試的庫,它的主要功能是使用mock對象替代掉指定的Python對象,以達到模擬對象的行為。
                • 在項目的單元測試過程中,會遇到:
                • 1、接口的依賴
                • 2、外部接口調(diào)用
                • 3、測試環(huán)境非常復雜
                • 單元測試應該只針對當前單元進行測試, 所有的內(nèi)部或外部的依賴應該是穩(wěn)定的, 已經(jīng)在別處進行測試過的.使用mock 就可以對外部依賴組件實現(xiàn)進行模擬并且替換掉, 從而使得單元測試將焦點只放在當前的單元功能。
                • 解決測試依賴
                • 例如,我們要測試A模塊,然后A模塊依賴于B模塊的調(diào)用。但是,由于B模塊的改變,導致了A模塊返回結果的改變,從而使A模塊的測試用例失敗。其實,對于A模塊,以及A模塊的用例來說,并沒有變化,不應該失敗才對。
                • 這個時候就是mock發(fā)揮作用的時候了。通過mock模擬掉影響A模塊的部分(B模塊)。至于mock掉的部分(B模塊)應該由其它用例來測試。
                • 例子
                • import requests from unittest import mock def request_lemonfix(): “”” :return: “”” res = requests.get(‘http://www.baidu.com’) return res.status_code.encode(‘utf-8’) if __name__ == ‘__main__’: request_lemonfix = mock.Mock(return_value=”我已經(jīng)替換了數(shù)據(jù)”) print(request_lemonfix()) 結果: 我已經(jīng)替換了數(shù)據(jù) “`

                2.簡單的案例實現(xiàn)mock

                • 基本功能 # function.py def multiply(x, y): return x * y def add_and_multiply(x, y): addition = x + y multiple = multiply(x, y) # 回調(diào)函數(shù) return (addition, multiple)
                • 針對 add_and_multiply()函數(shù)編寫測試用例

                import mockimport requestsimport unittesturl = “www.baidu.com/login”data = { “user_id”: “001”, “password”: “caichen”}def post_request(url, data): “””登陸百度賬號””” res = requests.post(url, data).json() return resclass TestLogin(unittest.TestCase): “””單元測試””” def setUp(self) -> None: print(“case開始執(zhí)行”) def tearDown(self) -> None: print(“case執(zhí)行結束”) def test_01(self): “””模擬數(shù)據(jù)判斷是否正確””” url = “www.baidu.com/login/tieba” data = { “user_id”: “001” } sucess_test = mock.Mock(return_value=data) post_request = sucess_test res = post_request self.assertEqual(“654321”, res()) # self.assertEqual({‘user_id’: ‘001’},res())if __name__ == ‘__main__’: unittest.main()# 錯誤結果Fcase開始執(zhí)行======================================================================case執(zhí)行結束FAIL: test_01 (__main__.TestLogin)模擬數(shù)據(jù)判斷是否正確———————————————————————-Traceback (most recent call last): File “C:/Users/x1c/Desktop/untitled/mocktest.py”, line 35, in test_01 self.assertEqual(“654321”, res())AssertionError: ‘654321’ != {‘user_id’: ‘001’}———————————————————————-Ran 1 test in 0.001sFAILED (failures=1)# 正常結果case開始執(zhí)行.case執(zhí)行結束———————————————————————-Ran 1 test in 0.000sOK

                3.mock實現(xiàn)get數(shù)據(jù)模擬

                舉個例子來說:我們有一個簡單的客戶端實現(xiàn),用來訪問一個URL,當訪問正常時,需要返回狀態(tài)碼200,不正常時,需要返回狀態(tài)碼404。首先,我們的客戶端代碼實現(xiàn)如下:“`import requestsdef send_request(url): r = requests.get(url) return r.status_codedef visit_ustack(): return send_request(‘http://www.ustack.com’)“`# 外部模塊調(diào)用visit_ustack()來訪問baidu的官網(wǎng)。下面我們使用mock對象在單元測試中分別測試訪問正常和訪問不正常的情況。“`import unittestimport mockimport clientclass TestClient(unittest.TestCase):def test_success_request(self): success_send = mock.Mock(return_value=’200′) client.send_request = success_send self.assertEqual(client.visit_ustack(), ‘200’)def test_fail_request(self): fail_send = mock.Mock(return_value=’404′) client.send_request = fail_send self.assertEqual(client.visit_ustack(), ‘404’) “`

                1.找到要替換的對象:我們需要測試的是visit_ustack這個函數(shù),那么我們需要替換掉send_request這個函數(shù)。

                2.實例化Mock類得到一個mock對象,并且設置這個mock對象的行為。在成功測試中,我們設置mock對象的返回值為字符串“200”,在失敗測試中,我們設置mock對象的返回值為字符串”404″。

                3.使用這個mock對象替換掉我們想替換的對象。我們替換掉了client.send_request

                4.寫測試代碼。我們調(diào)用client.visit_ustack(),并且期望它的返回值和我們預設的一樣。

                上面這個就是使用mock對象的基本步驟了。在上面的例子中我們替換了自己寫的模塊的對象,其實也可以替換標準庫和第三方模塊的對象,方法是一樣的:先import進來,然后替換掉指定的對象就可以了。

                4.Mock和mockrunner的區(qū)別

                Mockrunner用在J2EE環(huán)境中進行應用程序的模擬測試。它不僅支持Struts actions,servlets,過濾器和標簽類,還包括一個JDBC和一個JMS測試框架,可以用于測試基于EJB的應用程序。

                Mockrunner擴展了JUnit并模擬了必要的行為,而無需調(diào)用實際的基礎結構。它不需要正在運行的應用程序服務器或數(shù)據(jù)庫。此外,它不會調(diào)用web容器或Struts ActionServlet。它非常快速,使用戶可以在測試的所有步驟中操縱所有涉及的類和模擬對象。它可以用于為基于J2EE的應用程序編寫非常復雜的單元測試,而不會產(chǎn)生任何開銷。Mockrunner不支持任何類型的容器內(nèi)測試。

                Mockrunner不會讀取任何配置文件,例如web.xml或struts-config.xml。您可以使用Mockrunner API指定所有參數(shù)。因此,可以將servlet,過濾器,標簽和Struts動作作為可重用組件進行測試,而不管您在一個或另一個應用程序中使用的設置如何。無法測試配置文件中的定義。如果要這樣做,可以將StrutsTestCase用于基于Struts的應用程序或Cactus。

                Mockrunner支持Java版本從1.3到1.6以及J2EE 1.3,J2EE 1.4和JavaEE5。尚不支持EJB 3.0。Mockrunner支持Struts版本1.1、1.2和1.3。

                下載地址:Mockrunner download | SourceForge.net

                • mockrunner必須配置java環(huán)境
                • 使用命令啟動:java -jar moco-runner-0.12.0-standalone.jar http -p 8801 -c config.json
                • 配置config.json文件就可以進行mock數(shù)據(jù)
                • [ { “response” : { “text” : “Hello, Moco” } } ] “` 使用命令啟動: java -jar moco-runner-0.12.0-standalone.jar http -p 8801 -c config.json 訪問http://localhost:8801 就會顯示 Hello, Moco
                • MockRunner在工作中運用 構建一個復雜的鏈接規(guī)則
                • [ { “request”:{ “uri”:”/monitorApplication/alert/confirm”, “method”:”PUT”, “text”:”{“id”:”123″}” }, “response”:{ “status”:200, “json”:{ “code”:”0″, “msg”:”OK!”, “data”:null } } } ]

                5.接口測試基礎面試

                • 項目中如何做接口測試?
                • 通過測試工具…進行參數(shù)、請求參數(shù)、返回參數(shù)效驗
                • 接口開發(fā)過程中如何進行case編寫
                • 規(guī)則文檔熟悉通過mock校驗格式
                • 如何理解Mock
                • 模擬返回參數(shù),模擬接口
                • Mock在工作中的運行?
                • 幫助前端實現(xiàn)正常開發(fā)

                好了各位,以上就是這篇文章的全部內(nèi)容了,能看到這里人啊,都是人才。

                最后:【可能給你帶來幫助的教程】軟件測試最新自學教程

                鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場,版權歸原作者所有,如有侵權請聯(lián)系管理員(admin#wlmqw.com)刪除。
                用戶投稿
                上一篇 2022年7月4日 06:38
                下一篇 2022年7月4日 06:38

                相關推薦

                聯(lián)系我們

                聯(lián)系郵箱:admin#wlmqw.com
                工作時間:周一至周五,10:30-18:30,節(jié)假日休息