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

      
      

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

                接口自動(dòng)化測(cè)試之Mock

                1.Mock實(shí)現(xiàn)原理和實(shí)現(xiàn)機(jī)制

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

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

                Mock介紹

                • Mock這個(gè)詞在英語中有模擬的這個(gè)意思,因此我們可以猜測(cè)出這個(gè)庫(kù)的主要功能是模擬一些東西。準(zhǔn)確的說,Mock是Python中一個(gè)用于支持單元測(cè)試的庫(kù),它的主要功能是使用mock對(duì)象替代掉指定的Python對(duì)象,以達(dá)到模擬對(duì)象的行為。
                • 在項(xiàng)目的單元測(cè)試過程中,會(huì)遇到:
                • 1、接口的依賴
                • 2、外部接口調(diào)用
                • 3、測(cè)試環(huán)境非常復(fù)雜
                • 單元測(cè)試應(yīng)該只針對(duì)當(dāng)前單元進(jìn)行測(cè)試, 所有的內(nèi)部或外部的依賴應(yīng)該是穩(wěn)定的, 已經(jīng)在別處進(jìn)行測(cè)試過的.使用mock 就可以對(duì)外部依賴組件實(shí)現(xiàn)進(jìn)行模擬并且替換掉, 從而使得單元測(cè)試將焦點(diǎn)只放在當(dāng)前的單元功能。
                • 解決測(cè)試依賴
                • 例如,我們要測(cè)試A模塊,然后A模塊依賴于B模塊的調(diào)用。但是,由于B模塊的改變,導(dǎo)致了A模塊返回結(jié)果的改變,從而使A模塊的測(cè)試用例失敗。其實(shí),對(duì)于A模塊,以及A模塊的用例來說,并沒有變化,不應(yīng)該失敗才對(duì)。
                • 這個(gè)時(shí)候就是mock發(fā)揮作用的時(shí)候了。通過mock模擬掉影響A模塊的部分(B模塊)。至于mock掉的部分(B模塊)應(yīng)該由其它用例來測(cè)試。
                • 例子
                • 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()) 結(jié)果: 我已經(jīng)替換了數(shù)據(jù) “`

                2.簡(jiǎn)單的案例實(shí)現(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)
                • 針對(duì) add_and_multiply()函數(shù)編寫測(cè)試用例

                import mockimport requestsimport unittesturl = “www.baidu.com/login”data = { “user_id”: “001”, “password”: “caichen”}def post_request(url, data): “””登陸百度賬號(hào)””” res = requests.post(url, data).json() return resclass TestLogin(unittest.TestCase): “””單元測(cè)試””” def setUp(self) -> None: print(“case開始執(zhí)行”) def tearDown(self) -> None: print(“case執(zhí)行結(jié)束”) 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()# 錯(cuò)誤結(jié)果Fcase開始執(zhí)行======================================================================case執(zhí)行結(jié)束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)# 正常結(jié)果case開始執(zhí)行.case執(zhí)行結(jié)束———————————————————————-Ran 1 test in 0.000sOK

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

                舉個(gè)例子來說:我們有一個(gè)簡(jiǎn)單的客戶端實(shí)現(xiàn),用來訪問一個(gè)URL,當(dāng)訪問正常時(shí),需要返回狀態(tài)碼200,不正常時(shí),需要返回狀態(tài)碼404。首先,我們的客戶端代碼實(shí)現(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對(duì)象在單元測(cè)試中分別測(cè)試訪問正常和訪問不正常的情況。“`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.找到要替換的對(duì)象:我們需要測(cè)試的是visit_ustack這個(gè)函數(shù),那么我們需要替換掉send_request這個(gè)函數(shù)。

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

                3.使用這個(gè)mock對(duì)象替換掉我們想替換的對(duì)象。我們替換掉了client.send_request

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

                上面這個(gè)就是使用mock對(duì)象的基本步驟了。在上面的例子中我們替換了自己寫的模塊的對(duì)象,其實(shí)也可以替換標(biāo)準(zhǔn)庫(kù)和第三方模塊的對(duì)象,方法是一樣的:先import進(jìn)來,然后替換掉指定的對(duì)象就可以了。

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

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

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

                Mockrunner不會(huì)讀取任何配置文件,例如web.xml或struts-config.xml。您可以使用Mockrunner API指定所有參數(shù)。因此,可以將servlet,過濾器,標(biāo)簽和Struts動(dòng)作作為可重用組件進(jìn)行測(cè)試,而不管您在一個(gè)或另一個(gè)應(yīng)用程序中使用的設(shè)置如何。無法測(cè)試配置文件中的定義。如果要這樣做,可以將StrutsTestCase用于基于Struts的應(yīng)用程序或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)境
                • 使用命令啟動(dòng):java -jar moco-runner-0.12.0-standalone.jar http -p 8801 -c config.json
                • 配置config.json文件就可以進(jìn)行mock數(shù)據(jù)
                • [ { “response” : { “text” : “Hello, Moco” } } ] “` 使用命令啟動(dòng): java -jar moco-runner-0.12.0-standalone.jar http -p 8801 -c config.json 訪問http://localhost:8801 就會(huì)顯示 Hello, Moco
                • MockRunner在工作中運(yùn)用 構(gòu)建一個(gè)復(fù)雜的鏈接規(guī)則
                • [ { “request”:{ “uri”:”/monitorApplication/alert/confirm”, “method”:”PUT”, “text”:”{“id”:”123″}” }, “response”:{ “status”:200, “json”:{ “code”:”0″, “msg”:”OK!”, “data”:null } } } ]

                5.接口測(cè)試基礎(chǔ)面試

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

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

                最后:【可能給你帶來幫助的教程】軟件測(cè)試最新自學(xué)教程

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

                相關(guān)推薦

                聯(lián)系我們

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