apache / apache/jmeter

ConstantThroughputTimer bad setting properties, and not included in TestPlan

Open
#4,854 0 comments 0 reactions 0 assignees View on GitHub
os: Linux P2
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.