惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

罗磊的独立博客
Google DeepMind News
Google DeepMind News
MyScale Blog
MyScale Blog
A
About on SuperTechFans
Martin Fowler
Martin Fowler
M
MIT News - Artificial intelligence
Recent Announcements
Recent Announcements
D
DataBreaches.Net
B
Blog
博客园 - 【当耐特】
爱范儿
爱范儿
有赞技术团队
有赞技术团队
P
Proofpoint News Feed
WordPress大学
WordPress大学
小众软件
小众软件
Apple Machine Learning Research
Apple Machine Learning Research
I
InfoQ
Engineering at Meta
Engineering at Meta
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Last Week in AI
Last Week in AI
Microsoft Azure Blog
Microsoft Azure Blog
雷峰网
雷峰网
量子位
G
Google Developers Blog

Hacker News: Show HN

PurrrrrFocus: Pomodoro Timer App - App Store Workflow Engine — Multi-Step Orchestration for Bun RapidPhoto: Pro Photo Editor App - App Store GitHub - DheerG/swarms: Achieve extraordinary results with claude code across a variety of tasks SPICE simulation → oscilloscope → verification with Claude Code — Lucas Gerads Show HN: VCoding – A 5 MB native Windows IDE with no dynamic dependencies Show HN: LLMs don't hallucinate because they're bad at math, it's the format GitHub - Agent-FM/agentfm-core: AgentFM is a peer-to-peer network that turns everyday computers into a decentralized AI supercomputer. AgentFM lets you run massive AI workloads directly across a global mesh of idle CPUs and GPUs. Show HN: Tracking Top US Science Olympiad Alumni over Last 25 Years GitHub - Potarix/agent-hub: One place to talk to all your agents Show HN: Runtime security for AI agents(injection,tool abuse, data exfiltration) GitHub - dubeyKartikay/lazyspotify: Terminal Spotify client for macOS and Linux GitHub - the-banana-tool/king-louie: Easy to use GUI Personal AI Assistant. Win/Linux/Mac. Show HN I made my vacation rental bookable by AI agents–no Airbnb, 0% commission GitHub - basteez/jsf-autoreload: maven plugin to enable hot reload on jsf projects uvm32/hosts/host-gdbstub at main · ringtailsoftware/uvm32 GitHub - labsai/EDDI: Config-driven engine that turns JSON into production-grade AI agents. Multi-agent orchestration, 12+ LLM providers, MCP/A2A protocols, RAG, persistent memory, and enterprise compliance (EU AI Act, GDPR, HIPAA). Built on Quarkus. GitHub - glitchnsec/fortyone-oss: AI Executive Assistant Platform Quickstart | Alien GitHub - muxshed/shed: One stream in, or many. Every destination, simultaneously. No cloud middleman, no per-channel fees, no limits. GitHub - ocrbase-hq/ocrbase: 📄 PDF/IMG ->.MD/JSON Document OCR API for PaddleOCR and GLMOCR. Self-hostable. GitHub - impactjo/home-memory: MCP server that lets your AI assistant remember everything about your home. GitHub - Sets88/dbcls: DbCls is a powerful terminal database client that supports various databases GitHub - neptun2000/heor-agent-mcp GitHub - SeanFDZ/macmind: Single-layer transformer in HyperTalk for the classic Macintosh RollQuation: Math Puzzles - Apps on Google Play GitHub - dropbox/witchcraft Show HN: Agent-cache – Multi-tier LLM/tool/session caching for Valkey and Redis GitHub - opentalon/opentalon: OpenTalon is an open-source platform built from the ground up in Go as a robust alternative to OpenClaw LinkedIn™ 职位抓取工具 - Chrome 应用商店
GitHub - Saptarshi2001/AsyncLoad: An asynchronous load te...
Saptarshi_Du · 2026-06-18 · via Hacker News: Show HN

AsyncLoad terminal hero

AsyncLoad is an asynchronous load testing CLI designed to stress test your applications under heavy concurrent load with mongodb storage for session history and a TUI for displaying stats.


