vlsi commented on issue #6165:
URL: https://github.com/apache/jmeter/issues/6165#issuecomment-1860158198

   ## Root cause
   
   1) `ConstantThroughputTimer` implements TestStateListener as it wants to 
reset state when the test begins
   2) ConstantThroughputTimer is TestBean, so JMeter attempts computing all the 
properties before calling `constantThroughputTimer.testStarted()`
   
   As `vars.put("throughput", ...)` happens during the test only, JMeter can't 
resolve throughput value for ConstantThroughputTimer, so it fails with NPE.
   
   Unfortunately, it is quite common for elements to implement 
`TestStateListener` and `TestBean` at the same time, so the issue might impact 
many use cases.
   
   At the same time, JMeter can't predict which properties would indeed be 
needed for execution of `testStarted()`, so JMeter has to conservatively 
compute all the variables.
   
   ## Workarounds
   
   The workaround could be writing `vars.get("throughput")` in such a way so it 
does not fail when `"throughput"` variable is missing (before the first 
execution).
   
   Another workaround could be using properties rather than variables. Of 
course, properties are global across threads, however, it might be enough in 
certain cases.
   
   ##  Long-term solution
   
   a) Add "variable declaration" block, so users could declare variables along 
with their initial values
   b) Avoid `implements TestBean, TestStateListener` pattern. The problematic 
case is `testStarted()`, so it could be replaced with 
`org.apache.jmeter.threads.JMeterContextService#getTestStartTime` and something 
else to reset values once


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscr...@jmeter.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to