您好,登錄后才能下訂單哦!
在客戶端與服務器通信過程中,多個請求/響應間的數據會有相互依賴的關系。比如上一個請求返回的某些響應數據在后續的請求中需要用到。
下面是一些典型的例子:
1)比如第一次訪問網站獲取的session id在后續的請求都會將其傳給網站;
2)服務器生成token返回給用戶,在后續的請求中要帶上token;
3)根據條件查詢某記錄,在查詢結果集中選擇記錄進行操作(比如刪除)
...
但是有些通信協議是無狀態的,不存在上下文相關性。多個請求/響應之間的數據不能直接進行傳遞;
并且每次服務器返回的數據不是一成不變的,傳遞的數據不能通過硬編碼(寫死)保存來解決。
比如上面三種情況都會產生動態變化的數據:
1)session id的生命周期一般在關閉瀏覽器時就結束了,每次打開瀏覽器訪問返回的session id并不相同;
2)token也有生命周期,一般也是隨機,無狀態的;
3)若查詢條件參數化了或服務器返回的查詢結果集改變了,后續的操作可能會失敗。
在這些情況下,可以考慮將服務器返回的動態變化的數據保存到某個參數中,需要時再從中取出。
舉個例子,看電影,看電影過程有如下步驟:
1.購票
2.驗票
3.觀影
每個步驟可以看做一個請求/響應。觀眾相當于客戶端,影院方相當于服務器。
過程如下圖所示:
觀眾購買的電影票可以看成服務器返回的響應數據,要驗票通過才能入場觀影。
觀眾購票相當于一個請求,驗票是下一個請求,這需要將上一個請求返回的響應數據(電影票)放在下一個請求中發送給服務器處理。
假設這部電影非常精彩,想重新再看一次,因為電影票只能使用一次,觀眾必須重新購票,才能驗票通過入場;使用第一次購買的電影票入場肯定會被拒之門外。
為了解決這個問題,可以考慮做如下假設:
每次將購買的電影票放入隨身攜帶的LV錢包,并且在放入之前將使用過的票丟棄,以防止入場時掏錯票;入場的時,從錢包中取出票來驗票,這樣就萬無一失了。
將電影票放入錢包中,相當于將服務器返回的數據保存起來了,這里錢包就是保存關聯數據的參數。
將服務器返回的數據包中滿足條件的數據保存到一個參數中的過程。
怎樣將服務器返回的數據保存起啦,JMeter中可以使用后置處理器來處理關聯數據,常見的方法有:
1、正則表達式提取器
2、JSON提取器
需要關聯數據的特征
怎樣確定哪些數據是需要做關聯的,可以從關聯數據的特征來識別出這些數據。關聯數據有如下三個特征:
1.服務器返回
需要關聯的數據一定是從服務器返回的。
客戶端輸入的數據不需要進行關聯,比如輸入的用戶名與密碼。此特征是必選的。
2.數據會再次發送給服務器處理
保存上一個請求響應的數據,其目的是為了將其用于下一個請求中,否則保存起來沒有意義。
此特征是可選特征,也就是說不再次發送也是可以保存數據進行關聯的。
3.數據動態變化
上一個請求響應的數據若不會動態變化,完全可以寫死在腳本中,不需要花力氣額外保存再次取出。
正是由于每次返回的數據動態變化,我們需要根據某種規則將這些動態變化的數據找出來保存,
然會取出實際返回的數據。但此特征也是可選的。不動態變化一樣可以保存進行關聯,但意義不大。
JMeter通過內嵌的Apache Jakarta ORO軟件來解析處理正則表達式。
Jakarta-ORO是用于處理文本的一組Java類,是目前功能最全性能最好的正則表達式API之一,它提供兼容Perl5類型的正則表達式。
單行模式與多行模式
元字符
擴展正則表達式
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。