Search code examples
performancetestingjmeterjmeter-plugins

Obfuscate or Secure Jmeter Script


I am working on Jmeter Scripts from sometime now, there is a need to secure the Jmeter script and majorly make it unreadable for external stakeholders. My expectation is to obfuscate or deliver the script as some kind of JAR or executable. I need some ideas or workaround to start with.

Thanks

Senz79


Solution

  • It is possible to run existing JMeter script from Java code or create a JMeter test purely in Java using JMeter API so it is not a problem to create an executable binary which will run your test and obfuscate it.

    Example Java code to run a JMeter test:

    import org.apache.jmeter.engine.StandardJMeterEngine;
    import org.apache.jmeter.reporters.ResultCollector;
    import org.apache.jmeter.reporters.Summariser;
    import org.apache.jmeter.save.SaveService;
    import org.apache.jmeter.util.JMeterUtils;
    import org.apache.jorphan.collections.HashTree;
    
    import java.io.File;
    
    public class JMeterFromCode {
    
        public static void main(String[] argv) throws Exception {
    
            // JMeter Engine
            StandardJMeterEngine jmeter = new StandardJMeterEngine();
    
            // Initialize Properties, logging, locale, etc.
            JMeterUtils.loadJMeterProperties("/tmp/jmeter/bin/jmeter.properties");
            JMeterUtils.setJMeterHome("/tmp/jmeter");
            JMeterUtils.initLogging();// you can comment this line out to see extra log messages of i.e. DEBUG level
            JMeterUtils.initLocale();
    
    
            // Initialize JMeter SaveService
            SaveService.loadProperties();
    
            // Load existing .jmx Test Plan       
            HashTree testPlanTree = SaveService.loadTree(new File("/tmp/jmeter/test.jmx"));
    
            Summariser summer = null;
            String summariserName = JMeterUtils.getPropDefault("summariser.name", "summary");
            if (summariserName.length() > 0) {
                summer = new Summariser(summariserName);
            }
    
            ResultCollector logger = new ResultCollector(summer);
            logger.setFilename("/tmp/jmeter/test.jtl");
            testPlanTree.add(testPlanTree.getArray()[0], logger);
    
    
            // Run JMeter Test
            jmeter.configure(testPlanTree);
            jmeter.run();
        }
    }
    

    See the following reference material to get started: