E2E-Loader is an award-winning tool designed to streamline the generation of performance test workloads, leveraging existing GUI-level End-to-End (E2E) tests.
This README includes:
-
π User Guide. Learn how to install, run, and optionally build E2E-Loader. Includes a minimal working example to get you started quickly.
-
π§βπ»Developer Guide. Explore the internal architecture and discover how to extend or customize E2E Loader. Intended for researchers and practitioners looking to adapt the tool to their needs.
-
πBeginner's Guide. Additional background concepts and setup instructions for Docker and Apache JMeter, which are required to run E2E-Loader, is also available in our dedicated Beginner's Guide.
E2E-Loader is a desktop application implemented using Java, designed to support the automated generation of performance testing workloads for web applications by reusing existing End-to-End (E2E) GUI-level test cases.
- Java: 18.0.2.1 (Oracle)
- Docker: 27.3.1
- OS: Recommended Ubuntu 22.04.5 LTS
- Apache Maven: 3.6.3
π§ͺ Required to execute E2E tests, generate HAR files from scratch, and execute the generated workloads.
- Node.js: 20.9.0 (required for running the E2E test and generating the HAR file from scratch)
- npm: 10.1.0 (required for running the E2E test and generating the HAR file from scratch)
- Apache JMeter: 5.5 (required to inspect execute the workloads generated by E2E-Loader)
- After downloading JMeter, you'll need to install the JMeter Plugins Manager
- After installing the Plugin Manager, you'll need to use it to install the
Custom Thread Groupsplugin.
Getting started with E2E-Loader is simple and fast. Follow these steps to run or build the application:
The Schema Generator component is used to generate a JSON Schema from structured objects received in responses. This component is implemented with Node.js and exposes a local REST API to which the E2E-Loader desktop app connects.
To build the Docker image, navigate to schema_generator folder inside the E2E-Loader repository:
cd schema_generatorBuild the Docker image:
docker build -t schema-generator-app .π‘ Note that you do not need to start a container with the schema-generator-app. The E2E-Loader desktop app will take care of starting (and stopping) it for you.
The easiest way to get started is to run the provided JAR file:
java -jar src/e2eloader-scp-1.0-SNAPSHOT.jar If you want to build E2E-Loader from scratch, you can do so by running the following Maven command, which will generate a new JAR file in the target directory:
mvn clean packageAdditionally, if you want to generate Javadoc documentation from scratch, you can run the following command:
mvn javadoc:javadoc
This command will generate Javadoc documentation in the target/reports/apidocs directory.
To quickly explore E2E Loader's features, we provide a ready-to-use test and its corresponding HAR file in the /example folder. No need to generate HAR files from scratch!
- Test :
\example\gui tests\create_and_delete_room.cy - HAR file:
\example\gui tests\hars\create_and_delete_room.har
This test refers to the open-source system restful-booker-platform, a Bed and Breakfast booking platform. The test automates creating a room and then deleting it.
Once E2E-Loader is launched, the following interface will appear:
- Select input paths: Click on the folder icon to open the file chooser and select the directory that contains your E2E test cases
(e.g.,<your-path>/example/gui tests/).
The selected directory must contain a subfolder named hars/, which stores the HAR files corresponding to each E2E test.
The tool automatically searches for HAR files inside this folder, so no manual path input is required.
Example directory structure:
example/
βββ gui tests/
βββ hars/
β βββ test1.har
β βββ test2.har
β βββ ...
βββ test1.js
βββ test2.js
βββ ...
-
Inspect available GUI tests: After selecting the E2E tests folder, a list of automatically detected GUI tests will appear. Each represents a possible user-behavior to add to your workload. For example, select the test
create_and_delete_roomas shown in the following screen capture.
-
Load configurations: A new window opens showing any saved configurations for the selected user-behavior. If none exist, create a new one by clicking the + button in the top-left corner.

-
Inspect user-behavior details: The new page allows you to: (a) Explore information about the user-behavior; (b) Inspect dependencies between requests; (c) Add new dependencies if needed.

-
Review requests: By clicking the (i) button in the top-left, you can see the list of requests composing the user-behavior. In this example, there will be 10 requests, to 7 distinct endpoints.

-
Navigate dependencies: Use the arrows to navigate through requests and view identified dependencies. For instance:
-
Example dependency resolution: Another case shows a query parameter dependency (
roomid=2) identified with two possible requests (request 5 and request 6). The tester must decide which dependency to keep.
-
Save configuration: Once you are satisfied with the dependencies:
-
Generate workload script: Return to the previous page, where the saved configuration now appears in the Correlation Files table.
- Select the newly created configuration (e.g.,
create-and-delete-room-scp-example.json). - Click Create Script (top-left).
- A pop-up will appear indicating that script generation may take some time.
- Once completed, the generated JMeter script will appear in the lower table listing all available scripts.
- Select the generated file (e.g.,
create-and-delete-room-scp-example.jmx) and click Add to Workload to include this user behavior in the desired workload.

- Build workload: Back at the main screen of the tool, you can:
- Export final workload: Once satisfied, enter a name and click Save.
This generates the final JMeter script, which is ready to use and can be opened also within JMeter, as shown in the following screen capture.

For a more complex demonstration (e.g.: generating your own HAR files, executing the workload generated by E2E-Loader), you can build locally the same web application we mentioned before: restful-booker-platform. All the instructions to set it up can be found in the linked repository.
In addition, we provide a full set of End-to-End GUI-level tests for the restful-booker-platform in booker-platform-e2e-tests. These tests are written in Cypress. Inside the cypress/e2e directory of that repository, you will find 22 different GUI tests, and a subfolder named hars containing the corresponding HAR files generated during execution.
If you want to write your own test and generate the HAR files, you can use the cypress-har-generator plugin to automatically generate HAR files upon execution of a test. The code snippet that you may add to the test to achieve this would look like this:
before(() => {
// start recording
cy.recordHar({
includeHosts: ['.*localhost:8080'],
excludePaths: [
'socket$', '.woff$', '.woff2$', '.bmp$', '.css$', '.js$', '.gif$',
'.ico$', '.pe?g$', '.png$', '.swf$', '.html$', '.svg$'
]
});
});
after(() => {
cy.saveHar({ fileName: 'create_and_delete_room.har', outDir: 'cypress/e2e/hars' });
});This produces, every time the test is executed, a HAR file create_and_delete_room.har stored in cypress/e2e/hars/. So, to generate a HAR file from scratch, it suffices to re-execute the test.
A screencast demonstrating the usage of E2E-Loader is available on YouTube at the following link https://www.youtube.com/watch?v=pDWN1l1kAhU.
In this section, we provide a brief overview of the E2E-Loader architecture, and then describe two meaningful ways to extend and customize E2E-Loader, providing specific pointers to interested researchers and practitioners.
The E2E-Loader desktop app is implemented in Java, uses Maven as a build tool, and follows a three-layer architecture:
- Entity Layer: Defines core data structures such as requests, dependencies, and workload elements.
- View Layer: Implements the desktop GUI, handling user interactions for test selection, dependency inspection, and workload generation.
- Service Layer: Provides the business logic, including HAR parsing, dependency detection, configuration management, and script generation.
Additionally, the desktop app depends on the external Schema Generator component. This component (available in the /schema_generator directory of the E2E-Loader package) is implemented, using Node.js, as a REST API, to which the desktop app connects.
The schema generator component is responsible for generating JSON Schema definitions from structured responses. The JSON Schema is used to refine the dependency matching process.
If you want to change how dependencies between requests are matched, focus on the class:
AtomicDependenciesValidator (located in Services/Dependencies)
Within this class, you can refine or extend dependency evaluation logic. For example:
evaluate_header_atomic_depβ header-based dependenciesevaluate_cookie_atomic_depβ cookie-based dependencies
Adding new strategies may involve introducing new methods here or adapting existing ones.
By default, E2E-Loader exports workload scripts in Apache JMeter format.
The class responsible for export is:
JMeterAdaption (in Services/ScriptGeneration)
This class converts HAR files and workload configurations into JMeter test plans.
The main call happens in:
CorrelationFrameService.java (line ~182) β runJMeterAdaption
To add another export format (e.g., Gatling, Locust, or k6):
- Create a new class (e.g.,
GatlingAdaption) insideServices/ScriptGeneration. - Implement the conversion logic according to the target tool's format.
- Replace or extend the call in
CorrelationFrameService.javaso that your new method is invoked alongside or instead ofrunJMeterAdaption.
The core classes and methods in E2E-Loader are annotated with Javadoc-style comments. Documentation generated with Javadoc is available in the /docs directory and deployed using GitHub Pages here: https://squidslab.github.io/E2E-Loader.
To generate Javadoc documentation from scratch, interested users can run the following Maven command in the root directory of E2E-Loader:
mvn javadoc:javadoc
By default, the documentation will be generated in the target\reports\apidocs directory.
-
Di Meglio, Sergio, Starace, Luigi Libero Lucio, and Di Martino, Sergio. "E2E-Loader: A Tool to Generate Performance Tests from End-to-End GUI-Level Tests". 2025 IEEE Conference on Software Testing, Verification and Validation (ICST). IEEE, 2025. https://doi.org/10.1109/ICST62969.2025.10989035
-
Battista, Ermanno, Di Martino, Sergio, Di Meglio, Sergio, Scippacercola, Fabio, & Starace, Luigi Libero Lucio (2023, April). E2E-Loader: A framework to support performance testing of web applications. In 2023 IEEE Conference on Software Testing, Verification and Validation (ICST) (pp. 351-361). IEEE. https://doi.org/10.1109/ICST57152.2023.00040






