In the past, load testing was the responsibility of a dedicated team within the organisation (or a team of expensive external consultants) that had access to extravagant licenses for a suite of complex load-testing tools. With the adoption of open-source testing tools, combined with the explosion in cloud computing, this is no longer the case in modern software development.
Perhaps the most fundamental criteria for success in load testing is crafting accurate user journey scenarios through the system. This is critical to understand before deciding on any other load-testing efforts.
You must gather all available data from every available resource in the business to determine, as accurately as possible, how users interact with the system. Only then can you define a realistic test scenario.
Questions to ask might include:
- Where does our traffic originate from geographically?
- How many users are there concurrently at different times of the day?
- Which functionality or feature of the system is the most popular (or most critical)?
- What is an acceptable amount of time that users will be prepared to wait for a response from the system?
- With which type of model do users arrive into the system: open or closed?
The last point, on understanding which type of model that traffic flows through the system, is crucial in producing an accurate load test scenario. Using an incorrect model is akin to comparing apples with oranges and will render most load testing results useless.
Let’s consider the differences between an open vs closed model:
- Open model
All users will indiscriminately access the system. Users arrive in a continuous manner and the system has no control over this. The majority of systems and websites follow this model.
- Closed model
The system is designed to control and limit the number of users that can access it. Typically, the user will have to virtually “queue” to enter the system at busy periods. Examples of this are some gaming or ticketing websites.
A common mistake in load testing is using an incorrect model, or incorrectly predicting the rate at which users will arrive at the system and the actions that they will perform once they do. Look to address these issues by identifying as much data from multiple resources as you can from across the business, so that your scenario data is as accurate as possible.
Gathering this data, and converting it into non-functional requirements, will enable you to construct a realistic load test for your system.
To execute this load test, three different types of tooling are required:
- Provisioning tools
These tools allow you to construct and deploy your application predictably and repeatedly. As one bottleneck is identified and fixed in the system from your load-testing efforts, another will typically occur at a later point further down the line. It is therefore critical to be able to keep building, deploying and running tests against the system quickly and effectively. Tools such as Docker and Kubernetes have greatly simplified this process.
- Monitoring tools
In order to measure system performance and identify bottlenecks that need to be fixed, monitoring tools are required. Open-source options such as Prometheus are readily available, as well as a host of commercial enterprise solutions.
- Load-injection tools
These are the tools used to artificially generate web traffic that will be sent to the system under test. As with monitoring, a host of open-source and commercial tools exist in the market.
Acquiring and utilising tools from all three of the above types will form the basis for your load-testing efforts. In addition to the tools, you will also need to engage will engineers that are trained and skilled in their use. You may find engineers that are specialised in a particular type of tool from the above categories, but it is also possible to find specialist performance engineers that are skilled across the whole range.
The number and skill level of the engineers you assemble for your load testing efforts will naturally depend on the nature, criticality and resources of your project. If you are developing a mission-critical application, or one that is expected to handle huge numbers of highly valuable transactions, you should invest in your performance testing team and tooling appropriately.
Learn more about Gatling, the best developer tool to load test your applications, at gatling.io
The Gatling team