丨websocket接口如何測試一個完全陌生的協(xié)議_第1頁
丨websocket接口如何測試一個完全陌生的協(xié)議_第2頁
丨websocket接口如何測試一個完全陌生的協(xié)議_第3頁
丨websocket接口如何測試一個完全陌生的協(xié)議_第4頁
丨websocket接口如何測試一個完全陌生的協(xié)議_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

今天我WebSocket告訴你當你第一次接觸一個完全陌生的協(xié)議接口時,你要作為一名測試工程師,在面對一個陌生協(xié)議的接口測試時,你是不是會常常感到很無助?面對這樣的任務時,你的第一反應肯定是向開發(fā)工程師求助,因為開發(fā)工程師基于新協(xié)議已經完成了接口開發(fā),向開發(fā)工程師求助顯然是最好的辦法。代碼開檔現代內容拿到資料馬上上面出的順序投入學習。那在面對一個陌生的新協(xié)議時,測試工程師的首要任務是什么速地掌握驗證。在時間緊迫的情況下,如果我們還是先學習新協(xié)議的基礎知識,再學怎么使用它,就無疑壓榨了測試的工期,也會讓我們在真正開始工作時手忙腳亂。所以,我們要從解決實際問題的角度出發(fā),直接拿到開發(fā)工程師提供的調用客戶端代碼,這樣我們就可以快速完成工作了;在完成工作的后續(xù)時間里,我們也可以慢慢補充基礎知識。這里需要你注意的是,我并不是說基礎知識不重要,而是說在項目進行過程中,學習基礎知識很多時候沒有完成項目的工作重要。第一次接觸WebSocket大概是在2017我第一次接觸到WebSocket議的接口,當開發(fā)工程師告訴我這是一個WebSocket的接口時,我一臉懵,完全不知道要如何開始測試它。我先做的就是和開發(fā)要了他們調用方的代碼,當我第一次看到這個代碼時,還是很難為情的,因為它是用NodsNods這種情況我相信你肯定也遇見過,那就是開發(fā)工程師很Nice法利用它。但這里告訴你的是,面對一個陌生協(xié)議的接口測試任務時,無論如何,第一次你還是需要先拿到并了解開發(fā)工程師寫的客戶端代碼,因為這樣,你就可以對調用方式、參數等接口相關的一些內容有初步印象。在讀完相關代碼后,你就算是和這些接口完成了首面”,下面你就要想辦法敲開接口的大門,讓自己能被測接口。由于技術棧問題,我沒辦法借助開發(fā)工程師的力量完成接口測試任務,因此我接下來想到的是,借助一些自己已經熟悉的工具來完成本次測試。我第一個想到的就是我們在之前課程中一起使用過的,因為在任何一個接口項目開始時,無論開發(fā)是不是給了我接口文檔,我都會先用Fiddler看一下那么WebSocket用Fiddler怎么搞定?我當時搜索了一下,還真是有辦法,具體的辦法我就不在這里多說了,其實主要就是修改了Fiddler中Rules下的CustomizeRules,如果但從下面的圖中你可以看到,雖然我找到了FiddlerWebSocket口的辦法,卻不難發(fā)現,所截獲的全部消息都在日志里面,根本無法操作,所以用Fiddler完成WebSocket測試的想法也就胎死腹中了。但是,我可以借助Fiddler分析WebSocket的接口,這也和我們一開始給Fiddler這款工WebSocket當用已有工具基礎解決WebSocket接口測試這個想法破滅了后,我開始尋求通過編寫代碼,解決WebSocket的接口測試。在這里,我還是建議你要以你自己的技術棧為出發(fā)點,尋找解決問題的方法。由于我的主要編程語言是Python,因此下面一些講解的示例代碼段,我還是以Python為例,但是你要知道,解決問題的思路并不限于Python的編程語我發(fā)現PythonWebSocket議庫,因此我只要用它完成客戶端的撰寫,就可以進行接口測試了。這里,我寫下了第一個WebSocket的調用代碼(這里我們以為例),如下面圖中所示,我在代碼里面代代123456#引入websocket的create_connectionfromwebsocketimportcreate_connection#建立和WebSocket接口的ws=#打印日print("發(fā)送o,7789#o,#將WebSocketresult=ws.recv()#打印返回的result#關閉WebSocketresult不知道你發(fā)現沒有,上面的代碼和HTTP協(xié)議的接口類似,都是先和一個請求建立連接,然后發(fā)送信息。它們的區(qū)別是,WebSocket一個長連接,因此需要人為的建立連接,然后再關閉,而HTTP卻并不需要進行這一操作。我相信你肯定還記得在測試框架那一節(jié)(04)中,我們學習了一些線性的接口測試碼,然后通過分析這些代碼抽象出Common類,隨著Common類的不斷豐富,就形成了你自己的測試框架,那么現在問題來了:Common類中可以也放入WebSocket的通WebSocket看見上面的代碼,我們的第一反應應該是,這里有什么東西可以放到我們自己的WebSoct接口封裝進你的框我們面課程中封裝了Common類,你可以在它的構造函數中,添加一個API類型的參數,以便于知道自己要做的是什么協(xié)議的接口,其中http代表HTTP協(xié)議接口,ws代表WebSocket協(xié)議接口。由于WebSocket是一個長連接,我們在Common類析構函數中添加了關閉ws的代碼,以釋放WebSocket長連接。依據前面的交互流程,實現代代123456789#!/usr/bin/env#-*-coding:utf-8-python代碼中引入requests庫,引入后才可以在你的代碼中使用對應的類以及成員函數importrequestsfromwebsocketimport#定義一個common的類,它的父類是class#common的構造函 init:paramapi_type:接口類似當前支持http,ws,http就是http協(xié)議,ws是Websocket協(xié):paramurl_root:被測系統(tǒng)的跟路ifself.ws=elifself.url_root= #ws協(xié)議的消息發(fā)def:paramparams:websocket接口的:return:接口的返回res=return #common類的析構函數,清理沒有用的 delifdefget(self,uri,封裝你自己的get請求,uri是路由,params是get請求的參數,如果沒有默認為:paramuri:路:paramparams:傳遞參數,string類型,默認為:return:此次的#拼湊地ifparamsisnoturl=self.url_root+uri+url=self.url_root+#通過get請求對應地res=#返回request的Response結果,類型為requests的Response類returndefpost(self,uri,封裝你自己的post方法,uri是路由,params是post請求需要傳遞的參數,如果沒有參數這:paramuri:路:paramparams:傳遞參數,string類型,默認為:return:此次的#拼湊地url=self.url_root+ifparamsisnot#如果有參數,那么通過post方式對應的url,并將參數賦值給requests.post默認參數#返回request的Response結果,類型為requests的Response類res=requests.post(url,#如果無參數,方式如#返回request的Response結果,類型為requests的Response類res=returndef封裝你自己的put方法,uri是路由,params是put請求需要傳遞的參數,如果沒有參數這里為:paramuri:路:paramparams:傳遞參數,string類型,默認為:return:此次的url=ifparamsisnot#如果有參數,那么通過put方式對應的url,并將參數賦值給requests.put默認參數#返回request的Response結果,類型為requests的Response類res=requests.put(url,#如果無參數,方式如#返回request的Response結果,類型為requests的Response類res=returndef封裝你自己的delete方法,uri是路由,params是delete請求需要傳遞的參數,如果沒有參:paramuri:路:paramparams:傳遞參數,string類型,默認為:return:此次的url=self.url_root+ifparamsisnot#如果有參數,那么通過put方式對應的url,并將參數賦值給requests.put默認參數#返回request的Response結果,類型為requests的Response類res=requests.delete(url,#如果無參數,方式如#返回request的Response結果,類型為requests的Responseres=return候看一下對應的方法就好了。它是一個超級工具集合,最后會變成你自己的類似哆啦A夢那么,使用上述的Common類將上面那個一樣的進行改造后,就得出了下面代代123456789fromcommonimportCommon#建立和WebSocket接口的con=#獲取返回result=con.send('delcono,,從后的中,不是體會架的了?讓代得更潔和WebSocktP協(xié)議又包含WebSoct協(xié)議的接口測試框架了,隨著你不斷地積累新協(xié)議,你的框架會越來越強你自庫也斷擴隨著它的完善會讓接口工作越來越簡單,越來越快速。美好的時光過得都很快,又到了本節(jié)課結束的時候了,我今天主要講了面對一個陌生協(xié)(比如 WebSocket),你該如何從零開始完成接口測試任務借力開發(fā)工程師。你首先該借力就是開發(fā)工程師,但你不要進入開發(fā)工程師給你的那歸入框架。無論你使用哪法,在完成測試工作后,你還是要掌握對應的理論基礎,同時想辦法將這個一開始陌生的接口,通過自己熟悉的方式合并到你自己的框架中,不斷擴充自己框架的測試能力,不斷豐富你自己的測試。我們今天一起學習了如何陌生協(xié)議接口測試難題的步驟,那對WebSocket(既可以是第一次接觸的協(xié)議,也可以是企業(yè)私有協(xié)議),你是如何解決的呢?歡迎你在留言區(qū)中留下你的疑問和你的做法。 歸科技所有 不得售賣。頁面已增加防盜追蹤,將依法其上一 06|接口測試平臺:工具和框架不可以兼容下一 08|測試數據:是不是可以把所有的參數都保存到Excel中精選留言展3 3羅春南ifapi_type=='ws':self.ws=create_connection(url_root)elifapi_type=='http':self.url_root=展1(如:junit)個人覺得遇到這種情況,要會點編程,孰練測試框架勝算才大 展1展LH展展22 init(self,url_root,api_type)』,用于展

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論