簡體   English   中英

Jmeter:在CSV行中執行計算並在測試中使用計算值

[英]Jmeter : Perform calculation in CSV rows and use calculated values in test

我一直在嘗試創建 Jmeter 測試以使用 CSV 執行更真實的計時。 我有一個 CSV 文件,其中包含一行時間。 我想在不同的線程上以重復的方式基於 2 個連續時間之間的差異運行測試。 我的 CSV 如下所示。 我想計算 Time = Time2-Time1、Time= Time3-Time2 等時間。將所有這些時間保存在另一個 excel 中。

在此處輸入圖片說明

我試圖運行 BeanShell 腳本並遵循了幾篇文章,但沒有成功。

例如: ${Test}=${__BeanShell(${__CSVRead(Test.csv,1)}${__CSVRead(Test.csv,next)}-${__CSVRead(Test.csv,1)})}

這適用於單個值,但不確定如何為 CSV 的所有值自動執行此操作以及如何將其保存在特定行中。 任何幫助將是非常非常可觀的。

從 JMeter 3.1 開始,您應該使用 JSR223 測試元素和 Groovy 語言編寫腳本,因此請考慮將代碼更改為以下內容:

def lines = new File('old.csv').readLines()

lines.eachWithIndex { line, index ->
    new File('new.csv') << line
    if (index < lines.size() - 1) {
        def currentTime = line.split(',')[1] as long
        def nextTime = lines.get(index + 1).split(',')[1] as long
        def delta = nextTime - currentTime
        new File('new.csv') << ',' << delta << System.getProperty('line.separator')
    }

}

new File('new.csv') << ',' << '0'

腳本的好地方是setUp Thread Group 中某處的JSR223 Sampler ,如果您不希望采樣器出現在測試結果中,請在腳本的開頭添加SampleResult.setIgnore()

我所做的是這樣的:

  • 創建循環控制器。
  • 使用 CSVread 函數讀取兩行並使用 _Jexl2 存儲差異。
  • 運行循環控制器直到 csv 的 EOF。
  • 在此控制器中創建一個計數器並將此計數器用於數組 ${variable${Index}}。
  • 使用 jexl 使用數組將先前計算的差異存儲在另一個變量中
  • 運行 beanshell 腳本並將這個數組扔到 csv 中。 我知道這是一個很長的解決方案,但它有效:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM