When it comes to implementing a sound software QA approach, there’s probably nothing more important than software testing. The problem is that software testing is such a vast area. With many terms and buzzwords, types of testing, and tools, it’s hard not to feel overwhelmed.
Today’s post is our contribution to relieving your burden by supplying you with detailed information about one specific test-related topic: UI test automation.
“UI test automation” is a term that has become somewhat loaded over time. Different people might assign it very different meanings. To add to the confusion, there is (some) disagreement on whether UI testing is something worth pursuing at all.
Well, the good news is that we’re here to clear all that for you. After reading this post, you’ll better understand what UI testing is, why it’s essential, and how it fits into a modern QA strategy. Before wrapping up, we share a list of best practices you can start adopting today to get the most out of your UI testing approach. Sound good? Let’s dig in.
UI Test Automation: Starting With the Fundamentals
Since there’s no better place to start than the beginning, let’s commence by defining UI test automation, championing the need for UI testing, and explaining why it’s best to automate it.
Defining UI Test Automation
The definition of UI test automation shouldn’t be surprising. It merely means UI testing performed with the help of a test automation tool.
UI testing, in turn, can be defined as “the process of verifying that an app’s UI not only behaves as intended but also empowers users to make the most out of it.” Through UI testing, we can, among other things:
- verify that the app’s UI isn’t jarring or unintuitive;
- check whether input from the users is handled correctly, including if there is validation against invalid input;
- ensure that there are no spelling mistakes, capitalization inconsistencies, or even debugging messages that made it to production somehow;
- check against readability/legibility problems, including font size and colors.
More interesting than UI testing’s definition, though, is the controversy around whether you should perform it or not, how it fits into a modern QA strategy, and whether to automate it or not. That’s what we’re going to see next.
Expand Your Test Coverage
Why Perform UI Testing?
After having defined UI test automation, we have to take a step back and argue in favor of UI testing. This is necessary because there are people who think UI testing isn’t worth the trouble and that unit tests and integration tests are all you need. Let’s see why we believe that such a statement is misguided.
Unit Tests Are Not Enough
First, you have to understand why unit tests, even though they’re necessary, are not sufficient for your QA approach because, in a sense, they’re not really tests. Think of unit tests more as executable sanity checks that programmers write to validate their assumptions when writing code.
However, unit tests aren’t a faithful representation of the application in real usage. That’s because they verify only small pieces (aka “units”) in complete isolation. Instead of dealing with real external dependencies, they rely on techniques such as mocking.
This property of unit tests is a double-edged sword: It allows the tests to be simple and fast. But at the same time, there’s a whole category of defects that unit tests can’t catch.
Integration Tests Aren’t Enough Either
Integration tests address the limitations of unit tests by actually testing the integration between different units and between the units and the external dependencies, such as the database, the filesystem, the network, and so on. Some people go on to say that you should write mostly integration tests.
Integration tests, in a way, are the opposite of unit tests. They’re costly to write and set up and slower to run, and they require you to erase all of their traces after each test execution in order not to mess with the next test run. However, they represent a more realistic scenario and, as such, can catch defects that happen at the integration between different layers of the application.
You could say that unit tests and integration tests complement one another. One’s weaknesses are the other’s strengths and vice versa. However, this dynamic duo alone still can’t carry the whole burden of a QA approach. Why is that?
The UI is What the User Sees and “Touches”
UI testing is essential because the UI is the calling card of the application. Testing approaches that ensure the app works at the API level are undoubtedly valuable. But that doesn’t change the fact that the UI is what the user sees and interacts with—it’s in the name, after all.
UI testing caters to all of that, in a way that API-based forms of testing cannot. That’s why UI testing is worth your time. But does it need to be automated?
The Importance of Automation in Software Testing
From 1 to 10, how important is automation in software testing? We’d say that it’s an 11.
Make no mistake: manual testing is far from dead. Picking the right balance between manual and automated testing is essential to ensure you have a successful QA approach.
However, there’s just no way to deliver software at the speed the modern world requires by relying on a testing approach that’s completely manual. That’s due to this thing called regression and the fact that software, more than any tangible product, is amazingly prone to it.
Since every change made to a codebase, no matter how seemingly insignificant it is, can cause problems in any other part of the application, you can say you’re confident in the quality of the code you’re releasing only if you thoroughly test the whole application after every change.
Doing so manually would require such an absurd amount of time and resources that you might as well give up on testing entirely. That’s why the road to fast and high-quality software delivery has to go through automated tests.
Where Does UI Testing Fit in Your QA Approach? The Test Pyramid, Revisited
Up until now, we have established that, although unit tests and integration tests are valuable, so is UI testing. A good testing strategy will balance these types of tests along with other testing, like performance and load testing, grid testing, and the list goes on. How can we figure out how UI testing fits into this puzzle?
The test pyramid concept might give us some guidance. In his famous article, Martin Fowler describes the test pyramid as “a way of thinking about how different kinds of automated tests should be used to create a balanced portfolio.” Throughout the article, Fowler points out that a well-balanced testing strategy should employ a more significant number of unit tests than any other type of test because of the reason you’ve already seen in this post.
He also goes on to mention the weak points of UI tests, especially their lack of reliability. He’s right, of course: tests that drive the application through its UI can be fragile since they often fail due to changes to the interface.
However, it’s been many years since the publication of that article. And while the test pyramid is undoubtedly a useful concept, it’s crucial to note that, nowadays, we have tools that can make UI tests more reliable, making test maintenance easier.
Testim is one such tool. This AI-powered solution can analyze the DOM of web pages, creating smart locators for each element. That way, even when developers change the attributes of those elements, the tests continue to run.
The Step-By-Step Guide to Get Started With UI Test Automation
Let’s say you want to get started with UI test automation in your organization. That’s great news! But how do you go about doing it? That’s what you’ll learn right now.
Evaluate Your Current QA Strategy
Is getting started with UI test automation hard? Well, while it’s certainly not a walk in the park, how hard it’s actually going to be depends on many factors. One of them is the shape of the current QA/testing efforts in your organization.
Because of that, the first step you must take when getting started with UI test automation is to examine your current strategy very closely so you can answer some questions:
- Do you have a reliable CI/CD pipeline in place? Having a CI tool that builds the whole application with every new commit is the bare minimum you should have in terms of automation.
- Is there at least some test automation in place? If you currently have zero test automation, you might consider starting with unit tests, for instance, since they’re typically easier and cheaper to write.
- Is there some UI testing in place, even if manual? If so, automating those test cases might be a great place to start.
- Does the organization currently have people with the necessary skills to handle UI automated testing? If it doesn’t, you’ll need to consider hiring new talent or providing training to your current staff.
- Will there be a need for more budget? Automation isn’t free, and it shouldn’t be an afterthought. Before committing to a UI test automation strategy, it’s essential to verify whether that will be financially feasible.
The questions above are just an example of what you could ask. The key takeaway here is that before seriously committing to UI test automation, you must get a clear picture of the way things look today.
For instance, starting with UI test automation is likely to be easier at an organization that already has some test automation going on, already performs some manual UI testing, and has the budget to spare. On the other hand, an organization with none of those things is going to have a tougher challenge ahead of it.
Understand the Benefits
I’ve already briefly made a business case for UI test automation. However, I’ll ask you to bear with me for a moment, though, since I’ll continue harping on about this.
Having a clear understanding of the benefits of UI test automation is essential. If you don’t, you’ll have a hard time calculating the ROI of the process, which is the next step in our list. Failing to obtain its ROI, in turn, means you’ll probably fail to secure the buy-in from the key people in the organization.
So, what are the benefits of UI test automation?
- Speed. With test automation, you can test your whole application orders of magnitude faster than with human testers.
- Cost reduction. Automated testing is cheaper than manual testing.
- Reduces opportunity costs. UI test automation removes humans workers from repetitive and error-prone work. Instead, they become free to perform more creative, and potentially more valuable work, reducing the opportunity work involved with manual testing.
- Reduces windows for errors. Automated test cases don’t create errors due to tiring or lack of concentration. Of course, problems can still happen, due to faulty test data, script error, or problems with a third-party component. However, in UI test automation the error margin is smaller than it is with manual testing.
- Consistency and reproducibility. For the same reason as the previous point, UI test automation affords a degree of consistency and reproducibility that’d be unheard of in manual testing.
- Effective against regressions. The set of UI automated tests can effectively act as a regression testing suite, alerting the team when defects pop back up to existence.
- Ensures a smoother user experience. Since the UI is the layer of the application the user directly interacts with, UI test automation is a valuable tool to provide the user a great experience.
The list above isn’t exhaustive. I’m sure you can certainly think of more examples, applicable not only to UI test automation but to test automation in general.
Calculate the ROI
Understanding the benefits of UI test automation on an abstract level is valuable, but can only take you so far. To get a more concrete idea of how it can impact the organization’s bottom line, you’ll need to calculate the return on investment of this process.
Lucky for you, we have a published post on test automation ROI. And what’s more: it offers a free spreadsheet you can use to perform the necessary calculation. We invite you to check it out—after you’re done with this post, of course!
Secure the Organization’s Buy-In
Let’s say you now know about the benefits of UI test automation—and are able to communicate them clearly. You also understand what it’s involved in calculating the ROI of the process. The next step is putting all of this knowledge to good use and securing the organization’s buy-in.
Why is this important? Well, this is the 21st century and software testing is no longer the privilege—or burden—of a separate class. Instead, everyone involved in software engineering performs testing. What that means, in practical terms, is that implementing a whole new test automation strategy is bound to impact virtually every member of the software team.
You might face objections. They might ask you hard-to-answer questions. It’s important to equip yourself with knowledge and patience to ensure everyone’s on board.
Start With a Risk-Based Approach
You’ve secured the buy-in of the key people and now you’re about to start implementing UI test automation. Congrats! The next question then becomes: where to begin? One might think the right approach would be to start adding tests homogeneously throughout the application, in an attempt to reach a large test coverage.
That would be misguided, though. Even with the cost reductions that you gain by adopting test automation, testing still has cost. Resources are finite. How to better allocate them?
Here’s the thing: your application is not homogeneous. Some parts of the codebase are relatively simple, while others might be incredibly complex, and a third group might even be trivial. Also, some parts of the application are easily more critical than others.
Finally, changes to the codebase aren’t distributed in a uniform way as well. There are features or modules that get changed frequently, while some are rarely touched again.
When you take all of the above into consideration, it becomes clear that you can prioritize the riskier areas of the application when getting started with test automation, UI, or otherwise. Favor the areas of the code that are at the intersection of:
- more complex code
- highly critical features
- portions of the codebase that suffer more changes
Those are the parts of the application that a) you’re more likely to introduce defects, and b) have the potential for more extensive damage. Prioritize those areas.
Get to Know the Available Tooling
You’re finally ready to start. The next step is figuring out which tool makes more sense for you.
Selenium is one of the most popular tools for UI test automation. Though officially a browser automation tool, most people use it for testing websites and applications. Selenium is a popular choice and a tool worth knowing nonetheless. However, it does require coding, at least when it comes to its most powerful version, Selenium WebDriver.
Testim Automate is a test automation solution that doesn’t require coding—coding is optional and leads to a hybrid approach for test creation. Tests created with Testim Automate make use of its powerful smart locators feature, which is able to detect changes made to attributes of the elements on the page and still identify them correctly. As a result, the tests you get aren’t fragile and help you create a suite of resilient UI and end-to-end tests.
UI Test Automation Best Practices
Before parting ways, we’ll share some best practices for your UI test automation you can adopt right away.
- Don’t rely solely on UI testing. We said earlier that it’d be a mistake to disregard UI testing and to think that all you need are unit tests. The opposite also applies. UI testing is valuable, and so are other types of testing, since each one can’t do the job of the others.
- Create and follow a naming convention for your test cases. That’ll make it easier when you need to find some specific tests.
- Don’t test all possible tests in all target browsers. Instead, investigate which test cases really require testing in different browsers and then employ a grid testing tool.
- Don’t use sleep() when you need to pause in a UI test. Instead, leverage features such as Selenium’s implicit and explicit waits or Testim’s “Wait For” feature.
- Learn how to leverage headless browser testing. By using tools like Puppeteer, you can increase efficiency when executing UI tests.
This list of best practices is by no means exhaustive, but it can help you get started on your UI test automation journey.
Fun and Profit With UI Test Automation
There are many types of software testing, automated or manual. In today’s post, we’ve covered UI test automation. You’ve seen how UI test automation is neither the only type of software test you need nor the waste of time the naysayers claim it is.
Instead, it’s a cog in an overall well-engineered QA machine. A very valuable one, mind you, since the UI is the calling card of the application. You’ve learned that UI testing is no longer synonymous with fragile tests, due to modern tools that leverage machine learning to create reliable suites.
Stay tuned to the Testim blog to learn more about other types of tests. One step at a time, one cog at a time, you can approach the desired destination: the efficient machine of a solid QA strategy.