問題背景
現如今國內的大部分軟件或者網站應用,普遍流行使用短信業務,比如登錄、注冊以及特定的業務通知等。
對於這些業務,在使用Jmeter進行性能測試的過程中,就會需要自動獲取和填入短信驗證碼,否則性能流程無法進行下去。
由於絕大多數的系統其短信驗證碼並不會在接口返回中,因此如何獲取短信驗證碼是一個問題。
最簡單的做法,是讓開發在測試環境將驗證碼寫死,在測試過程中固定使用靜態驗證碼字串。
不過求人不如求己~也是出於盡量貼近真實用戶場景的目的,更合適的做法還是通過技術手段動態獲取並填寫短信驗證碼。
解決思路
大多數應用的短信驗證碼都是通過第三方服務來發送的,如前文所言一般不會通過本地接口返回。
但是但凡設計過關的系統應該會將短信驗證碼存留於數據庫當中進行留底和備份。
因此我們可以通過Jmeter去連接數據庫,並通過合理的邏輯獲取相應的驗證碼。
通常我們使用Jmeter更多的是測試HTTP和FTP等協議,但其實除這些之外,Jmeter還支持許多其他種協議,JDBC就是常見的一種。
因此以上需求應該完全能夠實現。
實現方法
1. 建立JDBC連接
在Jmeter測試計划中,添加配置元件-JDBC連接配置(JDBC Connection Configuration),用於管理數據庫連接。
2. 使用JDBC請求獲取驗證碼
在線程組中,添加取樣器-JDBC請求,進行數據庫查詢。
取到的結果:
3. 使用正則將驗證碼提取並使用
以上提取到的數據庫記錄中,只有969386是我們需要的驗證碼,因此需要用正則表達式提取器將他提取出來:
到此,后續的請求使用${mcode}就可以使用獲取到的驗證碼繼續測試了。