nGrinder is a application for running test scripts written in jython(python running on JVM) across a number of machines. It's based on Grinder technology internally. nGrinder wraps Grinder's console and agent with controller and agent respectively and extends several features to enable the multiple concurrent tests.
nGrinder consists of two major components.
- Provide the web interface for performance testing.
- Coordinate the test processes.
- Collate and display statistics of tests.
- Let user create and modify script .
- Run processes and threads which put the loads on target machines when running in agent mode.
- Monitor the target system performance (ex:CPU/memory) when running in monitor mode
When agents are started, they attempt to connect to a controller. Then they are attached in AgentControllerServer component. AgentControllerServer(it's like a agent pool) manages the current agent pool. Whenever a user start a performance test, a new console which coordinates agents is created and required number of agents are handed over from AgentControllerServer. The console (named SingleConsole to differentiate from Console in Grinder) sends the test script and test resources to multiple assigned agents and start to control the test flow until the test is over. After the test is finished, the used agents are getting back to AgentControllerServer to be used in the other tests later. Also SingleConsole is getting back to ConsoleManager as well.
The big differences from Grinder is that nGrinder keeps multiple console instances and agents in the controller. Each console is independent from each others and can run concurrently. Many agents can be attached in the advance and they can be assigned whenever they are request. Unlike grinder, nGrinder is developed to maximize utilization for agents machines.
Famous load test tools like "Performance Center" has the test reservation feature to guarantee the agent availability when a user starts a test. However the reservation approach causes the agents utilization problem. We observed people mostly reserve the agents just for safety even while they are actually not testing. In our experience, the average agent CPU utilization is less than 10% due to this.
Therefore, instead of the reservation, nGrinder chooses to enables multiple test and dynamic agent allocation so that agents are dynamically assigned to tests only when the real test is performed. This makes nGrinder the unique solution among all competitors. With the relatively small amount of agents, multiple users can run multiple tests concurrently. The number of possible concurrent tests depends on the number of free agents.