The biggest confusion arises when it comes to testing the user interface itself. Teams usually test other aspects along with the UI, such as behavior of the UI components. This is not bad per se, but it’s not a minimum viable solution to the problem of testing the UI itself. Fortunately, help comes from so-called Visual Testing, an optimal solution for providing the highest quality of UI elements. We took a closer look at the benefits of visual tests and their practical uses in mobile applications.
Why visual testing?
There are many possible ways to test UI in mobile applications development process. However, visual testing proves to be the most precise and the fastest method. It enables app creators to automate the process of view checking, which significantly speeds up the work. You can verify whether a particular component renders correctly or if it doesn’t lead to regression. Developers will be notified about bugs much faster and, as a result, testers will have more time for testing other parts of the app.
In each test you can check whether a property of a particular element has the desired value. Even the tiniest changes in the color, relocation or framing of the elements may escape the developer’s attention during code review, whereas automated visual tests will definitely detect them. This way, the UI of your app will always be “pixel perfect”.
An engineer just needs to write a few lines of code to check several distinct views. This decreases the amount of test code, making it more clear and easier to read. It’s especially important in big projects with a substantial amount of legacy code, where setting up a new testing environment might take a long time. With visual tests we can automate the process and, as a result, save many testers’ time.
But how exactly do visual tests work?
How visual tests work
Visual testing is a method of detecting changes in UI appearance that may lead to regressions. The main mechanism relies on comparing the actual UI with reference snapshots of the same UI. This is achieved by running a specialized test suite for generating reference snapshots. These snapshots are then kept in the device memory, which means that this procedure needs to be run on each device separately. After generating reference snapshots, the main test suite that will validate current state of UI by comparing them with snapshots, can be run. Once the tests are run, a report is generated with a summary of the results. The visual testing tools can point out the exact differences between the actual UI and the snapshots (expected result). Each time the UI is changed, the reference snapshots need to be generated again to keep them up to date.
Tools for visual tests
Android: There are no visual testing tools for Android in the Android Testing Support library, therefore developers need to create their own tools. One of the few available frameworks was screenshot-tests-for-android created by Facebook. This tool allows you to test entire screens as well as smaller pieces of the UI, such as single controls. Runtastic added better support for CI and Android 6.0 as well as also some minor improvements to their project. The library also contains a plugin that allows for easier access to generated tests reports.
iOS: Similarly to Android, Apple doesn’t provide tools that will natively perform snapshot tests. Therefore, engineers need to find their own way around. Facebook created a library called FBSnapshotTestCase. It’s currently supported by Uber under the name iOSSnapshotTestCase. Right now it’s the most reliable solution for visual testing on Apple devices.
React Native: The most popular tool for snapshot testing of React Native apps is Jest, a library which enables testers to identify unexpected interface changes within your application – whether that interface is an API response, UI, logs, or error messages. Another tool worth mentioning is Loki. It’s primarily used in web development, but, developers have been using it in React Native, too. Unfortunately, there are not options to configure this tool. In order to effectively run tests, developers need to conduct them on the same simulator with the same screen size.
Benefits of visual testing
The main benefit of using visual testing techniques is faster bug recognition and preventing regressions. The process forces developers to maintain higher quality of the UI on a variety of devices. Recognizing issues with the UI can also be a valuable feedback to the designers, who can rethink their approach to designs on devices of different screen sizes or resolutions. Visual tests also make it possible to find edge cases related to specific views on specific devices, something that takes a lot of time to discover manually. In a pinch, the main benefits of visual testing are:
Quick bug detection
Increased quality of the code and UI
Control of views on different devices
Effective feedback for designers
Low entry barrier (they’re easy to implement)
Lower workload for testers
Quality assurance perspective
There are obviously numerous benefits from the application quality perspective, but quality assurance specialists also notice upsides. They spend less time on fixing bugs, so they can focus on other parts of app testing. Correct implementation of visual tests increases the quality of other features, making basic functionality bugs less common.
Automated test are also more accurate than an engineer’s eye. They can detect even the tiniest difference in the application’s appearance. It’s also easy to modify them.
Moreover, they make work more efficient. Regression detection with such a high accuracy level would take a lot of time if done manually. With visual tests, engineers just need to verify the functional aspect, such as whether it works when you click a button. The rest is done by a tool.
Things to consider
On the other hand, there are also a few things you should think about before giving visual tests a go. First, your team should be aware that visual testing is as important as any other type of testing. Secondly, engineers should keep an eye on updating reference screens and check if something didn’t change there.
The tools are also not 100% perfect, and sometimes they might detect false bugs. However, knowing that and having two screens (the previous and the current one), you can always validate the results yourself. There might also be an error in development which will not be recognised by a visual test. It may happen if regression occurs in a non-obvious view, for example one which was not covered with automated tests. However, with an experienced team of developers and testers, such problems can always be prevented.
Visual tests can automate the process of bug detection in your application and significantly speed up development. They have many benefits, and with the right implementation they will assure top quality of your product. If you have more questions concerning visual testing, drop us a message. We’re always happy to chat.