A web-based application for uploading, executing, and managing JMeter performance tests.
- JMeter Setup Management - Upload and configure JMeter distributions directly through the web interface (no manual installation required)
- Upload JMeter JMX test files through a web interface
- Execute tests on the server with queue management
- View generated HTML reports in the browser
- Download complete test reports as ZIP archives
- Manage uploaded test files
- Support for concurrent test executions with configurable limits
The application includes a web-based setup page that allows you to upload and configure JMeter without manual installation or PATH configuration.
Required Software:
-
Java 17 or higher
-
Maven (for building from source)
- Download from https://maven.apache.org/download.cgi
- Verify installation:
mvn -version
JMeter Setup:
- Download JMeter ZIP from https://jmeter.apache.org/download_jmeter.cgi
- Use the Setup page in the application to upload and configure it (see Setup Page section below)
The application can be configured through src/main/resources/application.properties:
# Server port (default: 8080)
server.port=8080# Enable multipart file uploads
spring.servlet.multipart.enabled=true
# Maximum file size for JMeter setup uploads (default: 200MB)
spring.servlet.multipart.max-file-size=200MB
# Maximum request size (default: 200MB)
spring.servlet.multipart.max-request-size=200MB# Directory for uploaded JMX files (default: storage/uploads)
app.storage.upload-dir=storage/uploads
# Directory for generated reports (default: storage/reports)
app.storage.report-dir=storage/reports# Maximum number of concurrent test executions (default: 2)
app.jmeter.max-concurrent-executions=2
# JMeter installation path (set automatically via Setup page)
app.jmeter.installation-path=
# JMeter version (detected automatically via Setup page)
app.jmeter.version=# Log level for application (default: INFO)
logging.level.io.github.colinzhu.webrunner=INFO# Clean and build
mvn clean package
# Run tests
mvn test
# Skip tests during build
mvn clean package -DskipTests# Using Maven
mvn spring-boot:run
# Using the JAR file
java -jar target/jmeter-web-runner-1.0.0.jar
# Using the JAR file with a custom port
java -jar target/jmeter-web-runner-1.0.0.jar --server.port=8081Open your browser and navigate to:
http://localhost:8080
The application automatically creates the required storage directories on startup:
storage/uploads/- Stores uploaded JMX filesstorage/reports/- Stores generated test reports
These directories are created relative to the application's working directory. You can customize the paths in application.properties.
# Create storage directories manually if needed
mkdir -p storage/uploads
mkdir -p storage/reportsIf you haven't manually installed JMeter or want to use the web-based setup:
- Navigate to the "Setup" link in the application navigation
- Or visit:
http://localhost:8080/setup.html
- The page displays whether JMeter is currently configured
- If configured, it shows the JMeter version and installation path
- Click "Check Status" to refresh the current state
- Download a JMeter ZIP file from Apache JMeter Downloads
- Click "Choose File" or drag-and-drop the ZIP file onto the upload area
- Click "Upload and Configure" to begin the setup process
- The system will:
- Validate the ZIP file contains a valid JMeter distribution
- Extract JMeter to the application directory
- Detect and configure the JMeter version
- Make JMeter available for test executions
- Upon successful setup, the page displays:
- JMeter version detected
- Installation path
- Confirmation that JMeter is ready for use
- If JMeter is already configured, you can upload a new distribution to replace it
- The system will warn you before replacing the existing installation
- Replacement is blocked if test executions are currently running
- Maximum upload size: 200MB
- Only
.zipfiles are accepted - Both Unix and Windows JMeter distributions are supported
- The configuration persists across application restarts
- Click "Choose File" and select a
.jmxfile - Click "Upload" to upload the file to the server
- The file will appear in the "Uploaded Files" list
- Find your uploaded file in the list
- Click the "Execute" button
- The execution will be queued and processed automatically
- Monitor the execution status in the "Executions" panel
- Once an execution completes successfully, a "View Report" link appears
- Click to view the HTML report in your browser
- Reports include detailed performance metrics and graphs
- Click the "Download" button next to a completed execution
- A ZIP archive containing all report files will be downloaded
- The archive includes HTML files, CSV data, and all assets
- Click "Delete" next to any uploaded file to remove it
- Deleted files cannot be recovered
GET /api/setup/status- Get current JMeter setup statusPOST /api/setup/upload- Upload and configure JMeter distributionDELETE /api/setup/installation- Remove current JMeter installationPOST /api/setup/verify- Verify JMeter installation
POST /api/files- Upload a JMX fileGET /api/files- List all uploaded filesDELETE /api/files/{id}- Delete a file
POST /api/executions- Start a test executionGET /api/executions- List all executionsGET /api/executions/{id}- Get execution status
GET /api/reports/{id}- View report HTMLGET /api/reports/{id}/download- Download report as ZIP
Error: Invalid JMeter distribution
Solution:
- Ensure you downloaded the correct ZIP file from Apache JMeter
- The ZIP must contain a
bindirectory withjmeter(Unix) orjmeter.bat(Windows) - Don't extract the ZIP - upload the original ZIP file
- Verify the ZIP file is not corrupted
Error: File size exceeds maximum limit
Solution:
- The default maximum upload size is 200MB
- If your JMeter distribution is larger, increase the limit in
application.properties:
spring.servlet.multipart.max-file-size=300MB
spring.servlet.multipart.max-request-size=300MBError: Cannot replace JMeter while test executions are active
Solution:
- Wait for all running test executions to complete
- Check the main page for any executions in "RUNNING" or "QUEUED" status
- Once all executions are complete, try the replacement again
Error: Failed to detect JMeter version
Solution:
- Verify the uploaded ZIP contains a valid JMeter distribution
- Check that the JMeter binary has executable permissions (Unix/Linux)
- Try re-uploading the JMeter distribution
- Check application logs for detailed error information
Error: JMeter not found in system PATH
Solution:
- Use the Setup page to upload JMeter (recommended), OR
- Verify JMeter is installed manually:
jmeter -v - Ensure JMeter's
bindirectory is in your PATH - Restart your terminal/command prompt after updating PATH
- Restart the application
Error: File size exceeds maximum limit
Solution:
- The maximum file size for test files is 200MB (same as JMeter setup uploads)
- If you need to upload larger test files, increase the limit in
application.properties:
spring.servlet.multipart.max-file-size=300MB
spring.servlet.multipart.max-request-size=300MBError: JMeter execution failed with exit code: 1
Possible Causes:
- Invalid JMX file format
- Missing test dependencies
- JMeter configuration issues
Solution:
- Verify the JMX file works in JMeter GUI
- Check execution error messages in the UI
- Review application logs for detailed error information
Error: Port 8080 is already in use
Solution:
- Change the port in
application.properties:
server.port=8081Error: Failed to store file
Solution:
- Ensure the application has write permissions to the storage directories
- Check directory ownership and permissions
- On Linux/Mac:
chmod 755 storage/
# Run all tests
mvn test
# Run specific test class
mvn test -Dtest=FileControllerPropertyTest
# Run with verbose output
mvn test -Xsrc/
├── main/
│ ├── java/io/github/colinzhu/jmeter/webrunner/
│ │ ├── config/ # Configuration classes
│ │ ├── controller/ # REST API controllers
│ │ ├── exception/ # Exception handling
│ │ ├── model/ # Data models
│ │ ├── repository/ # Data repositories
│ │ └── service/ # Business logic services
│ └── resources/
│ ├── application.properties
│ └── static/ # Web frontend files
└── test/
└── java/io/github/colinzhu/jmeter/webrunner/
├── controller/ # Controller tests
└── service/ # Service tests
- Backend: Spring Boot 3.2.0, Java 17
- Testing: JUnit 5, jqwik (property-based testing)
- Build: Maven
- Frontend: HTML, CSS, JavaScript (vanilla)