ConstantThroughputTimer bad setting properties, and not included in TestPlan
- Dominant language
- Java
- Stars
- 9.5k
- Forks
- 2.3k
- Avg merge
- 1d 22h
- Merged PRs (30d)
- 5
Description
**Ismagee** ([Bug 62675](https://bz.apache.org/bugzilla//show_bug.cgi?id=62675&redirect=false)):
When implementing ConstantThroughputTimer from java code, it's properties "throughput" and "mode" are not correctly setted up.
While I do:
ConstantThroughputTimer constThroughputTimer = new ConstantThroughputTimer();
constThroughputTimer.setName("consttimer");
constThroughputTimer.setProperty(TestElement.TEST_CLASS, ConstantThroughputTimer.class.getName());
constThroughputTimer.setProperty(TestElement.GUI_CLASS, TestBeanGUI.getName());
constThroughputTimer.setEnabled(true);
constThroughputTimer.setThroughput(samplesPerMinute);
constThroughputTimer.setCalcMode(3);
// with samplesPerMinute = 20
But when I save TreePlan, those 2 props are not present:
</hashTree>
<ConstantThroughputTimer testclass="ConstantThroughputTimer" testname="Constant Throughput Timer" enabled="true"/>
<hashTree/>
And when executed with:
StandardJMeterEngine jMeterEngineStd = jmeterPlan.getJMeterEngineStd();
jMeterEngineStd.configure(jmeterPlan.getPlanTree());
jMeterEngineStd.run();
It never finishes. Debuging from
jMeterEngineStd.run()
there's a moment when
invokeOrBailOut is call (in TestBeanHelper.java)
when called for method setCalcMode, value should be 3, but it is 0
And similiar thing happen with method
setThroughput
when value should be 20, but ti is 0.0
Inspecting code, I found differences in how ConstantThroughputTimer set property values, compare to other timers like ConstantTimer.
In ConstantThroughputTimer (https://github.com/apache/jmeter/blob/trunk/src/components/org/apache/jmeter/timers/ConstantThroughputTimer.java)
lines 118
public void setThroughput(double throughput) {
this.throughput = throughput;
}
and 135
public void setCalcMode(int mode) {
this.mode = Mode.values()[mode];
}
While in ConstantTimer (https://github.com/apache/jmeter/blob/trunk/src/components/org/apache/jmeter/timers/ConstantTimer.java)
line 51
public void setDelay(String delay) {
setProperty(DELAY, delay);
}
So I tryextending ConstantThroughputTimer:
@GUIMenuSortOrder(4)
public class ConstantThroughputTimerBugSolution extends ConstantThroughputTimer {
private static final long serialVersionUID = 4;
/** Key for storing assertion-information in the jmx-file. */
public static final String THROUGHPUT_KEY = "throughput"; // $NON-NLS-1$
public static final String CALC_MODE_KEY = "calcMode"; // $NON-NLS-1$
@Override
public void setThroughput(double throughput) {
super.setThroughput(throughput); // just in case
setProperty(new DoubleProperty(THROUGHPUT_KEY, throughput));
}
@Override
public void setCalcMode(int mode) {
super.setCalcMode(mode); // just in case
setProperty(CALC_MODE_KEY, mode);
}
}
And it works just fine. Mode and Throughput have proper values, and even more, it is correctly setted up in TestPlan:
</hashTree>
<ConstantThroughputTimerBugSolution testclass="ConstantThroughputTimer" testname="Constant Throughput Timer" enabled="true">
<doubleProp>
<name>throughput</name>
<value>Infinity</value>
<savedValue>0.0</savedValue>
</doubleProp>
<intProp name="calcMode">3</intProp>
</ConstantThroughputTimerBugSolution>
<hashTree/>
Exactly same problem I found with CompareAssertion, and same kind of resolve. And I saw many clases with same of property settings
Hope this help
Created attachment [setCaclModeAndSetThroughtput.zip](https://apache.github.io/jmeter-bugzilla-attachments/75/62675/36131/setCaclModeAndSetThroughtput.zip): SetCalcMode Should be 3, but is 0. Same with SetThroughput, should be 20
Severity: normal
OS: Linux
Contributor guide
Assessment
This issue has not been assessed yet.