{"id":38171218,"url":"https://github.com/sarkarshuvojit/webhook-load-tester","last_synced_at":"2026-01-16T23:26:52.218Z","repository":{"id":256236913,"uuid":"849447557","full_name":"sarkarshuvojit/webhook-load-tester","owner":"sarkarshuvojit","description":"Declarative load testing for your asynchronous webhook based APIs","archived":false,"fork":false,"pushed_at":"2026-01-15T16:04:54.000Z","size":2725,"stargazers_count":9,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-15T19:32:29.523Z","etag":null,"topics":["async","golang","webhook","webhook-api"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sarkarshuvojit.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-08-29T15:59:11.000Z","updated_at":"2026-01-15T16:03:41.000Z","dependencies_parsed_at":"2024-10-25T06:41:26.109Z","dependency_job_id":"71a956da-210b-46df-9119-869809e24224","html_url":"https://github.com/sarkarshuvojit/webhook-load-tester","commit_stats":null,"previous_names":["sarkarshuvojit/webhook-load-tester"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/sarkarshuvojit/webhook-load-tester","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sarkarshuvojit%2Fwebhook-load-tester","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sarkarshuvojit%2Fwebhook-load-tester/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sarkarshuvojit%2Fwebhook-load-tester/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sarkarshuvojit%2Fwebhook-load-tester/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sarkarshuvojit","download_url":"https://codeload.github.com/sarkarshuvojit/webhook-load-tester/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sarkarshuvojit%2Fwebhook-load-tester/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28487586,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T22:54:02.790Z","status":"ssl_error","status_checked_at":"2026-01-16T22:50:10.344Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["async","golang","webhook","webhook-api"],"created_at":"2026-01-16T23:26:52.102Z","updated_at":"2026-01-16T23:26:52.196Z","avatar_url":"https://github.com/sarkarshuvojit.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# webhook-load-tester\n\n📄 **[Read the Whitepaper](docs/whitepaper.md)** - Deep dive into the technical details and architecture\n\n## What is this?\n\nThis tool helps developers test and load test asynchronous APIs that use webhooks. It's especially useful when you're working with APIs where the response comes later through a webhook, rather than immediately.\n\n## Installation \n\n### CLI Tool\n\nInstall the command-line interface tool:\n\n```bash\ngo install github.com/sarkarshuvojit/webhook-load-tester@latest\n```\n\n## Usage \n\n### Create config\n\nCreate a empty config file as starting point\n\n```bash\n$ webhook-load-tester create -c 001-test.yaml\n\n```\n\n### Run test from config\n\nRun tests for that config file by passing with a `-c` flag\n\n```bash\n$ webhook-load-tester test -c 001-test.yaml\n```\n\n## Demos\n\n#### Capturing Webhook Responses from a Local Service\n\n[![asciicast](https://asciinema.org/a/677409.svg)](https://asciinema.org/a/677409)\n\n#### Capture Webhook Responses Locally from External Services via Ngrok\n\n[![asciicast](https://asciinema.org/a/677410.svg)](https://asciinema.org/a/677410)\n\n## Why use it?\n\nTesting webhook-based APIs can be tricky because:\n1. The API call and the webhook response happen at different times.\n2. It's hard to measure the total time from the initial call to the webhook response.\n3. Load testing these APIs is challenging with traditional tools.\n\n## How does it work?\n\n1. **Mock Server**: Acts as a stand-in for your actual server, receiving and displaying incoming webhook requests.\n\n2. **Configuration-based Testing**: Uses YAML files to define tests and load scenarios, making it easy to set up and modify test cases.\n\n3. **End-to-End Timing**: Measures the complete flow from the initial API call to the webhook response, giving you a clear picture of your API's performance.\n\n4. **Load Testing**: Allows you to simulate multiple users or high traffic scenarios to see how your API performs under stress.\n\n## Key Features\n\n- Easy-to-use YAML configuration for test scenarios\n- Use Ngrok to load test webhooks from your local machine\n- Built-in mock server to capture webhook responses\n- Comprehensive timing measurements for the entire API flow\n- Support for load testing asynchronous APIs\n- Clear, visual representation of test results\n\n## Who is it for?\n\n- Developers working with webhook-based APIs\n- QA engineers testing asynchronous systems\n- DevOps professionals managing API performance\n\n## Design\n\n![Overview](docs/overview.png \"Overview of design\")\n\n## Configuration \n\nIt uses configuration files to run tests, where tests \u0026 load can be defined using a declarative yaml format.\n\nFollowing is an example test config which can be used against the dummy webhook api.\n\n```yaml\nversion: v1\n\nserver: ngrok # optional param\n\ntest:\n  name: test-api-1\n  \n  # details about api which needs to be tested\n  url: http://localhost:8080/\n  body: \"{\\\"message\\\": \\\"ok\\\"}\"\n  headers:\n    client-id: gg\n    client-secret: wp\n  \n  # injectors are used to update user defined requests with test-related variables\n  injectors:\n\n    # injects the reply-path to a specific path in the requests\n    # when running locally it will use Ngrok url\n    # when running on a public server it will use localhost or userDefinedHost\n    replyPathInjector:\n      path: \"headers.webhook-reply-to\"\n    \n    # injects the correlationId/traceId to the request\n    correlationIdInjector:\n      path: \"body.uniqueId\"\n\n  # pickers are used to figure out where to pick specific info from the response\n  pickers:\n    # defines where to expect the correlationId/traceId when the downstream gives a callback\n    correlationPicker:\n      path: \"body.uniqueId\"\n\n# actual run configuration \n# defines how many requests need to be fired over the span of how many seconds\n# in the following example we can expect a request to be fired every 200ms (10s/50r)\nrun:\n  iterations: 50\n  durationSeconds: 10\n\n# defines where and in which format the analysis output should go to\n# analysis comprises of max, min, avg, etc\noutputs:\n  - type: text\n    path: out.txt\n\n# Uncomment the following line to use ngrok for exposing local server\n# NGROK_AUTHTOKEN is required in the environment variables when using this mode\n# server: ngrok\n```\n\n## Setting up locally\n\n### Start Dummy Webhook API \n\nStart a simple webhook api\n\n```bash\n$ cd examples/dummy\n$ go run main.go\n```\n\n### Start tests  \n\nStart the actual tester\n\n#### Using Go\n\n```bash\n$ go run cmd/runtest/main.go -f examples/dummy/input-example.yml \n$ go run cmd/runtest/main.go -v -f examples/dummy/input-example.yml # for verbose output\n```\n\n## TODO\n\n- Safe shutdown\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsarkarshuvojit%2Fwebhook-load-tester","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsarkarshuvojit%2Fwebhook-load-tester","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsarkarshuvojit%2Fwebhook-load-tester/lists"}