Skip to main content
Glama
Narasimhakatta

JMeter MCP Server

execute_jmeter_test

Run JMeter performance tests from JMX files to evaluate application load and response times. Supports GUI mode for test monitoring and analysis.

Instructions

Execute a JMeter test.

Args: test_file: Path to the JMeter test file (.jmx) gui_mode: Whether to run in GUI mode (default: False)

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
test_fileYes
gui_modeNo

Implementation Reference

  • Primary handler for the 'execute_jmeter_test' tool. Registered with @mcp.tool() decorator. Handles input parameters and delegates to the run_jmeter helper function.
    @mcp.tool()
    async def execute_jmeter_test(test_file: str, gui_mode: bool = False) -> str:
        """Execute a JMeter test.
    
        Args:
            test_file: Path to the JMeter test file (.jmx)
            gui_mode: Whether to run in GUI mode (default: False)
        """
        return await run_jmeter(test_file, non_gui=not gui_mode)  # Run in non-GUI mode by default
  • Core helper function that performs file validation, constructs the JMeter subprocess command, executes it, and handles output/errors for both GUI and non-GUI modes.
    async def run_jmeter(test_file: str, non_gui: bool = True) -> str:
        """Run a JMeter test.
    
        Args:
            test_file: Path to the JMeter test file (.jmx)
            non_gui: Run in non-GUI mode (default: True)
    
        Returns:
            str: JMeter execution output
        """
        try:
            # Convert to absolute path
            test_file_path = Path(test_file).resolve()
            
            # Validate file exists and is a .jmx file
            if not test_file_path.exists():
                return f"Error: Test file not found: {test_file}"
            if not test_file_path.suffix == '.jmx':
                return f"Error: Invalid file type. Expected .jmx file: {test_file}"
    
            # Get JMeter binary path from environment
            jmeter_bin = os.getenv('JMETER_BIN', 'jmeter')
            java_opts = os.getenv('JMETER_JAVA_OPTS', '')
    
            # Log the JMeter binary path and Java options
            logger.info(f"JMeter binary path: {jmeter_bin}")
            logger.debug(f"Java options: {java_opts}")
    
            # Build command
            cmd = [str(Path(jmeter_bin).resolve())]
            
            if non_gui:
                cmd.extend(['-n'])
            cmd.extend(['-t', str(test_file_path)])
    
            # Log the full command for debugging
            logger.debug(f"Executing command: {' '.join(cmd)}")
            
            if non_gui:
                # For non-GUI mode, capture output
                result = subprocess.run(cmd, capture_output=True, text=True)
                
                # Log output for debugging
                logger.debug("Command output:")
                logger.debug(f"Return code: {result.returncode}")
                logger.debug(f"Stdout: {result.stdout}")
                logger.debug(f"Stderr: {result.stderr}")
    
                if result.returncode != 0:
                    return f"Error executing JMeter test:\n{result.stderr}"
                
                return result.stdout
            else:
                # For GUI mode, start process without capturing output
                subprocess.Popen(cmd)
                return "JMeter GUI launched successfully"
    
        except Exception as e:
            return f"Unexpected error: {str(e)}"

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Narasimhakatta/MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server