Thanks Felix! On Thu, Dec 1, 2016 at 8:39 PM, Felix Schumacher < felix.schumac...@internetallee.de> wrote:
> Am 01.12.2016 um 20:05 schrieb Philippe Mouawad: > >> Hi Felix, >> Thanks for patch. >> >> I would create a bugzilla for this one and amend changes (incompatible >> part) as it could introduce regressions in scripts if users relied on >> buggy >> behaviour. >> > Done. > Felix > > I can do it if needed. >> Thx >> Regards >> >> On Thursday, December 1, 2016, <fschumac...@apache.org> wrote: >> >> Author: fschumacher >>> Date: Thu Dec 1 18:39:36 2016 >>> New Revision: 1772247 >>> >>> URL: http://svn.apache.org/viewvc?rev=1772247&view=rev >>> Log: >>> Clear leftover variables before extracting new ones in JSON Extractor. >>> Based on a patch by Qi Chen (qi.chensh at ele.me) >>> >>> This closes #235 on github. >>> >>> Modified: >>> jmeter/trunk/src/components/org/apache/jmeter/extractor/jso >>> n/jsonpath/ >>> JSONPostProcessor.java >>> jmeter/trunk/test/src/org/apache/jmeter/extractor/ >>> TestJSONPostProcessor.java >>> jmeter/trunk/xdocs/changes.xml >>> >>> Modified: jmeter/trunk/src/components/org/apache/jmeter/extractor/ >>> json/jsonpath/JSONPostProcessor.java >>> URL: http://svn.apache.org/viewvc/jmeter/trunk/src/components/ >>> org/apache/jmeter/extractor/json/jsonpath/JSONPostProcessor.java?rev= >>> 1772247&r1=1772246&r2=1772247&view=diff >>> ============================================================ >>> ================== >>> --- jmeter/trunk/src/components/org/apache/jmeter/extractor/json >>> /jsonpath/JSONPostProcessor.java >>> (original) >>> +++ jmeter/trunk/src/components/org/apache/jmeter/extractor/json >>> /jsonpath/JSONPostProcessor.java >>> Thu Dec 1 18:39:36 2016 >>> @@ -99,6 +99,7 @@ public class JSONPostProcessor extends A >>> int matchNumber = matchNumbers[i]; >>> String currentRefName = refNames[i].trim(); >>> String currentJsonPath = jsonPathExpressions[i].trim(); >>> + clearOldRefVars(vars, currentRefName); >>> try { >>> if (jsonResponse.isEmpty()) { >>> vars.put(currentRefName, defaultValues[i]); >>> @@ -167,7 +168,9 @@ public class JSONPostProcessor extends A >>> vars.put(currentRefName + ALL_SUFFIX, >>> vars.get(currentRefName)); >>> } >>> } >>> - vars.put(currentRefName + REF_MATCH_NR, >>> Integer.toString(extractedValues.size())); >>> + if (matchNumber != 0) { >>> + vars.put(currentRefName + REF_MATCH_NR, >>> Integer.toString(extractedValues.size())); >>> + } >>> } >>> } >>> } catch (Exception e) { >>> @@ -183,6 +186,13 @@ public class JSONPostProcessor extends A >>> } >>> } >>> >>> + private void clearOldRefVars(JMeterVariables vars, String refName) >>> { >>> + vars.remove(refName + REF_MATCH_NR); >>> + for (int i=1; vars.get(refName + "_" + i) != null; i++) { >>> + vars.remove(refName + "_" + i); >>> + } >>> + } >>> + >>> private void placeObjectIntoVars(JMeterVariables vars, String >>> currentRefName, >>> List<Object> extractedValues, int matchNr) { >>> vars.put(currentRefName, >>> >>> Modified: jmeter/trunk/test/src/org/apache/jmeter/extractor/ >>> TestJSONPostProcessor.java >>> URL: http://svn.apache.org/viewvc/jmeter/trunk/test/src/org/ >>> apache/jmeter/extractor/TestJSONPostProcessor.java? >>> rev=1772247&r1=1772246&r2=1772247&view=diff >>> ============================================================ >>> ================== >>> --- jmeter/trunk/test/src/org/apache/jmeter/extractor/TestJSONPo >>> stProcessor.java >>> (original) >>> +++ jmeter/trunk/test/src/org/apache/jmeter/extractor/TestJSONPo >>> stProcessor.java >>> Thu Dec 1 18:39:36 2016 >>> @@ -73,6 +73,70 @@ public class TestJSONPostProcessor { >>> } >>> >>> @Test >>> + public void testProcessRandomElementMultipleMatches() { >>> + JMeterContext context = JMeterContextService.getContext(); >>> + JSONPostProcessor processor = setupProcessor(context, "0", >>> true); >>> + JMeterVariables vars = new JMeterVariables(); >>> + processor.setDefaultValues("NONE"); >>> + processor.setJsonPathExpressions("$[*]"); >>> + processor.setRefNames("varname"); >>> + processor.setScopeVariable("contentvar"); >>> + context.setVariables(vars); >>> + vars.put("contentvar", "[\"one\", \"two\"]"); >>> + processor.process(); >>> + assertThat(vars.get("varname"), CoreMatchers.is(CoreMatchers.a >>> nyOf(CoreMatchers.is("one"), >>> CoreMatchers.is("two")))); >>> + assertThat(vars.get("varname_1"), CoreMatchers.is(CoreMatchers. >>> nullValue())); >>> + assertThat(vars.get("varname_2"), CoreMatchers.is(CoreMatchers. >>> nullValue())); >>> + assertThat(vars.get("varname_matchNr"), >>> CoreMatchers.is(CoreMatchers.nullValue())); >>> + } >>> + >>> + @Test >>> + public void testPR235CaseEmptyResponse() { >>> + JMeterContext context = JMeterContextService.getContext(); >>> + JSONPostProcessor processor = setupProcessor(context, "-1", >>> true); >>> + JMeterVariables vars = new JMeterVariables(); >>> + processor.setDefaultValues("NONE"); >>> + processor.setJsonPathExpressions("$[*]"); >>> + processor.setRefNames("varname"); >>> + processor.setScopeVariable("contentvar"); >>> + context.setVariables(vars); >>> + vars.put("contentvar", "[\"one\", \"two\"]"); >>> + processor.process(); >>> + assertThat(vars.get("varname_1"), CoreMatchers.is("one")); >>> + assertThat(vars.get("varname_2"), CoreMatchers.is("two")); >>> + assertThat(vars.get("varname_matchNr"), CoreMatchers.is("2")); >>> + vars.put("contentvar", ""); >>> + processor.process(); >>> + assertThat(vars.get("varname_matchNr"), >>> CoreMatchers.is(CoreMatchers.nullValue())); >>> + assertThat(vars.get("varname_1"), CoreMatchers.is(CoreMatchers. >>> nullValue())); >>> + assertThat(vars.get("varname_2"), CoreMatchers.is(CoreMatchers. >>> nullValue())); >>> + } >>> + >>> + @Test >>> + public void testPR235CaseMatchOneWithZero() { >>> + JMeterContext context = JMeterContextService.getContext(); >>> + JSONPostProcessor processor = setupProcessor(context, "-1", >>> true); >>> + JMeterVariables vars = new JMeterVariables(); >>> + processor.setDefaultValues("NONE"); >>> + processor.setJsonPathExpressions("$[*]"); >>> + processor.setRefNames("varname"); >>> + processor.setScopeVariable("contentvar"); >>> + context.setVariables(vars); >>> + vars.put("contentvar", "[\"one\", \"two\"]"); >>> + processor.process(); >>> + assertThat(vars.get("varname_1"), CoreMatchers.is("one")); >>> + assertThat(vars.get("varname_2"), CoreMatchers.is("two")); >>> + assertThat(vars.get("varname_matchNr"), CoreMatchers.is("2")); >>> + vars.put("contentvar", "[\"A\", \"B\"]"); >>> + processor.setMatchNumbers("0"); >>> + processor.process(); >>> + assertThat(vars.get("varname"), CoreMatchers.is(CoreMatchers.a >>> nyOf(CoreMatchers.is("A"), >>> CoreMatchers.is("B")))); >>> + assertThat(vars.get("varname_matchNr"), >>> CoreMatchers.is(CoreMatchers.nullValue())); >>> + assertThat(vars.get("varname_1"), CoreMatchers.is(CoreMatchers. >>> nullValue())); >>> + assertThat(vars.get("varname_2"), CoreMatchers.is(CoreMatchers. >>> nullValue())); >>> + } >>> + >>> + @Test >>> public void testBug59609() throws ParseException { >>> JMeterContext context = JMeterContextService.getContext(); >>> JSONPostProcessor processor = setupProcessor(context, "0", >>> false); >>> @@ -91,8 +155,9 @@ public class TestJSONPostProcessor { >>> >>> JSONParser parser = new JSONParser(0); >>> Object expectedValue = parser.parse(innerValue); >>> - Assert.assertEquals(expectedValue, parser.parse(vars.get(VAR_ >>> NAME))); >>> - Assert.assertEquals("1", vars.get(VAR_NAME + "_matchNr")); >>> + assertThat(parser.parse(vars.get(VAR_NAME)), >>> CoreMatchers.is(expectedValue)); >>> + assertThat(vars.get(VAR_NAME + "_matchNr"), >>> CoreMatchers.is(CoreMatchers.nullValue())); >>> + assertThat(vars.get(VAR_NAME + "_1"), >>> CoreMatchers.is(CoreMatchers.nullValue())); >>> } >>> >>> @Test >>> >>> Modified: jmeter/trunk/xdocs/changes.xml >>> URL: http://svn.apache.org/viewvc/jmeter/trunk/xdocs/changes. >>> xml?rev=1772247&r1=1772246&r2=1772247&view=diff >>> ============================================================ >>> ================== >>> --- jmeter/trunk/xdocs/changes.xml [utf-8] (original) >>> +++ jmeter/trunk/xdocs/changes.xml [utf-8] Thu Dec 1 18:39:36 2016 >>> @@ -168,6 +168,8 @@ Fill in some detail. >>> >>> <h3>Timers, Assertions, Config, Pre- & Post-Processors</h3> >>> <ul> >>> + <li><pr>235</pr>Clear old variables before extracting new ones in >>> JSON Extractor. >>> + Based on a patch by Qi Chen (qi.chensh at ele.me)</li> >>> </ul> >>> >>> <h3>Functions</h3> >>> >>> >>> >>> > -- Cordialement. Philippe Mouawad.