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());
+        }
+
     }
 }

Reply via email to