做彩鈴的網(wǎng)站近期國家新聞
前言
用過JMeter參數(shù)化的小伙伴,想必對CSV Data Set Config非常熟悉。大家平時更關(guān)注變量名稱,是否忽略首行等參數(shù),其余的一般都使用默認值。然而我最近遇到一個未按照我的預(yù)想讀取數(shù)據(jù)的案例,原因就出在最后一個參數(shù)“線程共享模式”上。記錄一下,大家避坑。
業(yè)務(wù)需求及腳本邏輯
某系統(tǒng)用戶提交訂單之后,在訂單列表頁面會新增一條記錄。
壓測前后,需要分別查詢訂單數(shù)量,根據(jù)提交訂單的成功事務(wù)數(shù)來判斷,是否所有的訂單都成功入庫。
但是,因為測試過程中多用戶并發(fā),每個用戶只能查到自己的訂單,所以檢查時需要逐個檢查所有參與并發(fā)測試的用戶名下的訂單數(shù)量,然后加總求和。
詳情可參見JMeter案例分享:通過采樣器自動完成性能測試過程中的功能檢查-數(shù)據(jù)條目驗證-CSDN博客
查找問題
腳本調(diào)試時,僅使用有限幾個賬戶,一切正常。但是,當(dāng)項目組提供真正的登錄賬號后,數(shù)據(jù)驗證總是對不上。于是,減少并發(fā)數(shù),并把用戶、訂單數(shù)量信息一一打印出來查看。
原來:
業(yè)務(wù)前數(shù)據(jù)檢查的用戶是usr1、2、3
執(zhí)行業(yè)務(wù)的用戶是usr4、5、6
業(yè)務(wù)后數(shù)據(jù)檢查的用戶又變成了usr7、8、9
分析原因
它們分屬3個線程組,雖然使用的是同一個數(shù)據(jù)文件,但是因為數(shù)據(jù)文件是放置在線程組內(nèi)的,按照我的理解,作用域也應(yīng)該僅限于本線程組,那么每一個線程組都應(yīng)該從這個數(shù)據(jù)文件的第一行開始讀取。
然而,事實上,這個數(shù)據(jù)文件似乎是三個線程組間共享的。
于是,關(guān)注到CSV data set config中的共享模式(sharing mode)
官網(wǎng)中對該選項的介紹如下:
- All threads?- (the default) the file is shared between all the threads.(默認值,文件在所有的線程間共享)
- Current thread group?- each file is opened once for each thread group in which the element appears(文件僅在它所在的線程組中被打開一次)
- Current thread?- each file is opened separately for each thread(每個線程都單獨打開一份,也就是說,這個文件,每個線程都會獨自使用)
- Identifier?- all threads sharing the same identifier share the same file. So for example if you have 4 thread groups, you could use a common id for two or more of the groups to share the file between them. Or you could use the thread number to share the file between the same thread numbers in different thread groups.
下面我們分別設(shè)置來看看效果
All threads
默認值,效果前面已經(jīng)看到了,所有的線程組中的所有線程,共享一個文檔,從第一行順序向下讀取。
Current thread group
文件僅在當(dāng)前線程組中有效,本線程組結(jié)束后,下一個線程組將重新打開一遍數(shù)據(jù)文件,從第一行開始向下讀取。這就是我當(dāng)前這個測試場景中需要的效果。
Current thread
數(shù)據(jù)文件僅在當(dāng)前線程中有效。同一個線程組的不同線程間,不共享數(shù)據(jù)文件。
本例中數(shù)據(jù)驗證線程組是單線程,用循環(huán)控制器順序執(zhí)行的,看不出效果,看業(yè)務(wù)線程組:3個并發(fā)執(zhí)行1次,也就是三個線程,但是usr1登錄了3次。
也就是說,線程1打開數(shù)據(jù)文件,從第一行開始讀取;
線程2打開數(shù)據(jù)文件,從第一行開始讀取
每個線程讀取各自的文件。
Identifier
我在業(yè)務(wù)前數(shù)據(jù)驗證和業(yè)務(wù)線程組中分別輸入1,標(biāo)識這兩個線程組是group 1
在業(yè)務(wù)后數(shù)據(jù)驗證線程組中,輸入2,標(biāo)識這是group2
執(zhí)行結(jié)果如下:
紅色的兩個線程組(group ID為1)作為一個group,共享數(shù)據(jù)文件。
黃色的線程組(group ID為2)作為一個group,獨享數(shù)據(jù)文件。
遺留問題
最后一種共享模式中這句話我不知道該怎么操作,官網(wǎng)沒有示例。
Or you could use the thread number to share the file between the same thread numbers in different thread groups.
?