Bug 62675 - ConstantThroughputTimer bad setting properties, and not included in TestPlan
Summary: ConstantThroughputTimer bad setting properties, and not included in TestPlan
Status: NEW
Alias: None
Product: JMeter
Classification: Unclassified
Component: Main (show other bugs)
Version: 4.0
Hardware: PC Linux
: P2 normal (vote)
Target Milestone: ---
Assignee: JMeter issues mailing list
Depends on:
Reported: 2018-09-04 19:43 UTC by Ismagee
Modified: 2018-09-13 15:06 UTC (History)
0 users

SetCalcMode Should be 3, but is 0. Same with SetThroughput, should be 20 (265.09 KB, application/zip)
2018-09-04 19:43 UTC, Ismagee

Note You need to log in before you can comment on or make changes to this bug.
Description Ismagee 2018-09-04 19:43:01 UTC
Created attachment 36131 [details]
SetCalcMode Should be 3, but is 0. Same with SetThroughput, should be 20

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.setProperty(TestElement.TEST_CLASS, ConstantThroughputTimer.class.getName());
  constThroughputTimer.setProperty(TestElement.GUI_CLASS, TestBeanGUI.getName());


// with samplesPerMinute = 20

But when I save TreePlan, those 2 props are not present:

      <ConstantThroughputTimer testclass="ConstantThroughputTimer" testname="Constant Throughput Timer" enabled="true"/>

And when executed with:

  StandardJMeterEngine jMeterEngineStd = jmeterPlan.getJMeterEngineStd();

It never finishes. Debuging from 
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
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:

  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$

	public void setThroughput(double throughput) {
		super.setThroughput(throughput); // just in case
		setProperty(new DoubleProperty(THROUGHPUT_KEY, throughput));

	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:

   <ConstantThroughputTimerBugSolution testclass="ConstantThroughputTimer" testname="Constant Throughput Timer" enabled="true">
      <intProp name="calcMode">3</intProp>

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