王芬
摘要:接口測試是軟件測試工作中重要的組成部分之一,同時也是整個測試工作的難點。如何切實提高軟件接口測試技術(shù)的效率以及檢測結(jié)果的可靠性,是當前軟件測試領(lǐng)域主要研究的內(nèi)容。在接口測試中,Web后臺登錄認證機制,可以通過JMeter 測試軟件中后置處理器的正則表達式提取器,提取登錄身份驗證信息token值,從而進行數(shù)據(jù)關(guān)聯(lián)來實現(xiàn)登錄狀態(tài)保持。
關(guān)鍵詞:接口測試;JMeter;數(shù)據(jù)關(guān)聯(lián)正則表達式提取器
中圖分類號:TP391? ? ? 文獻標識碼:A
文章編號:1009-3044(2021)11-0067-02
軟件開發(fā)既要做前端也要做后端,前端只是提供一個頁面給用戶看結(jié)果以及提供頁面給用戶做輸入,后端才是整個業(yè)務的核心,用于處理業(yè)務請求實現(xiàn)具體的功能。后端邏輯相對很復雜,所以在開發(fā)的時候,會由架構(gòu)師確定接口,然后再針對各個接口實現(xiàn)其具體的功能,比如登錄接口、注冊接口,增、刪、改、查接口等。接口測試是驗證這個接口的功能是否正確實現(xiàn),它是基于Http的請求和Http的響應,所以需要通過請求和響應分別來輸入數(shù)據(jù)以及檢查的結(jié)果。接口測試工具有很多,比如soapUI、postman、JMeter等,這里選擇JMeter[1]測試工具進行接口測試。
1 什么是數(shù)據(jù)關(guān)聯(lián)
將服務器提供動態(tài)變化的值存放在變量中,當需要使用該變量時,自動從服務器響應的信息中獲取該值,并在后面使用的過程中進行替換。JMeter測試軟件的后置處理器之正則表達式提取器可以實現(xiàn)數(shù)據(jù)關(guān)聯(lián),應用場景:1)在一個線程組中,B請求需要使用A請求返回的數(shù)據(jù),將上一個請求的響應結(jié)果作為下一個請求的參數(shù);2) 用每次用戶登錄后,token信息都不同,后面的其他操作都要在登錄狀態(tài)保持下進行,所以需要將這個token信息保存下來。下文介紹數(shù)據(jù)關(guān)聯(lián)技術(shù)在第二種場景的使用。
2 什么是token
token[2]在計算機身份認證中是令牌(臨時)的意思。一般作為邀請、登錄系統(tǒng)使用。token實現(xiàn)登錄狀態(tài)保持/身份認證的機制的原理過程如下:
1)用戶首次登錄,將輸入的賬號和密碼提交給服務器;
2)服務器對輸入內(nèi)容進行校驗,若賬號和密碼匹配則驗證通過,登錄成功,并生成一個token值,將其保存到數(shù)據(jù)庫,并返回給客戶端;
3)客戶端拿到返回的token值將其保存在本地(如cookie/local storage),作為公共參數(shù),以后每次請求服務器時都攜帶該token(放在響應頭里),提交給服務器進行校驗;
4)服務器接收到請求后,首先驗證是否攜帶token,若攜帶則取出請求頭里的token值與數(shù)據(jù)庫存儲的token進行匹配校驗,若token值相同則登錄成功,且當前正處于登錄狀態(tài),此時正常返回數(shù)據(jù);若不存在或兩個值不一致,則說明原來的登錄已經(jīng)失效,此時返回錯誤狀態(tài)碼,提示用戶跳轉(zhuǎn)至登錄界面重新登錄;
5)用戶每進行一次登錄,登錄成功后服務器都會更新一個token新值返回給客戶端。
3 什么是正則表達式
正則表達式[3]是在執(zhí)行搜索時匹配的格式,它由一些字母和數(shù)字組合而成。使用正則表達式解析響應結(jié)果,()括號表示提取字符串中的部分值,前后是提取的邊界內(nèi)容。
正則表達式提取器:允許用戶從作用域內(nèi)的sampler請求的request或response中通過正則表達式提取值所需值,生成模板字符串,并將結(jié)果存儲到給定的變量名中。
4 獲取token值的實現(xiàn)方法
下面以國內(nèi)優(yōu)秀的免費開源論壇社區(qū)管理系統(tǒng)phpwind社區(qū)論壇系統(tǒng)為例,進行獲取token的實踐。用戶的操作流程:1)打開網(wǎng)站:http://www.phpwind.net.cn,如圖1。
2)登錄網(wǎng)站,實例采用的登錄賬號wf29020,密碼13076939060wf,用戶可以自行注冊。
3)進入會員中心:http://www.phpwind.net.cn/index/user/index.html,用戶在會員中心界面可以進行以下操作:
①修改密碼http://www.phpwind.net.cn/index/user/changepwd.html;
②充值金額http://www.phpwind.net.cn/index/recharge/recharge.html;
③系統(tǒng)下載http://www.phpwind.net.cn/index/soft/index.html;
④訂單詳情http://www.phpwind.net.cn/index/dingdan/index.html。
使用JMeter接口測試工具模擬用戶進入會員中心進行一些操作,如修改密碼、充值金額、系統(tǒng)下載、訂單詳情,需要在系統(tǒng)登錄保持的狀態(tài)下實現(xiàn),而token實現(xiàn)登錄狀態(tài)保持,所以需要獲取登錄系統(tǒng)token值。使用fiddler抓包工具[4]進行抓取登錄系統(tǒng)的數(shù)據(jù)包,在請求頭里可以獲得token的值。實例中此次登錄的token值為圖2中右欄最后兩行值。
5 使用JMeter接口測試工具實現(xiàn)
1)打開JMeter軟件,創(chuàng)建一個新的測試計劃。
2)在測試計劃中添加線程組、信息頭管理器、Http請求默認值、Cookie管理器、用戶定義變量先添加一個線程組,在線程組中添加信息頭管理器,將圖2中的信息頭(右欄Header標簽下的數(shù)據(jù))存儲在信息頭管理器中。請求默認值設置該網(wǎng)站的Http默認請求,即配置頁面請求的協(xié)議Http、服務器名稱www.phpwind.net.cn、端口號80。Cookie管理器、用戶定義變量的內(nèi)容可不填寫,如圖3。
3)添加打開登錄頁面的Http請求
因為前面添加了Http請求默認值,已經(jīng)配置了協(xié)議、服務器名、端口號等信息,所以在這里只需要配置登錄頁面請求的路徑名稱/index/user/login.html,請求方法為get,如圖4。
4)在打開登錄頁面請求中添加后置處理器中的正則表達式提取器。
正則表達式提取器用來提取登錄頁面的token值,根據(jù)正則表達式的規(guī)范寫出正則表達式為name=\\"__token__\\" value=\\"(.+?)\\" \\/>
5)添加用戶登錄系統(tǒng)的Http請求。
在這里只需要配置登錄頁面請求的路徑名稱/index/user/login.html,請求方法為post,數(shù)據(jù)體url=http%3A%2F%2Fwww.phpwind.net.cn%2F&__token__=${token}&account=wf29020&password=13076939060wf&keeplogin=1,用來提交登錄數(shù)據(jù)(賬號、密碼、令牌等信息),令牌信息來自正則表達式提取器所提取的token值,如圖5。
6)添加進入會員中心請求。
在這里只需要配置登錄頁面請求的路徑名稱/index/user/login.html,請求方法為get。如果需要進一步操作,還可以繼續(xù)添加請求,如修改密碼、充值金額、系統(tǒng)下載、訂單詳情等。
7)添加查看結(jié)果樹,運行測試計劃,如圖6。
6 總結(jié)
接口測試中JMeter在進行數(shù)據(jù)關(guān)聯(lián)應用時,后置處理器中的正則表達式提取器是最常使用的一個元件,非常簡單方便,功能也很強大。使用正則表達式獲取登錄界面的token值,登錄成功后,用戶可以帶著這個token 進行登錄后的其他操作,比如進入會員中心進行訂單管理、余額管理、充值等操作。
參考文獻:
[1] 陳志勇,馬利偉,萬龍.全棧性能測試修煉寶典 JMeter實戰(zhàn)[M].北京:人民郵電出版社,2016.
[2] 張久杰,王春暉,張麗萍,等.基于Token編輯距離檢測克隆代碼[J].計算機應用,2015,35(12):3536-3543.
[3] Jan Goyvaerts,Steven Levithan.正則表達式經(jīng)典實例[M].2版. 郭耀,遲騁,譯.北京:人民郵電出版社,2014.
[4] 肖佳.HTTP抓包實戰(zhàn)[M].北京:人民郵電出版社,2018.
【通聯(lián)編輯:唐一東】