This is an automated email from the ASF dual-hosted git repository.
fschumacher pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jmeter.git
The following commit(s) were added to refs/heads/master by this push:
new 75375c0 Skip empty extracted results on JSON Extractor and JSON
JMESPath Extractor
75375c0 is described below
commit 75375c0f163894bffb2bd70e62632694acdf4110
Author: Felix Schumacher <[email protected]>
AuthorDate: Wed Jun 9 18:09:20 2021 +0200
Skip empty extracted results on JSON Extractor and JSON JMESPath Extractor
With the addition of more than one result for sub-samples, the extracted
results can be empty. Those empty results have to be filtered away, or
we get warnings in the logs.
Part of Bugzilla Id: 65269
---
.../extractor/json/jmespath/JMESPathExtractor.java | 1 +
.../extractor/json/jsonpath/JSONPostProcessor.java | 2 ++
.../jmeter/extractor/TestJSONPostProcessor.java | 22 ++++++++++++++++++++++
.../json/jmespath/TestJMESPathExtractor.java | 14 ++++++++++++++
4 files changed, 39 insertions(+)
diff --git
a/src/components/src/main/java/org/apache/jmeter/extractor/json/jmespath/JMESPathExtractor.java
b/src/components/src/main/java/org/apache/jmeter/extractor/json/jmespath/JMESPathExtractor.java
index 8cad7e6..324fdbb 100644
---
a/src/components/src/main/java/org/apache/jmeter/extractor/json/jmespath/JMESPathExtractor.java
+++
b/src/components/src/main/java/org/apache/jmeter/extractor/json/jmespath/JMESPathExtractor.java
@@ -176,6 +176,7 @@ public class JMESPathExtractor extends
AbstractScopedTestElement
if (previousResult != null) {
List<String> results = getSampleList(previousResult).stream()
.map(SampleResult::getResponseDataAsString)
+ .filter(StringUtils::isNotBlank)
.collect(Collectors.toList());
if (log.isDebugEnabled()) {
log.debug("JMESExtractor {} working on Responses: {}",
getName(), results);
diff --git
a/src/components/src/main/java/org/apache/jmeter/extractor/json/jsonpath/JSONPostProcessor.java
b/src/components/src/main/java/org/apache/jmeter/extractor/json/jsonpath/JSONPostProcessor.java
index 6e61f73..a307f3b 100644
---
a/src/components/src/main/java/org/apache/jmeter/extractor/json/jsonpath/JSONPostProcessor.java
+++
b/src/components/src/main/java/org/apache/jmeter/extractor/json/jsonpath/JSONPostProcessor.java
@@ -24,6 +24,7 @@ import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
+import org.apache.commons.lang3.StringUtils;
import org.apache.jmeter.processor.PostProcessor;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.testelement.AbstractScopedTestElement;
@@ -214,6 +215,7 @@ public class JSONPostProcessor
if (previousResult != null) {
List<String> results = getSampleList(previousResult).stream()
.map(SampleResult::getResponseDataAsString)
+ .filter(StringUtils::isNotBlank)
.collect(Collectors.toList());
if (log.isDebugEnabled()) {
log.debug("JSON Extractor {} working on Responses: {}",
getName(), results);
diff --git
a/src/components/src/test/java/org/apache/jmeter/extractor/TestJSONPostProcessor.java
b/src/components/src/test/java/org/apache/jmeter/extractor/TestJSONPostProcessor.java
index acc6775..57362dd 100644
---
a/src/components/src/test/java/org/apache/jmeter/extractor/TestJSONPostProcessor.java
+++
b/src/components/src/test/java/org/apache/jmeter/extractor/TestJSONPostProcessor.java
@@ -213,6 +213,28 @@ class TestJSONPostProcessor {
}
@Test
+ void testEmptyInput() throws ParseException {
+ JMeterContext context = JMeterContextService.getContext();
+ JSONPostProcessor processor = setupProcessor(context, "0", false);
+
+ SampleResult result = new SampleResult();
+ result.setResponseData("".getBytes(StandardCharsets.UTF_8));
+
+ JMeterVariables vars = new JMeterVariables();
+ context.setVariables(vars);
+ context.setPreviousResult(result);
+
+ processor.setJsonPathExpressions("$.context");
+ processor.setDefaultValues("NONE");
+ processor.setScopeAll();
+ processor.process();
+
+ assertThat(vars.get(VAR_NAME), CoreMatchers.is("NONE"));
+ assertThat(vars.get(VAR_NAME + "_matchNr"), CoreMatchers.nullValue());
+ assertThat(vars.get(VAR_NAME + "_1"),
CoreMatchers.is(CoreMatchers.nullValue()));
+ }
+
+ @Test
void testBug59609() throws ParseException {
JMeterContext context = JMeterContextService.getContext();
JSONPostProcessor processor = setupProcessor(context, "0", false);
diff --git
a/src/components/src/test/java/org/apache/jmeter/extractor/json/jmespath/TestJMESPathExtractor.java
b/src/components/src/test/java/org/apache/jmeter/extractor/json/jmespath/TestJMESPathExtractor.java
index c9f2b3e..479e968 100644
---
a/src/components/src/test/java/org/apache/jmeter/extractor/json/jmespath/TestJMESPathExtractor.java
+++
b/src/components/src/test/java/org/apache/jmeter/extractor/json/jmespath/TestJMESPathExtractor.java
@@ -385,5 +385,19 @@ public class TestJMESPathExtractor {
assertThat(vars.get(REFERENCE_NAME+ "_1"),
CoreMatchers.nullValue());
assertThat(vars.get(REFERENCE_NAME_MATCH_NUMBER),
CoreMatchers.is("0"));
}
+
+ @Test
+ public void testNoInput() {
+ SampleResult sampleResult = new SampleResult();
+ JMeterVariables vars = new JMeterVariables();
+ JMESPathExtractor processor = setupProcessor(vars, sampleResult,
"", fromVariables, "0");
+
+ processor.setJmesPathExpression("a.b");
+ processor.process();
+ assertThat(vars.get(REFERENCE_NAME),
CoreMatchers.is(DEFAULT_VALUE));
+ assertThat(vars.get(REFERENCE_NAME+ "_1"),
CoreMatchers.nullValue());
+ assertThat(vars.get(REFERENCE_NAME_MATCH_NUMBER),
CoreMatchers.nullValue());
+ }
+
}
}