This is an automated email from the ASF dual-hosted git repository.
vladimirsitnikov 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 77675e0b8e fix: support trailing empty default values in JSON
Extractor(#6448)
77675e0b8e is described below
commit 77675e0b8e6fa8a81a101777c450acc97927b781
Author: Raul Almeida <[email protected]>
AuthorDate: Wed Apr 23 10:00:46 2025 -0300
fix: support trailing empty default values in JSON Extractor(#6448)
See https://errorprone.info/bugpattern/StringSplitter
---
.../extractor/json/jsonpath/JSONPostProcessor.java | 2 +-
.../jmeter/extractor/TestJSONPostProcessor.java | 29 ++++++++++++++++++++++
2 files changed, 30 insertions(+), 1 deletion(-)
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 390fd22af5..0626d1c164 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
@@ -70,7 +70,7 @@ public class JSONPostProcessor
List<String> jsonResponses = extractJsonResponse(context, vars);
String[] refNames = getRefNames().split(SEPARATOR);
String[] jsonPathExpressions =
getJsonPathExpressions().split(SEPARATOR);
- String[] defaultValues = getDefaultValues().split(SEPARATOR);
+ String[] defaultValues = getDefaultValues().split(SEPARATOR, -1);
int[] matchNumbers = getMatchNumbersAsInt(defaultValues.length);
validateSameLengthOfArguments(refNames, jsonPathExpressions,
defaultValues);
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 7705bee083..d88bbfac06 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
@@ -317,6 +317,35 @@ class TestJSONPostProcessor {
assertEquals("3", vars.get(VAR_NAME + "_matchNr"));
}
+ @Test
+ void testProcessDefaultsWithAllEmptyStrings() {
+ JMeterContext context = JMeterContextService.getContext();
+ // Use match number 1 for simplicity
+ JSONPostProcessor processor = setupProcessor(context, "1", false);
+ JMeterVariables vars = new JMeterVariables();
+ context.setVariables(vars);
+
+ // Set up sample result that won't match JSON Paths
+ SampleResult sampleResult = createSampleResult("{}"); // Empty JSON
+ context.setPreviousResult(sampleResult);
+
+ // Configure the processor
+ // Three paths and names, corresponding to the three empty defaults
+ processor.setJsonPathExpressions("$.key1;$.key2;$.key3");
+ processor.setRefNames("var1;var2;var3");
+ // *** Default values string containing only separators ***
+ // This should split into ["", "", ""] with the fix
+ processor.setDefaultValues(";;"); // Represents 3 empty default values
+ processor.setScopeAll(); // Ensure it processes the main sample
+
+ // Process the sample
+ processor.process();
+
+ // Assertions: Verify all variables received an empty string default
+ assertEquals("", vars.get("var1"), "Variable var1 should get the first
(empty) default value");
+ assertEquals("", vars.get("var2"), "Variable var2 should get the
second (empty) default value");
+ assertEquals("", vars.get("var3"), "Variable var3 should get the third
(empty) default value");
+ }
private static JSONPostProcessor setupProcessor(JMeterContext context,
String matchNumbers) {
return setupProcessor(context, matchNumbers, true);