Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ConstantThroughputTimer bad setting properties, and not included in TestPlan #4854

Open
asfimport opened this issue Sep 4, 2018 · 0 comments

Comments

@asfimport
Copy link
Collaborator

Ismagee (Bug 62675):
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: SetCalcMode Should be 3, but is 0. Same with SetThroughput, should be 20

Severity: normal
OS: Linux

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant