> Testing Threadgroup (users = 100) > + work > + work > + testaction and in comment use ${__setProperty($stopcounter, > ${__jexl(${stopcounter}+1)}
>That may not be thread-safe - updates may be lost if two threads run the test >action at about the same time. >The Jexl execute() method is synchronized, so if there is only one instance of the >function call, you could perhaps do it all in Jexl. Can you elaborate on doing it all in jexl? I struggled forever for some reason trying to pass properties into jexl and doing simply math like this ${__jexl(${__P(stopcounter)}+1)} Eventually I switch to javascript and finally got it working like this in a simple test scenario. I have no idea why my jexl stuff was failing. It simply would say in the logs it failed to evaluate (1+1) . Switched to javascript and same expression worked. I have the above scenario working using Testing thread executes ${__setProperty(stopcounter,${__javaScript(${__P(stopcounter)}+1)})} Monitoring thread executes a while loop with the condition ${__javaScript(${__P(stopcounter)} <= 10)} Where 10 will eventually be the variable that tells the testing thread how often to run. But you say this may not be thread safe. Can you elaborate on your comment about all in jexl? >Actually, I think there's a simpler solution. >${__BeanShell(org.apache.jmeter.threads.JMeterContextService.getNumberO fThreads()==1)} This seems to work very well. I have the monitor thread group setup like Threadgroup loop forever + monitoring sample + while controller ${__BeanShell(org.apache.jmeter.threads.JMeterContextService.getNumberOf Threads()==1)} + + test action set to stop thread Below is a dummy test plan that functions using the above method for future mailing list searches :) <?xml version="1.0" encoding="UTF-8"?> <jmeterTestPlan version="1.2" properties="2.0"> <hashTree> <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Test Plan" enabled="true"> <stringProp name="TestPlan.comments"></stringProp> <boolProp name="TestPlan.functional_mode">false</boolProp> <boolProp name="TestPlan.serialize_threadgroups">false</boolProp> <elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"> <collectionProp name="Arguments.arguments"/> </elementProp> <stringProp name="TestPlan.user_define_classpath"></stringProp> </TestPlan> <hashTree> <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="testing thread" enabled="true"> <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true"> <boolProp name="LoopController.continue_forever">false</boolProp> <stringProp name="LoopController.loops">1</stringProp> </elementProp> <stringProp name="ThreadGroup.num_threads">10</stringProp> <stringProp name="ThreadGroup.ramp_time">1</stringProp> <longProp name="ThreadGroup.start_time">1210354200000</longProp> <longProp name="ThreadGroup.end_time">1210354200000</longProp> <boolProp name="ThreadGroup.scheduler">false</boolProp> <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> <stringProp name="ThreadGroup.duration"></stringProp> <stringProp name="ThreadGroup.delay"></stringProp> </ThreadGroup> <hashTree> <HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="test request" enabled="true"> <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"> <collectionProp name="Arguments.arguments"/> </elementProp> <stringProp name="HTTPSampler.domain">www.yahoo.com</stringProp> <stringProp name="HTTPSampler.port"></stringProp> <stringProp name="HTTPSampler.protocol"></stringProp> <stringProp name="HTTPSampler.contentEncoding"></stringProp> <stringProp name="HTTPSampler.path">/</stringProp> <stringProp name="HTTPSampler.method">GET</stringProp> <boolProp name="HTTPSampler.follow_redirects">false</boolProp> <boolProp name="HTTPSampler.auto_redirects">true</boolProp> <boolProp name="HTTPSampler.use_keepalive">true</boolProp> <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> <stringProp name="HTTPSampler.mimetype"></stringProp> <stringProp name="HTTPSampler.FILE_NAME"></stringProp> <stringProp name="HTTPSampler.FILE_FIELD"></stringProp> <stringProp name="HTTPSampler.monitor">false</stringProp> <stringProp name="HTTPSampler.embedded_url_re"></stringProp> </HTTPSampler> <hashTree> <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Constant Timer" enabled="true"> <stringProp name="ConstantTimer.delay">1000</stringProp> </ConstantTimer> <hashTree/> </hashTree> </hashTree> <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Monitoring Thread" enabled="true"> <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true"> <boolProp name="LoopController.continue_forever">false</boolProp> <intProp name="LoopController.loops">-1</intProp> </elementProp> <stringProp name="ThreadGroup.num_threads">1</stringProp> <stringProp name="ThreadGroup.ramp_time">1</stringProp> <longProp name="ThreadGroup.start_time">1210353698000</longProp> <longProp name="ThreadGroup.end_time">1210353698000</longProp> <boolProp name="ThreadGroup.scheduler">false</boolProp> <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> <stringProp name="ThreadGroup.duration"></stringProp> <stringProp name="ThreadGroup.delay"></stringProp> </ThreadGroup> <hashTree> <HTTPSampler guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="monitor request" enabled="true"> <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"> <collectionProp name="Arguments.arguments"/> </elementProp> <stringProp name="HTTPSampler.domain">www.yahoo.com</stringProp> <stringProp name="HTTPSampler.port"></stringProp> <stringProp name="HTTPSampler.protocol"></stringProp> <stringProp name="HTTPSampler.contentEncoding"></stringProp> <stringProp name="HTTPSampler.path">/</stringProp> <stringProp name="HTTPSampler.method">GET</stringProp> <boolProp name="HTTPSampler.follow_redirects">false</boolProp> <boolProp name="HTTPSampler.auto_redirects">true</boolProp> <boolProp name="HTTPSampler.use_keepalive">true</boolProp> <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> <stringProp name="HTTPSampler.mimetype"></stringProp> <stringProp name="HTTPSampler.FILE_NAME"></stringProp> <stringProp name="HTTPSampler.FILE_FIELD"></stringProp> <stringProp name="HTTPSampler.monitor">false</stringProp> <stringProp name="HTTPSampler.embedded_url_re"></stringProp> </HTTPSampler> <hashTree/> <WhileController guiclass="WhileControllerGui" testclass="WhileController" testname="While Controller" enabled="true"> <stringProp name="WhileController.condition">${__BeanShell(org.apache.jmeter.threads .JMeterContextService.getNumberOfThreads()==1)}</stringProp> </WhileController> <hashTree> <TestAction guiclass="TestActionGui" testclass="TestAction" testname="Stop Test" enabled="true"> <intProp name="ActionProcessor.action">0</intProp> <intProp name="ActionProcessor.target">0</intProp> <stringProp name="ActionProcessor.duration"></stringProp> </TestAction> <hashTree/> </hashTree> </hashTree> <ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree" enabled="true"> <boolProp name="ResultCollector.error_logging">false</boolProp> <objProp> <value class="SampleSaveConfiguration"> <time>true</time> <latency>true</latency> <timestamp>true</timestamp> <success>true</success> <label>true</label> <code>true</code> <message>true</message> <threadName>true</threadName> <dataType>true</dataType> <encoding>false</encoding> <assertions>true</assertions> <subresults>true</subresults> <responseData>false</responseData> <samplerData>false</samplerData> <xml>true</xml> <fieldNames>false</fieldNames> <responseHeaders>false</responseHeaders> <requestHeaders>false</requestHeaders> <responseDataOnError>false</responseDataOnError> <saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMe ssage> <assertionsResultsToSave>0</assertionsResultsToSave> <bytes>true</bytes> </value> <name>saveConfig</name> </objProp> <stringProp name="filename"></stringProp> </ResultCollector> <hashTree/> <ResultCollector guiclass="StatVisualizer" testclass="ResultCollector" testname="Aggregate Report" enabled="true"> <boolProp name="ResultCollector.error_logging">false</boolProp> <objProp> <value class="SampleSaveConfiguration"> <time>true</time> <latency>true</latency> <timestamp>true</timestamp> <success>true</success> <label>true</label> <code>true</code> <message>true</message> <threadName>true</threadName> <dataType>true</dataType> <encoding>false</encoding> <assertions>true</assertions> <subresults>true</subresults> <responseData>false</responseData> <samplerData>false</samplerData> <xml>true</xml> <fieldNames>false</fieldNames> <responseHeaders>false</responseHeaders> <requestHeaders>false</requestHeaders> <responseDataOnError>false</responseDataOnError> <saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMe ssage> <assertionsResultsToSave>0</assertionsResultsToSave> <bytes>true</bytes> </value> <name>saveConfig</name> </objProp> <stringProp name="filename"></stringProp> </ResultCollector> <hashTree/> </hashTree> </hashTree> </jmeterTestPlan> --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]