Listen to this blog
Automation testing has really redefined the game for many software development teams to reduce the time and effort needed to perform comprehensive testing. But it is not without its limitations as well. Recurring flaky tests are a typical source of frustration for testers as they make the automation tests unreliable. As a leading automation testing company, we don’t see speed and progress as the same when it comes to testing. So we make sure to fix and reduce flaky tests from our end by using the knowledge we have gained over the years. So in this blog, we will be seeing what a flaky test is, what are the various causes, and how to fix and reduce flaky tests as well.
What are Flaky Tests?
Before we head over to fixing & reducing flaky tests, we need to know what flaky tests are. Let’s imagine a scenario where a test script fails the first time and the same script passes the second time even though no changes were made. These tests are known as flaky tests. Such unreliability will result in slowing down production as the teams will be unable to distinguish between a test that has a real bug from one that is wasting time with an invalid fail. But how common are these flaky tests? Unfortunately, they are very common as according to a recent poll, 59 percent of software developers or test case developers deal with flaky tests on a monthly, weekly, or daily basis. And according to Google,
- The flaky tests accounted for 84% of the test transitions from Pass to Fail.
- Only 1.23 percent of testing discovered a breakdown.
- Almost 16% of their 4.2 million tests revealed some flakiness.
- Flaky failures regularly hinder and postpone releases.
- Rerunning flaky tests used 2–16 percent of their computational resources.
Causes for Flaky Tests
These flaky tests mostly occur when an end-to-end process occurs. But what causes these flaky tests? There are various contributing factors and here is a list of the most common ones.
- Flaky testing environment
- Using Unreliable Third-Party Tools and Applications
- Lack of synchronization
- Poorly written tests with too many data dependencies
- Accidental Load testing
- Incorrect configuration of modules used in the frameworks.
How to Fix & Reduce Flaky Tests?
As much as it sounds tiring and difficult to fix & reduce flaky tests, it has to be done without fail to ensure that you have reliable automation testing. So let’s take a look at the major steps you’ll need to follow to fix a flaky test if it is present and also explore the best practices you can follow to reduce flaky tests from being created in the first place.
1. Identify & Quarantine the Flaky tests
2. Document the Flaky Tests
3. Identify the root cause
4. Fix Flaky Tests One at a Time
5. Follow Best Practices
- Use of POM pattern
- Stability of an environment
- Build a framework and check for memory leaks
- Synchronous Wait
Identify & Quarantine Flaky Tests:
One of the best ways to identify flaky tests is to run your tests multiple times. By doing so, even the mildest of flaky tests can be identified without fail. So implementing a CI process in your testing will ensure that the tests are executed multiple times.
As soon as a flaky test has been identified, make sure to quarantine it from the other test cases that are working well. It is pretty much the same concept we used to counter the pandemic. That is why you’d want to do this as quickly as possible since the longer a flaky test stays in your test suite the higher the chances of it impacting the other test cases and compromising your entire test suite. So divide the testing into two paths: one for stable tests that only fail when anything goes wrong, and another for unstable tests with flaky failures. This isolation also makes it much easier to fix the issue without impacting your test suite.
Document the Flaky Tests:
Documentation is an integral part of the software testing process as the process doesn’t end with just identifying the bugs. Likewise, you would have to create conclusive and clear documentation for all the flaky tests that you have identified in your automation tests. We had already stated that the tests should be executed multiple times to identify flaky tests. If documented properly, you will now have access to data such as average test execution time, the number of failures/passes, what functionality had the most number of flaky tests, and so on. It will dramatically make it easier for you to identify patterns and also to collaborate with your team to reduce flaky tests from being created in the future.
Identify the root cause:
Identifying a flaky test is the hard part as most causes of flaky tests will be straightforward. Look for the usage of bad locators, incorrect data, bad assertions, and so on. But in a few cases, you might have to dig deeper to identify the root cause of the issue. In that case, you can run your isolated test case and make use of the screenshots or screen recordings of the previous test execution if available, error logs, application states, and so on. But the most common cause of flaky tests is incorrect usage of object locators. So make sure the appropriate locators have been used in the right place with the correct tags.
Fix Flaky Tests One at a Time
The primary reason for finding the root cause is to make a permanent fix as the flaky test has to be eventually added back to your automation test suite. So the best way to go about this is to fix the flaky tests one at a time. Trying to fix them all at once will make the process more complicated and slow down the fix and not ramp it up. Once you are sure that the test is no longer flaky, you can add it back to your test suite without impacting it.
Follow Best Practices
Once the flaky tests have been fixed, make sure you have implemented the best practices to reduce flaky tests being created in the future as prevention is better than cure. If you have already done it, great. If not, here are a few recommendations from our experience to reduce flaky tests.
Use of POM pattern:
Page Object Model, or POM, is a design pattern that generates an object repository for storing all web items. It aids in the reduction of code duplication and the management of test cases. The separation of the test code, page-specific code, and layout allow any user to modify the changes on a single page or in one place. The page object model is really useful as it primarily helps reduce flaky tests, ease maintenance, enable code reuse, and enhance the readability & reliability of the test scripts.
Stability of an environment:
This is the most common factor in the flakiness of a script. The environment should be stable enough to run the scripts or if the environment keeps on giving the server bug or latency issue or browser crash, it affects the script which leads to flakiness. So it is important to check if the testing environment is stable to avoid flakiness.
Build a framework and check for memory leaks:
Having a framework of the test code gives a better understanding of memory usage over time. If your code contains memory leaks, your test suite’s memory utilization will increase with each test run. A memory leak might be the root of your flakiness issues, depending on the available resources and other systems running on that hardware. So choosing the right automation framework will be helpful in writing your tests and in keeping your test suites stable.
Like how we discussed using the right object locators, proper usage of waits and sleep will be important too. Predicting page load time is near impossible as it keeps fluctuating based on numerous conditions. If you attempt to perform automated actions on a half-loaded page, the result will definitely be a failure even though your script is right. So use implicit & explicit waits and sleep commands properly in your automation scripts.
Flaky tests are truly an automation tester’s worst nightmare. And we hope we have provided you with enough helpful information to help you avoid flakiness in your automation test suite by pointing out the contributing factors and best practices you can follow. Even if a test turns out to be flaky, you can use the above-discussed methods to fix the issue without impacting your entire test automation suite, and implement the best practices to reduce flaky tests. Being a pioneer in the automation testing industry, we will be sharing more informative content through our blogs. So make sure to subscribe to our newsletter to never miss out on any of them.