jmeter-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Philippe Mouawad <philippe.moua...@gmail.com>
Subject Re: svn commit: r1835022 - in /jmeter/trunk/src: components/org/apache/jmeter/control/ core/org/apache/jmeter/control/
Date Wed, 04 Jul 2018 12:39:28 GMT
Hello Felix,
We're both right, but you more than me :-)

WC being a loop iteration listener, it is indeed notified due to endLoop
and at that time it is not yet initialized.

In the fix I commited I removed the call to endLoop as IMU it is not needed.

But please review deeply the commits I made on Bug 62239 and 62238.

I find the code of Controller very hard to read and maintain (few comments,
confusing method names, fragile inheritance.... ).
Ideally it should be fully reworked, at least more unit tested.

Regards

On Wed, Jul 4, 2018 at 2:33 PM, Felix Schumacher <
felix.schumacher@internetallee.de> wrote:

> Am 04.07.2018 14:03, schrieb Philippe Mouawad:
>
>> Hello Felix,
>>
>> There is User Parameters which declares counter under Flow Control Action
>> It's a real issue related to last commit I did.
>>
>
> 2018-07-04 14:28:46,362 INFO o.a.j.e.StandardJMeterEngine: Waiting for
> thread group: TG-BL-WC to finish before starting next group
> 2018-07-04 14:28:46,363 INFO o.a.j.t.JMeterThread: Thread started:
> TG-BL-WC 2-1
> 2018-07-04 14:28:46,364 DEBUG o.a.j.c.WhileController: Condition string:
> 'true'
> 2018-07-04 14:28:46,365 DEBUG o.a.j.c.WhileController: Condition value:
> 'false'
> 2018-07-04 14:28:46,365 DEBUG o.a.j.m.UserParameters: TG-BL-WC 2-1
> iteration start false
> 2018-07-04 14:28:46,366 DEBUG o.a.j.m.UserParameters: TG-BL-WC 2-1 process
> false
> 2018-07-04 14:28:46,366 DEBUG o.a.j.m.UserParameters: TG-BL-WC 2-1 Running
> up named: User Parameters
> 2018-07-04 14:28:46,366 DEBUG o.a.j.m.UserParameters: TG-BL-WC 2-1 saving
> variable: counter=0
> 2018-07-04 14:28:46,367 DEBUG o.a.j.c.WhileController: Condition string:
> 'true'
> 2018-07-04 14:28:46,368 DEBUG o.a.j.c.WhileController: Condition value:
> 'false'
> 2018-07-04 14:28:46,370 DEBUG o.a.j.c.WhileController: Condition string:
> 'true'
> 2018-07-04 14:28:46,372 DEBUG o.a.j.c.WhileController: Condition value:
> 'false'
>
> The UserParameter is initialized after the WhileController. (For this run
> I added a User Defined Variable "counter=0").
>
> The change that triggers this is the new call to endLoop(true). But maybe
> I misunderstand the problem and barfing up the wrong tree :)
>
> Felix
>
>
>
>> Regards
>>
>> On Wed, Jul 4, 2018 at 1:59 PM, Felix Schumacher <
>> felix.schumacher@internetallee.de> wrote:
>>
>> Am 03.07.2018 23:15, schrieb Philippe Mouawad:
>>>
>>> This commit breaks build.
>>>>
>>>>
>>> For comments see below (very far down).
>>>
>>>
>>>
>>> Regards
>>>>
>>>> On Tuesday, July 3, 2018, <pmouawad@apache.org> wrote:
>>>>
>>>> Author: pmouawad
>>>>
>>>>> Date: Tue Jul  3 20:16:38 2018
>>>>> New Revision: 1835022
>>>>>
>>>>> URL: http://svn.apache.org/viewvc?rev=1835022&view=rev
>>>>> Log:
>>>>> Bug 62238 - Add ability to Switch to next iteration of Current Loop
>>>>>
>>>>> Fix issue in nightly
>>>>> Bugzilla Id: 62238
>>>>>
>>>>> Modified:
>>>>>     jmeter/trunk/src/components/org/apache/jmeter/control/
>>>>> ForeachController.java
>>>>>     jmeter/trunk/src/core/org/apache/jmeter/control/
>>>>> IteratingController.java
>>>>>     jmeter/trunk/src/core/org/apache/jmeter/control/LoopControll
>>>>> er.java
>>>>>     jmeter/trunk/src/core/org/apache/jmeter/control/WhileControl
>>>>> ler.java
>>>>>
>>>>> Modified: jmeter/trunk/src/components/org/apache/jmeter/control/
>>>>> ForeachController.java
>>>>> URL: http://svn.apache.org/viewvc/jmeter/trunk/src/components/
>>>>> org/apache/jmeter/control/ForeachController.java?rev=
>>>>> 1835022&r1=1835021&r2=1835022&view=diff
>>>>> ============================================================
>>>>> ==================
>>>>> --- jmeter/trunk/src/components/org/apache/jmeter/control/Foreac
>>>>> hController.java
>>>>> (original)
>>>>> +++ jmeter/trunk/src/components/org/apache/jmeter/control/Foreac
>>>>> hController.java
>>>>> Tue Jul  3 20:16:38 2018
>>>>> @@ -20,6 +20,7 @@ package org.apache.jmeter.control;
>>>>>
>>>>>  import java.io.Serializable;
>>>>>
>>>>> +import org.apache.jmeter.engine.event.LoopIterationEvent;
>>>>>  import org.apache.jmeter.gui.GUIMenuSortOrder;
>>>>>  import org.apache.jmeter.samplers.Sampler;
>>>>>  import org.apache.jmeter.testelement.property.BooleanProperty;
>>>>> @@ -318,4 +319,10 @@ public class ForeachController extends G
>>>>>          resetLoopCount();
>>>>>          recoverRunningVersion();
>>>>>      }
>>>>> +
>>>>> +    @Override
>>>>> +    public void iterationStart(LoopIterationEvent iterEvent) {
>>>>> +        reInitialize();
>>>>> +        resetLoopCount();
>>>>> +    }
>>>>>  }
>>>>>
>>>>> Modified: jmeter/trunk/src/core/org/apache/jmeter/control/
>>>>> IteratingController.java
>>>>> URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/
>>>>> apache/jmeter/control/IteratingController.java?rev=
>>>>> 1835022&r1=1835021&r2=1835022&view=diff
>>>>> ============================================================
>>>>> ==================
>>>>> --- jmeter/trunk/src/core/org/apache/jmeter/control/IteratingCon
>>>>> troller.java
>>>>> (original)
>>>>> +++ jmeter/trunk/src/core/org/apache/jmeter/control/IteratingCon
>>>>> troller.java
>>>>> Tue Jul  3 20:16:38 2018
>>>>> @@ -18,6 +18,7 @@
>>>>>
>>>>>  package org.apache.jmeter.control;
>>>>>
>>>>> +import org.apache.jmeter.engine.event.LoopIterationListener;
>>>>>  import org.apache.jmeter.threads.JMeterContextService;
>>>>>  import org.apache.jmeter.threads.JMeterVariables;
>>>>>  import org.apache.jmeter.util.JMeterUtils;
>>>>> @@ -26,7 +27,7 @@ import org.apache.jmeter.util.JMeterUtil
>>>>>   * Identify controller that does iterations
>>>>>   * @since 4.1
>>>>>   */
>>>>> -public interface IteratingController {
>>>>> +public interface IteratingController extends LoopIterationListener {
>>>>>
>>>>>      /**
>>>>>       * Start next iteration ("continue" keyword equivalent in loops)
>>>>>
>>>>> Modified: jmeter/trunk/src/core/org/apache/jmeter/control/
>>>>> LoopController.java
>>>>> URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/
>>>>> apache/jmeter/control/LoopController.java?rev=
>>>>> 1835022&r1=1835021&r2=1835022&view=diff
>>>>> ============================================================
>>>>> ==================
>>>>> --- jmeter/trunk/src/core/org/apache/jmeter/control/LoopControll
>>>>> er.java
>>>>> (original)
>>>>> +++ jmeter/trunk/src/core/org/apache/jmeter/control/LoopControll
>>>>> er.java
>>>>> Tue Jul  3 20:16:38 2018
>>>>> @@ -20,23 +20,27 @@ package org.apache.jmeter.control;
>>>>>
>>>>>  import java.io.Serializable;
>>>>>
>>>>> +import org.apache.jmeter.engine.event.LoopIterationEvent;
>>>>> +import org.apache.jmeter.engine.event.LoopIterationListener;
>>>>>  import org.apache.jmeter.samplers.Sampler;
>>>>>  import org.apache.jmeter.testelement.property.BooleanProperty;
>>>>>  import org.apache.jmeter.testelement.property.IntegerProperty;
>>>>>  import org.apache.jmeter.testelement.property.JMeterProperty;
>>>>>  import org.apache.jmeter.testelement.property.StringProperty;
>>>>> +import org.slf4j.Logger;
>>>>> +import org.slf4j.LoggerFactory;
>>>>>
>>>>>  /**
>>>>>   * Class that implements the Loop Controller, ie iterate infinitely
>>>>> or a
>>>>> configured number of times
>>>>>   */
>>>>> -public class LoopController extends GenericController implements
>>>>> Serializable, IteratingController {
>>>>> +public class LoopController extends GenericController implements
>>>>> Serializable, IteratingController, LoopIterationListener {
>>>>>
>>>>>      public static final int INFINITE_LOOP_COUNT = -1; // $NON-NLS-1$
>>>>>
>>>>>      public static final String LOOPS = "LoopController.loops"; //
>>>>> $NON-NLS-1$
>>>>>
>>>>>      private static final long serialVersionUID = 7833960784370272300L;
>>>>> -
>>>>> +    private static final Logger LOGGER = LoggerFactory.getLogger(
>>>>> LoopController.class);
>>>>>      /**
>>>>>       * In spite of the name, this is actually used to determine if the
>>>>> loop controller is repeatable.
>>>>>       *
>>>>> @@ -221,4 +225,13 @@ public class LoopController extends Gene
>>>>>          resetLoopCount();
>>>>>          recoverRunningVersion();
>>>>>      }
>>>>> +
>>>>> +    @Override
>>>>> +    public void iterationStart(LoopIterationEvent iterEvent) {
>>>>> +        if(LOGGER.isInfoEnabled()) {
>>>>> +            LOGGER.info("iterationStart called on {} with source {}
>>>>> and
>>>>> iteration {}", getName(), iterEvent.getSource(),
>>>>> iterEvent.getIteration());
>>>>> +        }
>>>>> +        reInitialize();
>>>>> +        resetLoopCount();
>>>>> +    }
>>>>>  }
>>>>>
>>>>> Modified: jmeter/trunk/src/core/org/apache/jmeter/control/
>>>>> WhileController.java
>>>>> URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/
>>>>> apache/jmeter/control/WhileController.java?rev=
>>>>> 1835022&r1=1835021&r2=1835022&view=diff
>>>>> ============================================================
>>>>> ==================
>>>>> --- jmeter/trunk/src/core/org/apache/jmeter/control/WhileControl
>>>>> ler.java
>>>>> (original)
>>>>> +++ jmeter/trunk/src/core/org/apache/jmeter/control/WhileControl
>>>>> ler.java
>>>>> Tue Jul  3 20:16:38 2018
>>>>> @@ -20,6 +20,7 @@ package org.apache.jmeter.control;
>>>>>
>>>>>  import java.io.Serializable;
>>>>>
>>>>> +import org.apache.jmeter.engine.event.LoopIterationEvent;
>>>>>  import org.apache.jmeter.samplers.Sampler;
>>>>>  import org.apache.jmeter.testelement.property.JMeterProperty;
>>>>>  import org.apache.jmeter.testelement.property.StringProperty;
>>>>> @@ -160,4 +161,11 @@ public class WhileController extends Gen
>>>>>          resetLoopCount();
>>>>>          recoverRunningVersion();
>>>>>      }
>>>>> +
>>>>> +    @Override
>>>>> +    public void iterationStart(LoopIterationEvent iterEvent) {
>>>>> +        reInitialize();
>>>>> +        endOfLoop(true);
>>>>>
>>>>>
>>>> The exception happens here. I believe it is because the Counter is not
>>> initialized yet and the jexl expression is testet on
>>> "${counter} != 10", but there is no variable named counter and therefor
>>> it
>>> doesn't get replaced.
>>>
>>> I am not sure, whether we should just ignore any exceptions (log them and
>>> use an empty string as alternative) in endOfLoop(true), or if we should
>>> require, that one has to
>>> define the variable upfront.
>>>
>>> Regards,
>>>  Felix
>>>
>>> +        resetLoopCount();
>>>
>>>> +    }
>>>>>  }
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>


-- 
Cordialement.
Philippe Mouawad.

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message