我們的實際工作中,需要先登錄,然后才能做某些操作的現象非常常見。但是,對於一個剛剛學會用jmeter做性能測試的人來說,這可能是自己的性能測試之路的第一個坎。
為什么這么說呢?
首先,從這個訴求中,我們至少能提取出兩個重要信息,1、需要登錄;2、登錄后才能做,以為着登錄之后的接口,都有登錄認證,判斷是否登錄,登錄認證未通過,那么接口請求就會失敗。
那么好了,問題來了。我做性能測試,是需要用多個虛擬用戶來實現並發的。
場景一:我是用把所有虛擬用戶使用同一個用戶賬戶,每次都是先調登錄接口,再調登錄之后接口請求嗎?如果你的系統,業務上允許一個用戶在不退出情況下,反復登錄,且沒有登錄次數限制,這種最理想的情況,你完全可以這么做。做完了,你可能會想,我不用一個賬戶,100個並發用戶數,我就用100個獨立賬戶,
場景二:每個虛擬用戶都試用一個獨立賬戶,還是先調登錄,再調登錄之后接口請求,這樣可以嗎,要怎么做?當然可以,做法也非常簡單,就是在你的線程組里面用上“csv數據文件設置”讀取出用戶賬戶信息,或者用JDBCrequest從數據庫獲取出用戶信息,然后再在登錄接口中用取出的用戶信息來登錄。這樣,在性能測試時,就會循環使用你用戶總量中的用戶來發送請求,這樣,理論上是行的通的,但是,現實有些骨干,因為我們做性能測試,使用的是高並發,可能存在競爭關系,就可能出現后續接口,使用的關聯參數可能取不到值,從而導致請求報錯,而這種錯誤,不是性能測試服務器響應報錯,而是腳本問題導致報錯,影響我們對性能結果的判斷。那么,我們就會問,還有沒有其他辦法呢?
場景三:用一定量的用戶登錄一次,登錄之后,再去調其他接口,是不是也可以呢?下面,我就重點講講這種做法。
是不是,看了上面的動畫,還是沒有明白?
下面,給大家解釋一下,我們在一個普通的線程組下面,新增一個邏輯控制器中的‘僅一次控制器’,在這個控制器下面,新增一個 login登錄接口的請求;再在僅一次邏輯控制器平級的位置添加如 ‘重置密碼’‘修改密碼’等接口(模擬你的需要登錄之后才能調用的接口),因為接口需要關聯,所以,在登錄接口下添加一個后置處理器(json提取器),提取出參數,最為后續接口的輸入參數,實現接口關聯。
從上面,是不是發現,線程數設置5,登錄接口總共調用5次,而其他接口,在整個測試運行過程中,一直運行。

從最后的這個聚合報告,我們也可以看出,login接口,總共調用5次,重置密碼接口分別對5個用戶進行了並發請求(從后綴可以看出),只是需要明確,並發請求,並不代表整個過程每個用戶的並發總次數相等(從樣本總數不同可以看出)。
好了,你是否已經懂得需要先登錄才能請求的接口,性能測試腳本該怎么寫了呢?附帶衍生的知識點是否get到了?
想要獲取更多有趣有料的測試知識,歡迎關注** 檸檬班** 微信公眾號。