Functional and Load Testing

The goal of software development is to deliver a great user experience. This includes not just the functionality and usability of an application, but also its performance. Mobile applications that load slowly are likely to be deleted. Web pages that take a long time to refresh may be abandoned, leading to lost traffic. Combine functional testing with load testing to confirm that an application’s features work as expected with reliable performance even during peak use. A typical QA process might have the following phases:

  • The application passes unit and integration testing,
  • Automated functional testing validates that new functions of a website or application work as described in the user stories/BDD scenarios and that no regressions have been introduced.
  • The QA team conducts exploratory testing to uncover hidden defects. These tests are performed under a lower load than would be expected in production.
  • Finally, a performance test verifies the system’s behavior in simulated usage conditions – varying traffic, multiple users, increased network load, etc.

The drawback of this approach is that the first three phases provide feedback on how an application performs in ideal conditions. It is not until the very end of the testing process that the team discovers how the system works under conditions that simulate real life. In contrast, combined functional and load testing process might have the following steps:

  • The application passes unit and integration testing.
  • Automated functional testing is performed in combination with load testing to confirm that the application will perform as expected under realistic conditions.
  • The QA team conducts exploratory testing to uncover hidden defects. Initially, these tests are performed under a lower load than would be expected in production but are followed by additional exploratory testing with a simulated load. This provides important insights into how end-users will experience the application in production.

This approach to testing enables you to verify key functionality under realistic usage conditions earlier in the testing process when it is easier to identify and resolve them.

Key concepts

Performance testing

Performance testing generates benchmarks for evaluating a system, which consists of an application or website along with its database files, servers, network hardware, etc. Performance testing benchmarks can include the numbers of concurrent users that an application can support comfortably, and the complete system’s responsiveness, throughput, resource usage, latency, and more. Generally, latency refers to the time required for an application to respond to a user input. In networking, the term latency is used more specifically to describe the amount of time it takes a data packet to travel one-way between nodes of the network, or for a data packet to make a full round-trip back to its origin point.

Load testing

Load testing is a subset of performance testing. Load testing examines the performance of an application during defined periods of “normal” load and “high” load. Load testing can include activities such as simulating a target number of concurrent user transactions as well as a target volume of transactions. The goal of load testing is to determine whether the system performs well during periods of normal usage as well as high usage.

Stress testing

Like load testing, stress testing is a subset of performance testing. Stress testing identifies the point at which system response degrades significantly or even fails, called the “breakpoint.”  Stress testing is done by increasing the load beyond the maximum anticipated volume. Stress testing can help identify how the application or website will respond to extreme conditions. For example, if an application is overwhelmed by user transactions and crashes, how long does it take to recover? How much data, if any, will be lost?

Best practices

Define measurable metrics

Set performance goals that are measurable, such as response time, throughput, number of requests processed per second, and resource utilization. Always measure performance from the user’s perspective. For example, it doesn’t matter if response time from the server is fast if the client application is slow.

Use realistic scenarios

Create realistic tests that simulate the most common workflows. Prioritize your user’s “happy path” or “golden path” scenarios. For more information on prioritizing functional tests, refer to E2E testing best practices in the previous article.

Configure a clean environment

Your test environment should be isolated from other applications and traffic that may affect performance. For web testing, this means clearing your browser cache and cookies; if the browser uses cached data and cookies to process client requests, it can cause unreliable load and performance testing results.

Verify high-risk scenarios first

Conduct smoke and sanity tests before proceeding to your other tests. If there is a significant problem with the application under test, you want to know that right away before spending time on other types of testing.

Start small

Verify that your functional tests complete successfully for a limited number of users before simulating multiple users. Scale up gradually to determine where bottlenecks may occur.

Tools

Ranorex Studio provides a full set of tools to automate functional UI testing for desktop, web, and mobile applications. Within Ranorex Studio, you can simulate transaction loads in several ways:

  • Use data-driven testing to generate a volume of data and execute CRUD actions (create, update, and delete) against a database
  • Set the number of iterations for a given test action to simulate actions such as queries and page loads
  • Test in parallel to generate a load from a variety of devices

For more comprehensive load testing, Ranorex integrates with NeoLoad from Neotys. NeoLoad provides advanced tools for designing and analyzing load tests, including component testing for APIs, web services, and microservices. To provide the most realistic analysis of your application or website’s performance, Neoload supports using physical machines or virtual servers, as well as cloud-based providers in multiple geographical locations. NeoLoad allows you to identify performance bottlenecks with real-time monitoring of an application’s infrastructure. To learn more about the Ranorex integration with NeoLoad, refer to one of the resources below:

Download the NeoLoad plugin for Ranorex.

NeoLoad Integration for Ranorex at GitHub. In addition to the necessary files, this link includes step-by-step instructions to configure and use the NeoLoad plugin for Ranorex

Watch the on-demand webinar

Combining Automated Functional and Load Testing. Learn the benefits of combining automated functional and load tests with Ranorex Studio and NeoLoad

Read the blog article

Ranorex-NeoLoad Webinar – Questions Answered. Get answers to questions asked during the Ranorex-NeoLoad webinar to fully understand how to set up the Ranorex-NeoLoad integration.

Conclusion

This article completes the “10 Best Practices in Test Automation” blog series. The Ranorex team hopes that this series has been informative and helpful to you. For additional articles and screencasts on the topic of test automation, visit the Resources page of the Ranorex website. Or, download our free whitepaper “Strategies for a Successful Test Automation Project.” To learn more about how Ranorex Studio can meet your test automation needs, download a free 30-day trial using the link below. For free assistance in setting up and using Ranorex Studio in your environment, contact our sales team . You can also register to attend one of our live test automation webinars, with sessions for desktop, web, and mobile applications.