{"id":13651402,"url":"https://github.com/intuit/autometer","last_synced_at":"2025-06-21T23:40:29.457Z","repository":{"id":57187576,"uuid":"116689460","full_name":"intuit/autometer","owner":"intuit","description":"Distributed load testing made simple","archived":false,"fork":false,"pushed_at":"2019-07-08T15:54:47.000Z","size":1660,"stargazers_count":61,"open_issues_count":0,"forks_count":18,"subscribers_count":12,"default_branch":"master","last_synced_at":"2025-05-25T22:16:01.880Z","etag":null,"topics":["distributed-load-testing","docker-jmeter","jmeter","jmx","performance"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/intuit.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}},"created_at":"2018-01-08T14:50:23.000Z","updated_at":"2025-04-27T12:39:18.000Z","dependencies_parsed_at":"2022-08-28T11:11:37.920Z","dependency_job_id":null,"html_url":"https://github.com/intuit/autometer","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/intuit/autometer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/intuit%2Fautometer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/intuit%2Fautometer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/intuit%2Fautometer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/intuit%2Fautometer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/intuit","download_url":"https://codeload.github.com/intuit/autometer/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/intuit%2Fautometer/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261211949,"owners_count":23125546,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["distributed-load-testing","docker-jmeter","jmeter","jmx","performance"],"created_at":"2024-08-02T02:00:49.077Z","updated_at":"2025-06-21T23:40:24.442Z","avatar_url":"https://github.com/intuit.png","language":"Shell","readme":"AutoMeter\n=========\n\n[![Build Status][travis-image]][travis-url]\n[![NPM version][npm-image]][npm-url]\n[![js-standard-style][standard-image]][standard-url]\n\nAn automation tool for scaling load tests using distributed slaves. \nBased on master-slave architecture where master acts as a test coordinator, from where tests\nare triggered and the actual tests are distributed across multiple hosts. \n\nPrerequisites\n-------------\n* One or more linux hosts with [docker (\u003e=1.12.5)](https://docs.docker.com/engine/installation/) installed.\n* In one of the linux host install [nodeJs (\u003e=7)](https://nodejs.org/en/download/) and autometer npm module. \nThis node can be designated as master (from where tests has to be triggered).\n\nInstall\n-------\n    npm install -g autometer \n\nUsage\n-----\n```    \n$ autometer --help\n    \n    Usage: autometer \u003ccommand\u003e\n    \n    Options:\n    --version    Show version number                                     [boolean]\n    --startTest  Start the test\n    --stopTest   Stop the running test\n    --logs       Display the running test logs\n    --clear      Clear the test output files\n    -?, --help   Show help                                               [boolean]\n    \n    Examples:\n    autometer --startTest                   Start the test\n    autometer --stopTest                    Stop the running test\n    autometer --logs                        Tail the running test logs\n    autometer --clear                       Remove the generated reports and logs\n    export DOCKER_PORT=port                 To set docker port, default port 2376\n    DOCKER_PORT=port autometer --startTest  To set docker port and start the test\n```\n\nGetting Started\n--------------\n\u003cimg width=700px src=\"/docs/autometer-diagram.png\"\u003e\n\n\n#### Docker images setup:\n * Make sure you can access [docker hub](https://hub.docker.com). \n Run the below command on all the hosts to pull the image\n \n        docker pull autometer/jmeter-base \n \n#### Autometer setup and configuration: \n\n* Login to the host (designated as master) where node is installed and run the below command\n\n        npm install -g autometer\n\n* Create a folder (say api-test) and following 3 files are needed to run a test\n\n        1. autometer.config.js\n        2. test.jmx\n        3. global.properties\n\n 1. autometer.config.js - File to configure autometer itself, you can define number of load generators.\n Typical config file is as shown below.\n \u003cbr\u003e\u003cbr\u003e **Caution**: If your running multiple tests, make sure you use different ports, \n otherwise it results in port conflicts \n \n         const config = {\n             testName: 'test.jmx',\n             master: {\n                 host: 'hostname',\n                 resultsPort: 2099\n             },\n             slaves: [\n                 {host: 'hostname', port: 1099, resultsPort: 2099},\n                 {host: 'hostname', port: 1199, resultsPort: 2199}\n             ]\n         };\n \n         module.exports = config;\n  \n2. test.jmx - Your jmeter test file, make sure test name matches with autometer config testName variable.\n3. global.properties - externalized test properties\n\n#### Test execution\n* Goto folder having 3 files and run below commands\n    \n        [To start a start]\n         \n        $ autometer --startTest\n        \n        [To tail running test logs]\n        \n        $ autometer --logs\n        \n        [To stop a running test]\n        \n        $ autometer --stopTest\n\n\nFAQs \n=====\n\n**What type of test execution is supported?**\n\u003e Only jmx tests is supported \n\n**How to create custom docker images?**\n\u003e Create a Dockerfile, sample file as mentioned below\n ````\n FROM openjdk:8-jdk-alpine\n ENV JMETER_VERSION 3.1\n ENV JMETER_PLUGINS_VERSION=1.4.0\n ENV JMETER_HOME=/usr/local/apache-jmeter-${JMETER_VERSION}\n ENV PATH=${JMETER_HOME}/bin:${PATH}\n \n RUN wget  http://archive.apache.org/dist/jmeter/binaries/apache-jmeter-${JMETER_VERSION}.tgz \u0026\u0026 \\\n   tar xf apache-jmeter-${JMETER_VERSION}.tgz -C /usr/local\n \n RUN wget http://jmeter-plugins.org/downloads/file/JMeterPlugins-Standard-${JMETER_PLUGINS_VERSION}.zip \u0026\u0026 \\\n   unzip -o JMeterPlugins-Standard-${JMETER_PLUGINS_VERSION}.zip -d ${JMETER_HOME}\n \n EXPOSE 2099-2999\n \n ENTRYPOINT [\"jmeter.sh\"]\n ````\n\u003e Build the docker image using below command\n        \n        docker build -t autometer/jmeter-base .\n \n\u003e **Note:** \n    \u003cbr\u003e1. Expose ports for test communication and report consolidation\n    \u003cbr\u003e2. docker image tag should be autometer/jmeter-base\n\n**How to run multiple tests from master?**\n\u003e You can trigger any number of test runs from master. Create different folders and place the 3 files \n(config js, test file, global properties).Goto any of the test folder and trigger autometer commands. \n\n**How to configure ports?**\n\n\u003e* Only docker exposed ports can used as \"resultsPort\" (2099-2999)\n\u003e* There is no restriction on the slave primary port, you can change it to any free port\n\u003e* By default, stick to 1099 (for the slave primary port) and 2099 for the resultsPort\n\u003e* Here is a sample configuration with 1 master and 5 slaves, all on the same linux host !\n\n        const config = {\n            testName: 'test.jmx',\n            master: {\n                host: 'hostname',\n                resultsPort: 2099\n            },\n            slaves: [\n                {host: 'hostname', port: 1199, resultsPort: 2199},\n                {host: 'hostname', port: 1299, resultsPort: 2299},\n                {host: 'hostname', port: 1399, resultsPort: 2399},\n                {host: 'hostname', port: 1499, resultsPort: 2499},\n                {host: 'hostname', port: 1599, resultsPort: 2599}\n            ]\n        };\n\n        module.exports = config;\n\n**How to clean up docker containers in case of port conflicts?**\n\n\u003e* Try autometer stopTest command\n\u003e* Run the below commands on all the hosts to clean up containers manually\n        \n        docker stop $(docker ps -aq)\n        docker rm $(docker ps -aq)\n\nContribute\n==========\n  See [DEVELOPER.md](./DEVELOPER.md) for the instructions\n    \n\nSupport \n=======\n\n* autometer.npm@gmail.com\n\n[travis-url]: https://travis-ci.org/intuit/autometer\n[travis-image]: https://img.shields.io/travis/intuit/autometer/master.svg\n[npm-url]: https://www.npmjs.com/package/autometer\n[npm-image]: https://img.shields.io/npm/v/autometer.svg\n[standard-image]: https://img.shields.io/badge/code%20style-standard-brightgreen.svg\n[standard-url]: http://standardjs.com/\n","funding_links":[],"categories":["Distributed Testing"],"sub_categories":["Tutorials \u0026 Demo"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fintuit%2Fautometer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fintuit%2Fautometer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fintuit%2Fautometer/lists"}