Jmeter 介面測試,引數值為列表,如何引數化?

最近在我的教學過程中,我的一個學生問了我一個問題,他們

公司的一個介面引數值是列表,列表中值的數量有多有少,問我在 jmeter 中如何讓這個引數的值進行引數化?

Jmeter 介面測試,引數值為列表,如何引數化?

看到這種問題,你的第一反應是什麼?

寫 Java 程式碼?我相信,如果你有一定的程式語言基礎,你肯定會想著寫程式碼。因為程式碼對你來說,不是難事。但是,如果你不懂程式碼呢?

如果你不懂程式碼,哪你肯定就會想著用 jmeter 自帶的 Random 函式。

但是,當你使用 Random 函式,去生成隨機數的時候,如何生成 70 個隨機數,用逗號連線,構成一個列表,這個事情難住你了。

下面,我就

給不懂程式碼的同學,講講如何使用jmeter 現有的元件來實現這樣一個需求。

首先,我們肯定知道,需要用 Random 函式和迴圈控制器。

線上程組下面新增一個迴圈控制器,迴圈控制器只需要設定一個迴圈次數就可以了。

Jmeter 介面測試,引數值為列表,如何引數化?

他的需求是至少 70 個,至於到底多少個沒有說,所以,這個迴圈次數,我們就可以用 Random 隨機函式,隨機一個大於等於 70 的數字就可以

${__Random(70,79,)}隨機函式中最大值,隨便寫大於 70 的數字。接下來就是造出列表中的第 1 個數。

定義什麼元件來接收這個隨機數字呢?

使用者定義變數

, 還是

使用者引數

聽過我的課的同學,肯定都知道使用使用者引數,如果不清楚,可以諮詢我們的工作人員。

使用者引數,是一個前置處理器,所以,我們需要新增一個取樣器;我們目的是造資料,這個取樣器並不需要發起請求,所以,取樣器我們可以使用‘除錯取樣器’,生成如:

Jmeter 介面測試,引數值為列表,如何引數化?

現在,執行指令碼,你會發現,在檢視結果樹中,每個 ‘除錯取樣器’ 看到 rd1 變數的值都不一樣,但是,每次的值都只有 1 個。

進一步分析需求,需求中,還說,每個值之間用逗號分隔,那我們看下,是否可以在 rd1 這個變數中新增一個‘逗號’呢。

Jmeter 介面測試,引數值為列表,如何引數化?

添加了,執行,發起不管載入後面,還是在前面,都可以,jmeter 執行沒有出錯。

這個是什麼意思呢?

我在一個函式變數的前面,或後面新增一個‘逗號’,居然,能正常!

‘逗號’,是一個字元嗎?是!哪這個算不算,兩個

字元連線

呢?

是的!jmeter 中,字元與字元相連,不需要用‘+’號,可以直接寫在一起,就連線了。

讓 rd1 的值,前面或後面,加符號,可以直接相連,哪我們可不可以把 rd1 與自己相連線呢?有了想法,哪就趕緊行動吧。是不是,再‘新增變數’,定義值為rd1{rd1}?

Jmeter 介面測試,引數值為列表,如何引數化?

執行!!!

Jmeter 介面測試,引數值為列表,如何引數化?

發現,有 rd2 不管執行多少次,值都只有 2 個。

這是怎麼回事呢

我們來理解一下,變數 rd2 的值為 rd1{rd1} ,其實,是不是就是 rd2 的值,是調兩次 rd1,把兩個 rd1 連線在一起。如果這個能理解,哪是不是就能理解,不管我們迴圈多少次,rd2 的值都只有 2 個。

繼續想。

會不會想到,rd2 的值用 rd1 與 rd2 自身連線?

Jmeter 介面測試,引數值為列表,如何引數化?

執行!

Jmeter 介面測試,引數值為列表,如何引數化?

這次,我們看到 rd2 的值,在迴圈此次不一樣的時候,rd2 的值長度不一樣,在遞增。也就是說,這樣,我們可以造出幾十個類似的資料連線成的一個列表了。

但是,rd2 的值,最後一個是 ${rd2},這顯然又不符合我們的要求。怎麼辦?

是不是想著又給 rd2 定義一個值?哪這次,繼續用

使用者引數

,還是用

使用者定義變數

呢?

這次,我們用

使用者定義變數

楞楞的分不清 使用者定義變數 和 使用者引數 的用法,可以聯絡我們的工作人員

Jmeter 介面測試,引數值為列表,如何引數化?

執行!

Jmeter 介面測試,引數值為列表,如何引數化?

現在,不管我們執行多少次,都能正常生成 rd2 的值了。

在這位同學的介面中,直接使用變數引用 ${rd2},是不是就搞定了。很簡單吧!不過,如果,你是一個追求完美主義者。