I had quite a pleasant experience with the free and open-source locust.io
load testing framework. It is amazingly easy to set up and control the logic of the load test. It is Python-based.
You can specify and change the number of concurrent users on the fly. And, it can also work in a distributed fashion.