Requirements (Without docker)

  • Python
  • Textual
  • Mongodb

Installation

Install from pip

For version releases, use pip:

pip install AsyncLoad
asyncload -setup
  • Set your mongodb env variables inside the global config file thats created. "%LOCALAPPDATA%/AsyncLoad/config.env" for Windows, "~/.config/loadtester/config.env" for linux and Mac. You can setup the number of requests,concurrent requests, as well as the http method either in the config file or simply use the cmd flags to override any of the values. Default values for number of requests,concurrent requests,http method is 100,10,GET.

Head over to your cmd and type:

asyncload https://httpbin.org/ -n 100 -c 10 -GET

Install from GitHub source

For building from source, install directly from the git repository:

git clone https://github.com/Saptarshi2001/AsyncLoad.git
cd Asyncload
pip install .
cp config.env.example config.env # set up your config file 
python -m unittest discover tests/ # Run all tests
asyncload https://httpbin.org/ -n 100 -c 10 -GET

Or Use Docker to build and run the source:

docker compose build
docker compose run --rm asyncload https://httpbin.org/ -n 100 -c 10 -GET
  • If you want to only use the asyncload container without the mongo container,then:
docker compose run --rm --no-deps -e MONGO_URL=mongodb://host.docker.internal:27017 asyncload https://httpbin.org/ -n 100 -c 10 -GET
  • Make sure that the http method in the config file is GET,POST,PUT,PATCH,DELETE

Docker Compose starts a MongoDB service automatically and points AsyncLoad to it with MONGO_URL=mongodb://mongo:27017. For local runs outside Docker, keep MONGO_URL pointed at your local MongoDB instance, such as mongodb://127.0.0.1:27017.

Running the tests

# Run all tests
python -m unittest discover tests/

# Run specific test modules
python -m unittest tests.test_load
python -m unittest tests.test_async
python -m unittest tests.test_db
python -m unittest tests.test_integration

# Run with verbose output
python -m unittest -v tests.test_load

Examples

Basic load test

asyncload https://jsonplaceholder.typicode.com/posts -n 5 -c 2 -GET

AsyncLoad metrics dashboard

Load test using only the config file

asyncload https://jsonplaceholder.typicode.com/posts

AsyncLoad config dashboard

Override using flags

asyncload https://jsonplaceholder.typicode.com/posts -n 10 -GET

AsyncLoad override request count dashboard

asyncload https://jsonplaceholder.typicode.com/posts -GET

AsyncLoad override method dashboard

asyncload https://jsonplaceholder.typicode.com/posts -POST -d '{"title": "foo", "body": "bar", "userId": 1}'

AsyncLoad override POST dashboard

Viewing history

AsyncLoad history dashboard

Viewing weekly history

asyncload -history -weekly

AsyncLoad weekly history dashboard

POST request with payload

In Windows

  • If you are using git bash use
asyncload https://jsonplaceholder.typicode.com/posts -n 5 -c 2 -POST -d '{"title": "foo", "body": "bar", "userId": 1}'
  • If you are using powershell or windows cmd use
asyncload https://jsonplaceholder.typicode.com/posts -n 5 -c 2 -POST -d '{""title"": ""foo"", ""body"": ""bar"", ""userId"": 1}'
  • In linux or mac this works,
asyncload https://jsonplaceholder.typicode.com/posts -n 5 -c 2 -POST -d '{"title": "foo", "body": "bar", "userId": 1}'

AsyncLoad POST metrics dashboard

High concurrency test

asyncload https://jsonplaceholder.typicode.com/posts -n 1000 -c 200 -GET

AsyncLoad high concurrency dashboard


API Reference

GlobalConfig

platform_path()

sets up the global config variable accordingly with the underlying os

  • "%LOCALAPPDATA%/asyncload/config.env" for Windows
  • "~/.config/asyncload/config.env" for Linux/Mac

ensure_global_config()

Creates the global config file in the user's system

LoadRunner

main()

Starts off the cli.


