一.關聯
-
哪些數據需要關聯
- 數據是由服務器端生成的
- 數據在每一次請求時都是動態變化的
- 數據在後續的請求中需要再發送出去
-
舉個栗子, 常見的 Session ID 就是一個典型的需要關聯的數據。它需要在交互過程中標識一個客戶端身份,這個身份要在後續的交互中一直存在,否則服務端就不認識這個客戶端了。Spring Boot 中有一個 spring-boot-starter-security,默認會提供一個基於 HTTP Basic 認證的安全防護策略。它在登錄時會產生一個 CSRF(Cross-Site Request Forgery)值,這個值典型地處於動態變化中。
- 可以看到登錄信息返回csrf,沒有使用這個值的接口將會沒有權限訪問。
- 首先添加 Cookies Manage。JMeter 在處理 CSRF 時,需要添加一個 Cookies manager。如下:
- 這裏的 Cookie Policy 一定要選擇 compatibility,以兼容不同的 cookie 策略。
- 取動態值,在返回 CSRF 值的地方加一個正則表達式提取器來做關聯。
- 這裏的,就是要取出這個動態的變化值,保存到變量 csrfNumber 中去。
- 然後, 將發送時的 CSRF 值替換成變量,就可以正常訪問其它接口了。
- 可以看到登錄信息返回csrf,沒有使用這個值的接口將會沒有權限訪問。
-
jmeter有多種提取器,使用什麼樣的提取器取決於業務的需要。
二.斷言
- 斷言就是判斷服務端的返回是不是正確的,判斷邏輯如下:
- 舉個栗子,登錄接口:
- 執行結果:
- 添加斷言:
- 舉個栗子,登錄接口:
總結
-
關聯和斷言的前半部分是一樣的,都是從服務器返回信息中取出數據。但不同的是,關聯取來的數據每次都會不同;而斷言取出來的數據基本上都是一樣的,除非出了錯。
-
對服務端生成的,並且每次生成都不一樣的動態變化的數據,那麼將其取回來之後,在後續的請求中使用,這種邏輯就是關聯。
-
對服務端返回的,可標識業務成功與否的數據,將其取回來之後,做判斷。這種邏輯就是斷言。