jmeter 撒的一個謊,你可能都已經信以為真了

檸檬班軟件測試 發佈 2020-02-07T14:02:51+00:00

在jmeter5.2版本發布的時候,已經在線程組 的設置中,悄悄的加上了一個複選配置項:Same user on each iteration 默認為勾選,同時,在cookie管理器、緩存管理器、授權管理器 的配置選項中,也都增加了一個 『Use Thread Group con

jmeter是目前大家都喜歡用的一款性能測試工具,因為它小巧、簡單易上手,所以很多人都願意用它來做接口測試或者性能測試,因此,在目前企業中,使用各個jmeter的版本都有,其中以jmeter3.x、4.x的應該居多。


但是,不管大家使用jmeter的什麼版本,都可能被jmeter的一個謊言給欺騙了,直到最近jmeter5.2.1版本發布,這個謊言才逐漸浮出水面。


到底是什麼謊言呢?


應該大家在做性能測試的時候,都喜歡設置N個線程數,然後循環M次,以此來模擬真實同時N多個用戶使用被測系統。對吧!


現實中被測系統,在N多個用戶同時使用時,這N個用戶應該都是相互獨立,互不關聯的,對吧!


我們用jmeter設置N個線程數,循環M次,目的就是想模擬這樣N個互不關聯的用戶使用被測系統。但是,jmeter卻在這個時候,給我們撒了一個彌天大謊。



大家先看這張圖,我在jmeter5.1.1版本創建一個普通的線程組,設置線程數2、循環次數2,線程組下用一個「csv數據文件設置」獲取登錄的帳戶信息,一個普通的http取樣器做登錄,一個普通的http取樣器做登錄後獲取用戶列表。


為了找出這個『謊言』,我在登錄接口下面加個後置正則表達式提取器,提取登錄成功後的session值,然後把session值放在下一個取樣器的『名稱』中列印出來。


分析


如果完全等價於真實場景,那應該有4個用戶登錄,生成4個session,用4個不同的session去獲取用戶列表信息,對吧!


好,現在我們用這個腳本run一下,看下結果:



看下結果:



看到一個奇怪的事情沒有?4個手機號都不相同,但是session只有2個。線程1的兩次疊代使用了相同的session,線程2的兩次疊代也使用了相同的session。


說明同一線程無論疊代多少次,都是使用相同的session,也就是線程第一次登錄的用戶生成的session一直用於後面的疊代。、


為了驗證,我們的這個總結,我們修改線程數為3,疊代次數為永遠,持續循環10秒鐘,再看下run的結果。



看到了嗎?不管疊代多少次,同一個線程下,所有用戶都是使用相同的session。


原來在我們使用jmeter做性能測試時,使用多線程循環疊代多次,並不是我們理想中的真實場景。jmeter欺騙了我們。


那,這種情況,只是出現在jmeter5.1.1版本中嗎?我們把相同的腳本,拷貝到jmeter3.2版本和jmeter4.0版本中,我們再來看看。



看到了嗎?原來這是jmeter的家族遺傳史啊,都是這樣的情況。沒有深入研究,你是不是一直都認為jmeter多用戶疊代做性能測試,就是你理想中的模擬用戶真實使用場景的呢?


這個有沒有什麼辦法,做到你理想中的模擬用戶真實的使用場景呢?


告訴大家一個好消息,在jmeter最新的5.2.1版本中,已經發生變化啦!走過、路過、不要錯過,都過來看看啦!別被一個『謊言』迷惑終身啦!


在jmeter5.2版本發布的時候,已經在 線程組 的設置中,悄悄的加上了一個複選配置項:Same user on each iteration 默認為勾選,同時,在cookie管理器、緩存管理器、授權管理器 的配置選項中,也都增加了一個 『Use Thread Group configuration to control clearing』的複選配置項。



加了這個,怎麼用呢?


首先,我們的腳本和前面的腳本做法完全一樣。


只是,要注意:

1、在線程組配置時,要去掉默認的Same user on each iteration 的勾選;

2、在cookie管理器配置中,要勾選 Use Thread Group configuration to control cookie clearing


做好了這些,我們來run一下看下:



這樣配置後,在發起獲取用戶列表信息時session都是使用新登陸的用戶生成的session,每次都不一樣。這樣,也就更真實的模擬了大量用戶訪問被測系統的實際情況。


好了,這個技能,你get到了嗎?


說明:本文為檸檬班Allen老師原創,轉載需註明出處

關鍵字: