{"id":51137430,"url":"https://github.com/abstracta/selenium-jmeter-dsl-demo","last_synced_at":"2026-06-25T19:04:45.403Z","repository":{"id":165662336,"uuid":"617068196","full_name":"abstracta/selenium-jmeter-dsl-demo","owner":"abstracta","description":"Demo project that generates JMeter DSL tests from existing Selenium tests.","archived":false,"fork":false,"pushed_at":"2023-11-07T00:02:21.000Z","size":27,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":4,"default_branch":"main","last_synced_at":"2024-04-16T10:38:06.649Z","etag":null,"topics":["automation","jmeter","load-testing","performance-testing","selenium"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/abstracta.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2023-03-21T16:30:04.000Z","updated_at":"2023-09-08T22:32:31.000Z","dependencies_parsed_at":"2023-11-07T04:23:57.258Z","dependency_job_id":"98d049e4-1322-409d-9217-c996fd02ae1f","html_url":"https://github.com/abstracta/selenium-jmeter-dsl-demo","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/abstracta/selenium-jmeter-dsl-demo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abstracta%2Fselenium-jmeter-dsl-demo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abstracta%2Fselenium-jmeter-dsl-demo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abstracta%2Fselenium-jmeter-dsl-demo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abstracta%2Fselenium-jmeter-dsl-demo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/abstracta","download_url":"https://codeload.github.com/abstracta/selenium-jmeter-dsl-demo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abstracta%2Fselenium-jmeter-dsl-demo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34788329,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-25T02:00:05.521Z","response_time":101,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automation","jmeter","load-testing","performance-testing","selenium"],"created_at":"2026-06-25T19:04:44.505Z","updated_at":"2026-06-25T19:04:45.397Z","avatar_url":"https://github.com/abstracta.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Selenium JMeter DSL demo\n\nThis is a demo project that contains a Selenium test for [Retail Store demo app](https://github.com/aws-containers/retail-store-sample-app) and generates and run performance tests using [JMeter DSL](https://abstracta.github.io/jmeter-java-dsl/).\n\n## Requirements\n\n* Docker + Docker compose\n* Maven 3.5+\n* Java 19+\n\n## Project Structure\n\n| Path                                                                                                                            | Description                                                                                                    |\n|---------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|\n| [retailstore-test](./retailstore-test)                                                                                          | Selenium Test project                                                                                          |\n| [retailstore-test/docker-compose.yml](./retailstore-test/docker-compose.yml)                                                    | Provisioning of Retail Store demo app                                                                          |\n| [RetailStoreTest](./retailstore-test/src/test/java/us/abstracta/retailstore/RetailStoreTest.java)                               | Selenium Test for Retail Store app                                                                             |\n| [.env](./retailstore-test/src/test/resources/.env)                                                                              | Configuration file for Selenium Test                                                                           |\n| [selenium-jmeter-dsl](./selenium-jmeter-dsl)                                                                                    | Module contains main logic for recording and executing performance test. Including integration with Jmeter DSL |\n| [JmeterDslSeleniumRecorder](./selenium-jmeter-dsl/src/main/java/us/abstracta/selenium/jmeterdsl/JmeterDslSeleniumRecorder.java) | JUnit extension which generates JMeter DSL test plan from a Selenium Test.                                     |\n| [docker-compose.yml](./docker-compose.yml)                                                                                      | Provisioning for Grafana \u0026 InfluxDB                                                                            |\n\n## Usage\n\n### Selenium test execution\n\nTo start Retail Store demo app, go to [retailstore-test folder](./retailstore-test) and run: \n\n```bash\ndocker-compose up\n```\n\nSet local hosts file so `retailstore.test` points to localhost: \n\n```bash\necho '127.0.0.1 retailstore.test' \u003e\u003e /private/etc/hosts\n```\n\nYou can run [RetailStoreTest](./retailstore-test/src/test/java/us/abstracta/retailstore/RetailStoreTest.java) either using an IDE or using:\n\n```bash\nmvn clean test\n```\n\nTo see the actual flow running you can remove `\"--headless=new\"` chrome option and set `THINK_TIME_MILLIS` to a value like 1000 in [.env file](./retailstore-test/src/test/resources/.env).\n\nRemember resetting `THINK_TIME_MILLIS` to 0, and re-adding `\"--headless=new\"` chrome option before running performance test.\n\n### Performance test recording \u0026 tuning\n\n1. Add `selenium-jmeter-dsl` dependency to [retailstore-test/pom.xml](./retailstore-test/pom.xml):\n\n    ```xml\n    \u003cdependency\u003e\n      \u003cgroupId\u003eus.abstracta\u003c/groupId\u003e\n      \u003cartifactId\u003eselenium-jmeter-dsl\u003c/artifactId\u003e\n      \u003cversion\u003e${project.version}\u003c/version\u003e\n    \u003c/dependency\u003e\n    ```\n   \n2. Register [JmeterDslSeleniumRecorder](./selenium-jmeter-dsl/src/main/java/us/abstracta/selenium/jmeterdsl/JmeterDslSeleniumRecorder.java) JUnit extension in [RetailStoreTest](./retailstore-test/src/test/java/us/abstracta/retailstore/RetailStoreTest.java).\n    \n    ```java\n    @RegisterExtension\n    public final JmeterDslSeleniumRecorder recorder = new JmeterDslSeleniumRecorder()\n        .basePageObject(BasePage.class);\n    ```\n   \n3. Add `JmeterDslSeleniumRecorder` as proxy in WebDriver options.\n\n    ```java\n    options.setProxy(recorder.getProxy());\n    ```\n   \n4. Run `RetailStoreTest` \u0026 review generated `PerformanceTest.java`.\n5. Add InfluxDB listener config to `.env`:\n\n    ```\n    INFLUX_URI=http://localhost:8086\n    INFLUX_ORG=abstracta\n    INFLUX_BUCKET=selenium\n    INFLUX_TOKEN=token\n    ```\n\n6. Add correlation rule to `JmeterDslSeleniumRecorder`. For fixed values in test plan, `productId` for instance, look into `target/recordings` generated XML files for responses containing the ID and define extraction and replacement regexes.\n\n    ```java\n    @RegisterExtension\n    private final JmeterDslSeleniumRecorder recorder = new JmeterDslSeleniumRecorder()\n        .correlationRule(\"productId\",\n            \"name=\\\"productId\\\" value=\\\"([^\\\"]+)\\\"\",\n            \"productId=(.*)\")\n        .basePageObject(BasePage.class);\n    ```\n   \n7. Re-run `RetailStoreTest` and review `PerformanceTest.java`.\n8. Run `PerformanceTest` test method and review calls (replacing just for this run `influxDbListener` with `resultsTreeVisualizer`, and then restoring `influxDbListener`).\n9. Tune thread group configuration in `PerformanceTest.java`\n\n    ```java\n    threadGroup()\n      .rampToAndHold(10, Duration.ZERO, Duration.ofMinutes(1))\n      .rampToAndHold(20, Duration.ZERO, Duration.ofMinutes(1))\n      .rampToAndHold(50, Duration.ZERO, Duration.ofMinutes(3))\n      .children(...)\n    ```\n   \n10. Remove JUnit extension \u0026 proxy from `RetailStoreTest.java`.\n11. Start InfluxDB \u0026 Grafana running at root location of this project:\n    ```bash\n    docker-compose up\n    ``` \n12. Start `PerformanceTest` main method.\n13. Review results in Grafana at `http://localhost:3000` with `admin` \u0026 `1234`.\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabstracta%2Fselenium-jmeter-dsl-demo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fabstracta%2Fselenium-jmeter-dsl-demo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabstracta%2Fselenium-jmeter-dsl-demo/lists"}