I would like to test an upload service with hundreds, if not thousands, of slow HTTPS connections simultaneously. I would like to have lots of, say, 3G-quality connections, each throttled with low bandwidth and high latency, each sending a few megabytes of data up to the server, resulting in lots of concurrent, long-lived requests being handled by the server.
There are many load generation tools that can generate thousands of simultaneous requests. (I'm currently using Locust, mostly so that I can take advantage of my existing client library written in Python.) Such tools typically run each concurrent request as fast as possible over the shared network link.
There are various ways to adjust the apparent bandwidth and latency of TCP connections, such as Linux's TC and handy wrappers like Comcast.
As far as I can tell, TC and the like control the shared link but they cannot throttle the individual requests. If you want to throttle a single request, TC works well. In theory, with many clients sharing the same throttled network link, each request could be run serially, subject to the constrained bandwidth, rather than having lots of requests executing concurrently, a few packets at a time. The former would result in much fewer active requests executing concurrently on the server.
I suspect that the tool I want has to actively manage each individual client's sending and receiving to throttle them fairly. Is there such a tool?