Application performance testing has been an important software development and IT function for as long as we’ve had applications. The reason why enterprises and other organizations need it is to manage and mitigate operational, financial, and reputational risks. While these risks always lurk in the background, they can suddenly explode onto center stage when an organization relies on an application to conduct critical aspects of its business, and that app’s performance lags or fails.

To manage those risks effectively, teams need accurate answers to a range of performance-related questions. Will an application work as expected, and how will it perform under different conditions and in varied situations? To get those answers, test teams need to understand their applications’ performance characteristics in terms of their speed, reliability, and scalability.

Avoiding operational problems is a big part of performance testing, but it’s about more than just managing downside risks. Teams also use it to learn about their complex applications and systems. It lets teams see how those applications and systems perform under specific workloads. Knowing when and how an application will break is useful, but so is understanding how it will work best. Performance management testing helps teams to learn about these critical characteristics of their applications. 

But performance testing doesn’t stop there. Like so many other aspects of IT operations, performance testing has evolved to accommodate the many organizations that are undergoing digital transformations and migrating functions to the cloud. Just as moving network and application resources to the cloud has great potential for increasing business agility and lowering operational costs, the same holds true for cloud-based application performance testing – provided it’s done right.

Now more than ever, it’s critical for organizations to create and maintain high-quality user experiences for employees, prospects and customers, partners, and other stakeholders. Having applications that run well and cost-effectively under widely varying conditions is the foundation of those user experiences. Application performance testing essentially tests the strength and quality of key applications that organizations will run their business on. 

What is Application Performance Testing, Exactly?

For any enterprise, non-profit, or government agency that points its users to an application, it’s obviously important that those apps work well. To ensure that application performance meets expectations, organizations need to replicate the conditions and workloads they expect their apps will encounter in production. Then they need to test their performance under those replicated conditions and loads.

Application performance testing is the function that provides quantitative answers to questions like the following. What is the actual capacity, scalability, and stability of an application versus expectations? What about speed and responsiveness? How does the application perform when there are 100 concurrent users? What happens when the concurrent user number increases to 1,000 or 100,000? What about when those concurrent user numbers increase or decrease very rapidly?

Organizations need answers to these questions, and a solid application performance regimen is the only way to get them.

Adjusted Definition for Cloud Application Performance Testing

As organizations pursue digital transformations and migrate their IT resources to the cloud, they need to add elasticity to the roster of traits being assessed in their performance testing programs. A new requirement driven by the realities of cloud-based architectures, elasticity tests reveal an app’s ability to use cloud infrastructure dynamically and efficiently in response to varying load conditions. It gauges how fast and how proportionately an app can scale up to handle high loads, and how rapidly and smoothly it can scale back resource usage when the load decreases.

Application Performance Testing Best Practices – A Solid Guide

Architectures and applications themselves will undoubtedly continue to evolve. That said, there exists today a body of well-recognized performance testing best practices that teams can adopt and use to enhance their testing programs. And since application performance impacts many parts of an organization, the best programs are built around cross-functional teams from both the technical and business sides of an organization. Their main goal is usually the same. It is to ensure that the performance of their applications meet or exceed the requirements of the people using them.

Following are 12 application performance testing best practices. This is not put forward as an exhaustive list. Instead, it’s a good starting point for teams that are revamping their testing programs to support a cloud migration or some other organizational change, or that simply want to revisit their testing operations to ensure they are aligned with their current operational objectives. 

A Dozen Performance Testing Best Practices to Consider

Following are twelve best practices for designing and running a well-functioning application performance testing program. Some of these are older, ‘classic’ concepts, and some are newer, reflecting the fundamental changes that have come to IT environments. Testing teams should think about how to incorporate these objectives in their performance testing programs.

1. Go for pragmatism over perfection

