Skip to content

Commit

Permalink
Add variable support for Include Controller
Browse files Browse the repository at this point in the history
==============

- Add variable support for includePath
- Add tests for getIncludePathAsFunction()
  • Loading branch information
polarnik committed Dec 9, 2021
1 parent edc7727 commit be21f47
Show file tree
Hide file tree
Showing 2 changed files with 125 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
import java.io.IOException;
import java.util.ArrayList;

import org.apache.jmeter.engine.util.CompoundVariable;
import org.apache.jmeter.functions.InvalidVariableException;
import org.apache.jmeter.gui.tree.JMeterTreeNode;
import org.apache.jmeter.save.SaveService;
import org.apache.jmeter.services.FileServer;
Expand Down Expand Up @@ -92,6 +94,32 @@ public String getIncludePath() {
return this.getPropertyAsString(INCLUDE_PATH);
}

/**
* return the JMX file path with function support.
* @return the JMX file path with function support
*/
public String getIncludePathAsFunction()
{
String jmxfile = this.getPropertyAsString(INCLUDE_PATH);
CompoundVariable masterFunction = new CompoundVariable();
try{
log.debug("Trying to evaluate 'Include Path' as an expression: {}", jmxfile);
masterFunction.setParameters(jmxfile);
if(masterFunction.hasFunction()) {
String jmxfileCompile = masterFunction.getFunction().execute();
log.debug("The value of 'Include Path' is computed as: {}", jmxfileCompile);
return jmxfileCompile;
}
} catch (InvalidVariableException e)
{
log.warn("Invalid variable in 'Include Path' {}. See log for details", jmxfile);
log.warn("Invalid variable in 'Include Path':", e);
}

log.debug("The value of 'Include Path' is simple string: {}", jmxfile);
return jmxfile;
}

/**
* The way ReplaceableController works is clone is called first,
* followed by replace(HashTree) and finally getReplacement().
Expand All @@ -117,7 +145,7 @@ public void resolveReplacementSubTree(JMeterTreeNode context) {
*/
protected HashTree loadIncludedElements() {
// only try to load the JMX test plan if there is one
final String includePath = getIncludePath();
final String includePath = getIncludePathAsFunction();
HashTree tree = null;
if (includePath != null && includePath.length() > 0) {
String fileName=PREFIX+includePath;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to you under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.apache.jmeter.control;

import static org.junit.Assert.assertEquals;

import org.apache.jmeter.junit.JMeterTestCase;
import org.apache.jmeter.threads.JMeterContext;
import org.apache.jmeter.threads.JMeterContextService;
import org.apache.jmeter.threads.JMeterVariables;
import org.junit.jupiter.api.Test;

public class TestIncludeController extends JMeterTestCase {


@Test
public void testGetIncludePathWithVariable() {
String varName = "testGetIncludePathWithVariable_file_name";
String varValue = "C:\\testPath\\testFile.jmx";
String varExpression = "${" + varName + "}";

JMeterVariables vars = new JMeterVariables();
JMeterContext jmctx = JMeterContextService.getContext();

jmctx.setVariables(vars);
vars.put(varName, varValue);

IncludeController includeController = new IncludeController();
includeController.setIncludePath(varExpression);

assertEquals(varValue, includeController.getIncludePathAsFunction());
}

@Test
public void testGetIncludePathWithVariables() {
String dirName = "var1";
String dirValue = "/tmp/path/test";

String fileName = "var2";
String fileValue = "testFile.jmx";

String varExpression = "${" + dirName + "}/${" + fileName + "}";

JMeterVariables vars = new JMeterVariables();
JMeterContext jmctx = JMeterContextService.getContext();

jmctx.setVariables(vars);
vars.put(dirName, dirValue);
vars.put(fileName, fileValue);

IncludeController includeController = new IncludeController();
includeController.setIncludePath(varExpression);

assertEquals(dirValue + "/" + fileValue, includeController.getIncludePathAsFunction());
}


@Test
public void testGetIncludePathWithSimpleString() {
String varValue = "C:\\testPath\\testFile.jmx";

JMeterVariables vars = new JMeterVariables();
JMeterContext jmctx = JMeterContextService.getContext();

IncludeController includeController = new IncludeController();
includeController.setIncludePath(varValue);

assertEquals(varValue, includeController.getIncludePathAsFunction());
}

@Test
public void testGetIncludePathWithEmptyString() {
String varValue = "";

IncludeController includeController = new IncludeController();
includeController.setIncludePath(varValue);

assertEquals(varValue, includeController.getIncludePathAsFunction());
}

}

0 comments on commit be21f47

Please sign in to comment.