run(url, numreq, conreq, reqtype, headers=None)

The core execution function of AsyncLoad. Sends requests to the specified URL asynchronously and calculates the stats.

Parameters:

Name Type Description
url str The URL to test
numreq int Number of total requests
conreq int Number of concurrent requests
reqtype str HTTP method (GET, POST, PUT, DELETE, etc.)
body str | None request body to be used during POST,PUT,PATCH requests

Record

insertmetrics(reqlist)

Stores the metrics that you get from the load test in a mongodb instance.

Parameters:

Name Type Description
metrics dict load test metrics

getmetrics(timemode=None)

Retrieves the metrics stored as session history from the database.

Parameters:

Name Type Description
timemode str | None specifies the time range of session history that is to be fetched

_time_range(timemode=None):

Calculates the start and end date for fetching session history.If timemode is not given ,it fetches all the records right from the earliest record until the present moment.

Parameters:

Name Type Description
timemode str | None specifies the time range of session history that is to be fetched

ProtocolParser

parse()

Parses the command line arguments and returns the values as a Params object that is used by the loadrunner for executing run() or fetch session history.


add_args()

Adds the common cli flags like url,history,setup,number of requests,concurrent requests,data and history time filters.


add_mutually_excusive_groups()

Adds the mutually exclusive HTTP method flags so that only one method like GET,POST,PUT,DELETE or PATCH can be selected at a time.


Params

Stores the parsed command line values returned from ProtocolParser.parse().

Fields:

Name Type Description
url str The URL to load test
numreq int Number of total requests
conreq int Number of concurrent requests
method str HTTP method to use
timemode str | None history range like weekly,monthly or yearly
body str | None JSON request body parsed from -d or --data

EnvKeys

Stores the environment variable names later used by AsyncLoad.

Fields:

Name Description
MONGO_URL MongoDB connection URL
MONGO_DATABASE MongoDB database name
MONGO_COLLECTION MongoDB collection name
TIMEOUT Request timeout value
TOTAL_REQUESTS total request count
CONCURRENT_REQUESTS concurrent request count
HTTP_METHOD HTTP method

Env

Dataclass used for composing the env values in a single unit.

Fields:

Name Type Description
MONGO_URL str MongoDB connection URL
DATABASE str MongoDB database name
COLLECTION str MongoDB collection name
TIMEOUT int Request timeout value
TOTAL_REQUESTS int total request count
CONCURRENT_REQUESTS int concurrent request count
HTTP_METHOD str HTTP method

getenv()

Reads the environment variables from .env file and returns them inside an Env dataclass.


MetricRow

_format_value(name,value)

Formats metric values before they are displayed in the terminal.

Parameters:

Name Type Description
name str metric name
value str | int | float | name of the metric as well as its value to be displayed

Terminal

compose()

Builds the Textual terminal UI.It displays either the current metrics or the session history records.


_compose_history()

Builds the history view in the terminal.It displays the URL,timestamp and metrics for each stored history record.


_title()

Returns the title shown at the top of the terminal dashboard.


_format_timestamp(timestamp)

Formats timestamps for display in the terminal.

Parameters:

Name Type Description
timestamp datetime | None date and time that is to be formatted before being displayed

displaystats()

Starts the Textual application and shows the metrics dashboard in the terminal.


Options

Flag Description
-n Number of requests
-c Number of concurrent requests
-GET / -POST / -DELETE / -PUT / -HEAD / -PATCH HTTP method
-d JSON data for POST/PUT/PATCH/DELETE
-history View session history
-history -weekly View weekly session history
-history -monthly View monthly session history
-history -yearly View yearly session history

Changelog

[0.1.5] - 2026-06-01

  • Asynchronous load testing CLI with concurrent request support
  • Mongodb Database storage for session history using SQLite
  • Support for multiple HTTP methods (GET, POST, PUT, DELETE, HEAD, PATCH)
  • Configurable concurrency and request count
  • Session history viewing (weekly, monthly, yearly)
  • Load testing stats
  • TUI views