Performance testing isn’t easy, particularly in modern IT environments. It’s hard to get it right and impossible to do it perfectly. As a result, some organizations don’t do any performance testing, and that’s a big mistake. Even if they have limited tools or capabilities, avoiding the challenge isn’t a viable strategy. Organizations should begin performance testing now and do what they can. Whatever testing will be undertaken, it will involve measurement. Since you can’t measure what you can’t observe, teams need visibility. With application monitoring, teams can see how an application is behaving. To change or fix that behavior, they need to understand what’s going on inside an application. But it all starts with monitoring.

2. Gain the advantages of open testing

With open workload systems, if the target application slows down, the testing system will monitor itself in order to ensure that the right amount and the desired types of traffic are consistently sent to the target application. This is an improvement over closed testing systems (See #12) which tend to slow down as the application they are testing slows down, thereby skewing the results.

Little’s law, a formula in queueing theory, explains this effect in any scenario that involves things in line awaiting an action.  A simplified visualization of this law involves a coffee shop and a barista. At this shop, 50 people per hour come in, and the barista services them well. Looking only at in-store activity, the closed test would show that the barista is doing well servicing all the customers who enter.  That’s not the whole picture, however. The closed system’s test does not recognize the 100 customers who are waiting in line outside, or the 200 people who saw the long line and simply left. Open testing would be able to show how the barista does when the number of customers per hour entering the store varies. 

3. Use the full array of available tests

Some IT and DevOps teams tend to equate load testing with performance testing, when in fact the former is just a subset of the latter. It is always better to have more data and intelligence than less, so it’s a good idea for teams to broaden their programs by including more than just load tests. Here is a quick look at some of the more popular and useful test types.

    • Load tests –  These are essentially volume tests. They produce traffic loads that mimic various conditions in production environments. The loads are then directed at the application being tested. Putting that simulated demand on an application (or a website or other software resource), reveals in advance how the application will behave under those various conditions.
    • Soak tests – These tests are designed to replicate heavy traffic loads that also have long durations. They show how apps hold up against persistently high demand – many concurrent users, high transaction rates, etc. These tests are also useful in that they can uncover problems that only arise over long periods of time, such as memory leaks.
    • Spike tests – These let teams preview how their applications will behave when they are experiencing the heaviest demand. Take a very large ticket brokering company as an example. That company would want to know how its ticket sales app will perform a few minutes before and after they open tickets sales for a big concert. Assessing how well their app can handle extremely high numbers of concurrent users and transaction rates is critical to their business.
    • Stress tests – These tests determine how much an application can take, its absolute top-end, before it breaks and fails.  These can also be used to determine  the capacity of a system. You run a stress test with increased load until the quality criterias are violated.
    • Resilience/elasticity tests – These tests determine how well an application can get additional resources allocated to it, and quickly shift from its normal resources to back-up systems in order to maintain its availability and performance due to one or more failure conditions.

4. Define success and test to those metrics

Organizations are unique. Each one has its own business model and processes, and different needs that its applications and IT environments must meet. IT, DevOps, and QA teams should ensure that their application performance testing regimens reflect the actual needs of the business. It follows that success will look different from one organization to the next. Therefore, organizations need to develop their own, specific definition of application performance success, and test to it.  Not too much, not too little, but just right.

5. Design tests that reflect human behaviors

Some teams have the skill sets and budgets needed for writing their own test scripts.  For teams using commercial products, many of those offerings enable users to tailor or customize tests. In any case, teams should do what they can to design their testing packages so that they mimic real-world activity. One such item is humans’ ‘think time’.  When people encounter an application that doesn’t respond instantaneously, they react in various different ways. Some instantly hit the ‘enter’ key again and then do so repeatedly. Others are more patient and pause for some length of time before hitting the ‘Enter’ key again. The same goes for a website that’s slow to load. People exhibit ‘think time’ and those times can vary widely. For this reason, a good testing approach is to an exponential distribution to randomize think time. Real users react differently and performance tests should reflect this reality.

6. Establish a performance culture

Under older styles of application development, testing was slotted in late in the process which made it seem like an afterthought. Under Agile methods, testing needs to be iterative throughout the whole process. Performance testing needs to be an integral part of the product development process overall, including CI/CD processes – equal in importance to all other phases. In fact, performance testing is just a small part of a larger cultural change that is required. It’s not unlike how organizations and staff have embraced security as not just a specific function, but a way to think and operate. Building a performance culture requires change at multiple levels – process, workflow, management visibility, staffing, budget, and more. As with any cultural change, top management and team leaders need to be proactive about building and sustaining their performance culture.

7. Test all resources and layers of the stack

In today’s environments, applications can be dynamically spun up or down on demand – all in the cloud.  Applications themselves have different component elements (CPU, RAM, replicas, etc.) that are handled in the orchestration and management layer.  Beneath that are the runtime and provisioning layers. Since an application relies on all layers of the cloud-native stack, the performance of all of those layers, and each of the main components within each layer, should be tested individually and collectively.

8. Keep tests focused in the realm of possible

While it may be interesting to know how an application performs under super-light loads, or what its breaking point is, those metrics are not very useful because the conditions being replicated occur rarely, if ever. A better approach, especially for organizations with small staffs and budgets, is to design their application performance tests so they replicate workloads that have a decent chance of actually occurring in production.

9. Real users are mobile-first, tests should be, too

Applications today often have different iterations ranging from traditional (installed on a PC or desktop), cloud based (such as Office365) and importantly, mobile (for access via smartphones or tablet). Whatever the range of access models and use cases may be, teams should have the capabilities required to test back-end or API performance of all the different application types and access methods. Application performance testing regimens should absolutely encompass the full range of usage scenarios involving different device types.

10. Ensure that reports are dialed-in

With good and consistent reporting, valuable test results can be shared across an organization to help with decision-making about future development priorities. Conversely, with poor reporting, insights from – and the value of – application performance testing can get lost. That can be avoided by tailoring content for the intended audience (i.e. technical or non-technical).

11. Prioritize and take remedial actions

Application performance testing is only as valuable as teams make it. And to maximize that value, teams must prioritize the surfaced issues, and be empowered to act on them. Performance testing provides data and insights; acting on those insights can produce strategic and tactical advantages. Whether it’s fixing a found bug or validating the efficacy of a new development direction, real value stems from taking action. High-quality testing can light up the right paths for these actions.

12. Avoid the pitfalls of closed testing systems

Closed systems have been around for decades and are still a big part of many performance testing programs. With closed testing, the testers set a fixed number of concurrent agents, isolated from one another, each performing a defined sequence of tasks over and over again in a loop. As discussed in #2 above, the main shortcoming of these systems is that as the tests they generate slow down the application being tested, they also slow down the testing tool itself, which skews the results. 

Conclusion

Organizations of all kinds are migrating their IT operations to cloud architectures for reasons that are well-chronicled. They are tapping virtually infinite resources and changing the ways they do business with more virtualization, software-driven IT infrastructure, and cloud-native applications. Some are taking it a step further with AI Ops, where they use artificial intelligence and machine learning to automate their IT operations.

Whether it’s an organization’s first foray into cloud-based architectures, or they embraced the cloud early on, one thing is clear. Organizations need application performance testing capabilities that are just as powerful, sophisticated, and dynamic as the modern applications and other cloud-based resources they need to test.

Legacy testing approaches and systems simply will not get today’s testing job done. The challenge that teams must overcome is two-fold – accurately observing (and understanding) performance issues, and then being able to fix those problems.

The good news is that this technology has advanced, and high-quality, cloud-centric application performance testing solutions are commercially available now.

Forewarned is forearmed. Getting an accurate picture in advance of how their applications and other resources will work in production and perform under varying conditions, gives companies definite strategic and tactical advantages. It just takes the right testing system to gain those advantages.

About StormForge

StormForge offers a smart and effective approach to modern application performance testing. The StormForge Platform provides a proactive way to mitigate the risks of application downtime, performance issues, and cost overruns. The Platform prevents those problems with automated, continuous application performance testing and optimization, powered by machine learning.

Learn more and start your free account.