2014-11-24 1868 views
1

我有一個要測試性能的寄存器REST服務。只需要爲每個循環/線程請求更改參數mobilenumber在JMeter中遞增用戶自定義變量

作爲負載測試的一部分,如何在將多個測試進行線程化/循環時,如何增加我的用戶定義變量(通過增量值存儲爲另一個udv)。

想有一個JSR 233的預處理器,所有成功註冊請求

我不想使用CSV因爲我只有一個參數的改變

我念叨var.get ()和vars.put()函數,這些函數可以被使用,但不能正確使用它。


嘗試以下代碼 - 日誌中的代碼如下所示

log.info("Before execution") 
log.info("${mobileNumber}") // my udv mobileNumber 
log.info("${increment}") // my udv increment value 

inc = ${increment} 

long number = Long.parseLong(vars.get("mobileNumber")) 

number = number + inc 

log.info("Incremented number") 
log.info(String.valueOf(number)) 

vars.put("mobileNumber", String.valueOf(number)) 

log.info("After Execution") 
log.info("${mobileNumber}") 

日誌:

2014/11/25 09:25:26 INFO - jmeter.threads.JMeterThread: Thread started: Dummy services 1-1 
2014/11/25 09:25:26 INFO - jmeter.protocol.java.sampler.JSR223Sampler: Before execution 
2014/11/25 09:25:26 INFO - jmeter.protocol.java.sampler.JSR223Sampler: 9990000000 
2014/11/25 09:25:26 INFO - jmeter.protocol.java.sampler.JSR223Sampler: 1000 
2014/11/25 09:25:26 INFO - jmeter.protocol.java.sampler.JSR223Sampler: Incremented number 
2014/11/25 09:25:26 INFO - jmeter.protocol.java.sampler.JSR223Sampler: 9990001000 
2014/11/25 09:25:26 INFO - jmeter.protocol.java.sampler.JSR223Sampler: After Execution 
2014/11/25 09:25:26 INFO - jmeter.protocol.java.sampler.JSR223Sampler: 9990000000 
2014/11/25 09:25:26 INFO - jmeter.threads.JMeterThread: Thread finished: Dummy services 1-1 

作爲每個日誌,增量是成功的,但vars.put()是不成功 ??

回答

0

鑑於手機號碼可以長達15位數,您需要使用Long Java類。

假設你UDV拿着手機號碼是「數字」,你可以使用下面的代碼片段:

long number = Long.parseLong(vars.get("number")); 
number = number + 1; 
vars.put("number", String.valueOf(number)); 

您也可以考慮使用__RandomString() JMeter的功能產生任何長度的隨機數(該函數使用字符串表示)。

有關vars,ctx和其他JMeter API對象暴露給啓用腳本的測試元素的其他信息,請參見How to use BeanShell: JMeter's favorite built-in component指南。

+0

在我的腳本中缺少某些內容,在問題中添加了詳細信息。 – 2014-11-25 04:02:59

+0

你的腳本工作正常,也許在JSR223採樣器中存在問題。如果在JSR223採樣器之後添加Debug Sampler和View Results Tree偵聽器,則會看到「mobileNumber」變量遞增http://i.stack.imgur.com/Bf5XI.png 請參見[如何調試Apache JMeter腳本](http://blazemeter.com/blog/how-debug-your-apache-jmeter-script)用於調試技巧,提示和技巧 – 2014-11-25 12:48:26

+0

我認爲這與JMeter如何使用變量有關。 我沒有使用$ {varName}獲取遞增值,而是使用vars.get(「varName」)獲取它。可能是$ {}使用一些預先填充的值來用於該線程。感謝您幫助我。 – 2014-11-26 03:53:02

0

我通常使用BSFPre(Post)處理器+ Groovy。在這種情況下,它看起來像

i = ${YOUR_UDV} 
i += 1 
vars.putObject("YOUR_UDV", i.toString()) 
+0

我必須使用很長的手機號碼是10位數字,並不能適合整數。嘗試在問題中更新的代碼仍然沒有獲得預期的結果 - 請參考更新的問題。 – 2014-11-25 09:02:45

0

如果我們正在更新JMeter變量,我們無法使用$ {varName}格式(不確定原因)訪問更新後的值。我使用vars.get( 「varName的」}功能順利地拿到了更新後的值

log.info("Before execution") 
log.info("${mobileNumber}") // my udv mobileNumber 
log.info("${increment}") // my udv increment value 

inc = ${increment} 

long number = Long.parseLong(vars.get("mobileNumber")) 

number = number + inc 

log.info("Incremented number") 
log.info(String.valueOf(number)) 

vars.put("mobileNumber", String.valueOf(number)) 

log.info("After Execution") 
log.info("${mobileNumber}") 
log.info(vars.get("mobileNumber")) 

登錄:

2014/11/26 09:16:06 INFO - jmeter.protocol.java.sampler.JSR223Sampler: After Execution 
2014/11/26 09:16:06 INFO - jmeter.protocol.java.sampler.JSR223Sampler: 8762200000 
2014/11/26 09:16:06 INFO - jmeter.protocol.java.sampler.JSR223Sampler: 8762201000 

Thnaks求助Dmtri和olyv

0

通用公司長期變量:

long number = Long.parseLong(vars.get(Parameters)); 
number = number + 1; 
vars.put(Parameters, String.valueOf(number)); 

參數:變量名稱

inc long variable with Groovy