首先,什么是混合場景。
做性能測試,場景設計,就是為了模擬真實用戶對服務器發起請求,那真實的環境用戶請求會是什么樣呢?也許同時,有 100 個人在訪問你的服務器,對你服務器發起了請求事件,但是他們的請求可能各不相同,有的是刷新頁面,有的是登錄,有的請求某個商品,有的在添加購物車,有的在付款...... 每個人的情況可能都不一樣,沒有一定的非是即非的關系,但是,在這個時間點,對於服務器來說,收到了用戶的請求,就必須處理,就有計算壓力。
那么,如何實現性能測試的混合場景設計呢?
我們都知道,jmeter 是用線程組做場景設計,向服務器發起的所有請求,都是掛在線程組下面。一個線程組設計好了,那么它的所有虛擬用戶,都是按照線程組下的取樣器順序,從上往下執行(沒有邏輯控制器時)。視乎,就無法模擬,有的取樣器接口請求人多,有的接口取樣器請求人少,甚至跳過某些接口取樣器請求而執行其他的。如果做不到,那就不能算是真正的混合場景了。
**不同的線程組,設置了不同數量的並發用戶,當啟動運行時,所有線程組,都開始運行了,而且都是獨立運行。**對於服務器來說,是不是同時都會收到不同線程組中不同接口取樣器發過來的請求,都需要去做處理,這不就是真正的混合場景嗎?
這個設計,其實,已經很簡單的告訴我們,jmeter 也能做混合場景設計,只需要在一個測試計划下,掛載多個線程組,同時運行多個線程組就可以。不同的線程組,運行的虛擬用戶,進行特定設置,不同的場景模型也進行特定設置,這樣就可以完全真實的做到模擬真實情況的混合場景設計了。
那么,這樣一個技術的實現,會不會有什么難題呢?
在單個線程組內部,進行參數傳遞時,用上關聯,就能順利傳參。但是,如果要在多個線程組之間傳遞參數,就不能直接傳遞了。因為,jmeter 在設計線程組的時候,線程組與線程組之間是相互獨立的,不能直接傳參。這個時候,就需要在生成的參數線程組中,使用 setproperty 函數把參數設置為屬性,然后在使用參數的線程組中,再使用 P 函數,獲取屬性。這樣,就可以實現跨線程組傳遞參數了。
轉自鏈接:http://testingpai.com/article/1595507282985