2013-08-28 39 views
11

我有一個非常大的CSV文件(8000+項),我正在使用CSV數據集配置元素讀取的URL。它正在填充HTTP請求採樣器的路徑,並通過一個while控制器進行迭代。從Jmeter中的CSV文件中隨機選擇

這很好,除了我想讓每個用戶(線程)從CSV URL列表中選擇一個隨機URL。我不想要的是每個線程按順序使用CSV項目。

我能夠通過具有多個HTTP請求採樣器的隨機順序控制器實現此目的,但8000多個HTTP採樣器真的使jmeter陷入不可用狀態。所以這就是我將HTTP採樣器URL放入CSV文件的原因。但是,似乎沒有可以將隨機順序控制器與CSV文件數據一起使用。那麼如何才能實現每個線程的隨機CSV數據項選擇?

回答

0

我不確定這是否可行,但我會反正提示。

爲什麼不把你的網址分成100個不同的CSV文件。然後在每個線程中生成隨機數並使用該數字來識別使用__CSVRead函數讀取的CSV文件。

CSVRead「> http://jmeter.apache.org/usermanual/functions.html#_CSVRead

現在我不知道,如果__CSVRead功能,每次或共享同一文件重新打開該文件的唯一部分跨線程處理。

你可能想嘗試一下。請分享你的發現。

1

那裏讀CSV數據時,沒有隨機選擇功能,原因是你需要閱讀整個文件到內存中先做到這一點,這是一個與負載測試工具(任何負載測試工具)不好主意。

其他商業工具通過自動重新處理數據來解決此問題。在JMeter中,您可以通過使用任意字段對數據進行簡單排序來手動實現。如果按照姓氏排序,那麼結果是有效的隨機分佈。

注意。如果確保爲CSV數據集配置設置了默認值All Threads,則該數據在JMeter過程的範圍內將是唯一的。

7

還有另一種方式來實現這一目標:

  • 創建一個單獨的線程組
  • 取決於你想要達到什麼目的:
    • 添加一個(隨機)循環計數 - >這將設置執行工作的線程組的起始偏移量
    • 添加一個循環計數或永遠添加一個計時器,並在其他線程組正在運行時讓它循環。該線程組會讀「僞」隨機線

它不是真正隨機的,該文件仍然順序讀取,但你的工作線程進行跳躍的文件中。它對我有用;-)

0

正如其他答案所述,你無法隨意選擇一條線的原因是因爲你必須將整個文件讀入內存,效率低下。

與其試圖讓JMeter在運行中處理此問題,爲什麼不在開始測試之前隨機化文件順序呢?

腳本語言如Perl使得這短暫的工作:

cat unrandom.csv | perl -MList::Util=shuffle -e 'print shuffle<STDIN>' > random.csv 
0

一個更直接的解決方案。 在CSV文件中,在列B的第一個單元格中添加另一列(如B) apply = RAND()函數(比如B1)。這將創建隨機浮點數。 拖動單元格(比如B1)角落申請所有相應的URL 排序列B. 您的URL將被隨機排序。 刪除B列。