使用robotframework做接口測試三——保持登錄狀態


調用登錄接口登錄了,其他的接口怎么保持登錄狀態呢?
  首先來看一看,web端或者說客戶端是怎么樣用cookie/token等保持登錄狀態的。一般來說,cookie都會在登錄接口由服務端返回,而且會是在header里面返回,並且,header里面有一個set-cookie這樣的key,是的,就是這家伙,會把登錄的cookie寫到客戶端的cookie緩存里,而后,當客戶端要請求指向這個path的其它接口時,將此緩存的cookie塞到請求里面請求,服務端認得這個cookie,即認為后面的接口為已登錄狀態。
  當然,也不排除,有些變態的系統,cookie並不是由登錄接口返回的。我碰到過一例,請求主頁面時即返回set-cookie,然后客戶端拿此cookie及用戶名密碼登錄成功后,cookie激活。有點變態,不是常規實現,后來被重構了。還有些接口,直接把登錄token啥的帶在url里面,直接在url拼一拼就能完成鑒權。要具體問題具體分析,我接觸的項目有限,只能講講比較常見的場景,給大家提供一些思路。
這是登錄接口的返回headers截圖:

登錄cookie.png


 
  比較常見的情況下,關鍵字create session會創建session對象,下一個請求帶上session別名,該session對象會自動完成請求在上下文傳遞過程中的 Cookie 處理,如下面的例子:

3-2第一個登錄.png


 
  另小伙伴們還可能有其他場景,如服務器間session共享,第二個請求要發往另一個host/域名,如某些app接口請求參數中需要帶上cookie/token字段,部分SSO,這時候新請求可能需要創建另一個session,將cookie主動塞到session里面,f5可以看到create session關鍵字有個${cookies}參數,嗯,就是放到這里面,下圖第11行腳本,注意是以鍵值對的方式傳遞的(抓包也看得出):

3-2cookie.png


 
  第8行有個把set suite variable的操作,目的是在此suite下還有跨域名(如其它二級域名)的請求,也可以使用該登錄cookie值,只要cookie未過期,只要服務器的session能識別。第8行也是為了重構做准備。
 
第一次重構:
  因為登錄是一個很多接口都會依賴的動作,所以要把它抽取成關鍵字,個人建議是放在suite setup里面,這樣做的好處是,省去了每個用例中都去調一次登錄接口的時間。關鍵字抽取,會抽取圖2的1-5行,圖3中的1-8行做為一個關鍵字,將用戶名密碼設為入參,重構完,大概會變成:

3-4登錄接口實現.png


 
  在這個suite中,是對banner功能點的接口測試集合,在suite setup里放了登錄接口,用例一運行就先登錄,名為newmanage的session保持了我的登錄狀態,其后的待測接口,都請求的同一個域名,因此使用alias為newmanage的get 和post請求,服務端認為已經登錄,請求成功。

  還有前面說的另外一種情況,在登錄時已經把cookie最核心的鍵值對取出來了,所以待測接口需要的話,新建個seesion把該cookie塞進去就行了,至於如何寫會使腳本更精煉合理,建議按實際情況重構腳本。嗯,最后養成好習慣,suite結束時delete all sessions放在suite teardown下。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM