{"id":26336119,"url":"https://github.com/dbeaudoinfortin/httploadtester","last_synced_at":"2026-02-26T18:09:13.145Z","repository":{"id":3993373,"uuid":"51625405","full_name":"dbeaudoinfortin/HTTPLoadTester","owner":"dbeaudoinfortin","description":"A Java load testing tool for web applications, over HTTP/HTTPS. ","archived":false,"fork":false,"pushed_at":"2025-02-27T23:05:33.000Z","size":208,"stargazers_count":3,"open_issues_count":6,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-02-28T08:01:00.626Z","etag":null,"topics":["http","load-testing","rest","undertow"],"latest_commit_sha":null,"homepage":"","language":"Java","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/dbeaudoinfortin.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,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-02-13T00:34:20.000Z","updated_at":"2025-02-27T23:05:36.000Z","dependencies_parsed_at":"2024-12-10T02:19:37.100Z","dependency_job_id":"2084e43d-5742-4bb9-9ba4-e18b6ea3e821","html_url":"https://github.com/dbeaudoinfortin/HTTPLoadTester","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dbeaudoinfortin%2FHTTPLoadTester","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dbeaudoinfortin%2FHTTPLoadTester/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dbeaudoinfortin%2FHTTPLoadTester/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dbeaudoinfortin%2FHTTPLoadTester/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dbeaudoinfortin","download_url":"https://codeload.github.com/dbeaudoinfortin/HTTPLoadTester/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243809874,"owners_count":20351407,"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":["http","load-testing","rest","undertow"],"created_at":"2025-03-16T01:16:45.102Z","updated_at":"2026-02-26T18:09:13.074Z","avatar_url":"https://github.com/dbeaudoinfortin.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# HTTPLoadTester \u003cimg src=\"https://github.com/user-attachments/assets/644c49a8-3ab7-4e67-ad70-4e66aa805235\" height=\"35\"/\u003e\n\nI didn't like any of the load testers out there, so I built my own on my free time.\n\nContains two main app:\n1) A Recorder for creating test plans,\n2) A Player for generating load.\n\nThe recorder can be used as either an HTTP Proxy (built on Undertow) or a Servlet Filter. It supports both HTTP and HTTPS.\n\nBoth the player and the recorder can be managed via 1) the command line, 2) JMX or 3) REST API.\n\nRequires Java 8 or higher.\n\n## Recorder Proxy\n\nThe Recorder Proxy is used to 'record' HTTP calls to create a test plans out of them. It sits between the client and the server. It intercepts HTTP requests, records them to a test plan file and then forwards them to the server. \n\nDespite using the term 'proxy' this is not a true proxy. It is more similar to a man-in-the-middle attack. It can actually modify the content of the requests on the fly. The client points directly to the recorder and thinks it is talking to the server. The advantage of this approach is that the client doesn't need to be configured to use a proxy and doesn't even need to be proxy-aware. This means anything that makes HTTP calls can be recorded. It also means that only calls to a specific domain will be recorded. Of course, the downside is that it only supports HTTPS, so you have to manually accept the recorder's self-signed cert.\n\nYou can launch it by invoking the Main method of the com.dbf.loadtester.recorder.proxy.RecorderProxy class. It takes the following command line options:\n\n```\n -dir \u003carg\u003e            The test plan directory. Recorded test plans will be saved in this directory.\n -disableJMX           Disable the JMX management interface.\n -disableREST          Disable the REST API management interface.\n -fHost \u003carg\u003e          Proxy forwarding host.\n -fHttpPort \u003carg\u003e      Proxy forwarding HTTP port.\n -fHttpsPort \u003carg\u003e     Proxy forwarding HTTPS port.\n -fixedSubs \u003carg\u003e      Fixed substitutions in Base64 encoded Json format.\n -httpPort \u003carg\u003e       Listener HTTP port.\n -httpsPort \u003carg\u003e      Listener HTTPS port.\n -overrideHostHeader   Overrides the 'Host' header on every request to match the forwarding host.\n -restPort \u003carg\u003e       Port to use for REST API management interface.\n -rewriteUrls          Inspects the response of every HTTP request and attempts to rewrite URLs to point back to the proxy.\n -start                Start recording immediately.\n ```\n\nIf you don't want to run the recorder in stand-alone man-in-the-middle mode, there is a servlet filter that you can plug into pretty much any Java web app. com.dbf.loadtester.recorder.filter.RecorderServletFilter can be inserted into any modern Web Server that supports Servlet Spec 3.1. \n\nJust like the stand-alone proxy, the filter supports management via both JMX and REST. But, if both of those options are unavailable to you, you can still start and stop the recorder by sending it a 'Magic Start/Stop Parameter' which is literally 'MAGIC_START_PARAM' or 'MAGIC_STOP_PARAM' added as an HTTP parameter to the URL of any request. This is really a 'last resort' option. \n\n## Load Test Player\n\nThe Load Test Player is used to play back previously recorder load test plans. It has been designed with a primary goal to minimize overhead in order to achieve high levels of concurrency. Under the hood, it uses version 4.5.x of Apache HTTP Client. It has SSL support and cookie support for stateful load test plans.   \n\nYou can launch it by invoking the Main method of the com.dbf.loadtester.player.LoadTestPlayer class. It takes the following command line options:\n\n```\n-actionDelay \u003carg\u003e        Time between each action. Set to zero for no delay, set to -1 to use the test plan timings. Value in milliseconds.\n -applyFixedSubs          Apply fixed substitutions, such as \u003cTHREAD_ID\u003e, in the test plan.\n -concurrentActions       Run the test plan actions concurrently. Used for stateless test plans.\n -cookieWhiteList \u003carg\u003e   List of comma-separated Cookie names that will used from the test plan. All other cookies will be discarded.\n -disableJMX              Disable the JMX management interface.\n -disableREST             Disable the REST API management interface.\n -host \u003carg\u003e              The target host.\n -httpPort \u003carg\u003e          Port to use for HTTP requests.\n -httpsPort \u003carg\u003e         Port to use for HTTPs requests.\n -keepAlive               Keep Load Test Player alive after all threads have halted.\n -minRunTime \u003carg\u003e        Minimum runtime ensures that no thread will terminate before the last thread finished at least 1 run. Value in seconds.\n -overrideHttps           Override all HTTPs actions with HTTP\n -pause                   Pause and wait for JMX/REST invocation to start.\n -restPort \u003carg\u003e          Port to use for REST API management interface.\n -shareConnections        Share connections (sockets) across threads for improved efficiency.\n -staggerTime \u003carg\u003e       The average time offset between the start of each subsequent thread (staggered start). Value in milliseconds.\n -testPlanFile \u003carg\u003e      The absolute path to the Json test plan file.\n -threadCount \u003carg\u003e       The total number of threads to run. Each thread will repeat the test plan at least once and until MinRunTime is reached.\n -variableSubs \u003carg\u003e      Variable substitutions in Base64 encoded Json format.\n ```\n \nLike everything else, it supports management via both JMX and REST. Using either interface, you can get statistics on the execution time of individual actions and overall test plans. These statistics are more detailed than what is printed to the command line and are used by the HTTPLoadTesterGUI for its graphs.\n\n## GUI\n\nSome of the command line arguments can get complicated, so I built GUI in Visual Studio. Check it out: https://github.com/dbeaudoinfortin/HTTPLoadTesterGUI It contains a test plan recorder, test plan editor, a test plan player and a basic stats screent o keep on eye on things while your test plan is executing.\n\n## Legal Stuff\n\nCopyright (c) 2016 David Fortin\n\nThis software is provided by David Fortin under the MIT License, meaning you are free to use it however you want, as long as you include the original copyright notice (above) and license notice in any copy you make. You just can't hold me liable in case something goes wrong. License details can be read [here](https://github.com/dbeaudoinfortin/HTTPLoadTester?tab=MIT-1-ov-file)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdbeaudoinfortin%2Fhttploadtester","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdbeaudoinfortin%2Fhttploadtester","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdbeaudoinfortin%2Fhttploadtester/lists"}