•
Drizz raises $2.7M in seed funding •
•
Featured on Forbes
•
Drizz raises $2.7M in seed funding •
•
Featured on Forbes

Mobile QA has its own language. You need to know the terms and how they connect during a release.
Unit tests check individual units of code. Integration tests confirm how the code works as a team. End-to-End tests check how the code works along an entire user journey. Smoke tests confirm the stability of a build and allow for further testing. Regression tests confirm whether changes to the code impact existing features.
Tools such as Appium and Espresso work to automate testing for mobile applications. Real mobile devices show issues caused by hardware and operating systems. Emulators allow testing of configurations at a swift pace. CI/CD pipelines perform checks across the development and release cycles. Flaky tests show irregular results; visual regression tests show changes in the interface. Test coverage examines what part of the application the tests cover.
A build can pass its unit and integration tests, yet fail a UI test on a Samsung device. The developer would call this a flaky test, while QA would argue the test shows a regression. The pipeline stops the release until the cause is identified.
These terms describe the same testing system. The test pyramid helps explain how teams create the balance of fast unit tests with slower integration and end-to-end tests. Test speed relates to CI/CD. Testing in CI/CD systems determines where the tests are performed. Test environments affect coverage of devices. Real device testing exposes failures emulators may miss. Flaky tests diminish the trust of all pipeline results. Understanding regression testing is important, but it is one of many concepts needed to understand mobile QA.
You must understand the differences between regression testing and smoke testing, how an integration issue affects an end-to-end test, and why real-device testing is crucial. You must also have an idea of where automation frameworks lie in your QA process. Mobile QA brings together multiple testing methods, tools, frameworks, CI/CD, performance and security, accessibility, visual testing, AI-powered testing, and QA strategy. This glossary defines those terms and where each one fits.
The mobile test pyramid helps determine where testing efforts should be focused. The bulk of the testing effort should be focused at the bottom of the pyramid. The focus should shift to broader testing at the upper levels of the pyramid, which incur greater expenses in execution and maintenance.
A unit test checks a small portion of the application, such as a function, class, reducer, or validation rule. An example of this might be testing that a validation rule rejects a password if it is fewer than 8 characters long and does not contain a number. Though unit tests do help developers find defects, they do not test the mobile experience as a whole. A passing unit test cannot guarantee that a screen displays correctly or that API calls return data in a proper format.
An integration test verifies that two or more application components function adequately together. This type of test might check that the login screen, authentication service, local storage, and session manager components communicate appropriately. These types of issues bring about testing that involves checking that requests are formatted correctly and that error handling is appropriate.
They fill the gap between unit tests and end-to-end tests since they test application behavior across multiple steps without needing to cover the complete user journey.
An end-to-end test validates a complete user journey or, in other words, a complete workflow from a user's perspective. Consider the example of opening an app, logging in, searching for a product, adding the product to the cart, and completing the purchase.
End-to-end tests build confidence for releases because they cover many layers at the same time. However, end-to-end tests take longer to execute and necessitate more maintenance. Failure of an end-to-end test does not always indicate a defect in the user interface. The problem might be an outage of the API, an issue with the test account, a missing device permission, a synchronization problem, etc.
A smoke test is a short set of verifications that enable an assessment of whether a build is stable enough to warrant more complicated testing. Examples of checks include app installation, launching the app, logging in, navigating within the app, and loading a key page.
Smoke tests enable an assessment of whether the build is usable for the next level of testing. A smoke suite should be kept small. A smoke suite when used extensively becomes a regression suite, making it a lengthy assessment.
Regression testing evaluates whether changes to the code impact existing behavior. An example of this is the testing done as the payment SDK is updated, the authentication mechanism undergoes a change, and/or the navigation is redone. Compared to smoke testing, regression testing has a wider scope.
Regression testing looks at existing functionality. Means to assess risk, along with the history of a product and the technical disruptions are integral to designing tests that assess the impact of regressions. An example is the addition of push notifications, which elicits a need to assess permission, token registration, deep linking, logging out, and notification handling.
Rather than run every test after every commit to the source, assess what test is linked to a given change and choose that.
Test coverage looks at the extent to which an application or code base is assessed. There are many forms of test coverage that teams engage in, including line, branch, and API coverage. Device and feature coverage, especially for mobile apps, is just as important as code coverage. An application may have great code coverage, but still have no testing for offline mode, dark mode, screen rotations, or a specific version of Android.
Every testing environment is important, but physical testing on actual devices (known as real-device testing) brings to light issues not present on simulators, including hardware and software issues related to the state of the battery, camera, biometrics, Bluetooth, GPS, and other issues related to hardware and software, as well as performance issues related to slow, repeated app starting, and issues related to keyboard layout.
A sensible device mix includes likely customer devices as well as devices likely to impact your app. An emulator reproduces an Android device, while a simulator reproduces iOS behaviors.
These environments allow for quick local development and provide broad OS coverage and deterministic test runs. They fall short of fully emulating physical hardware. Validation of camera sensors, biometric readers, battery behavior, the performance of the GPU, Android OS-specific changes, and manufacturer-specific Android OS changes need real devices.
A strategy that attempts to balance this scenario would implement emulators and simulators for quick assessments and real devices for critical workflows and features that are hardware specific and for the purpose of software releases.
Device fragmentation is the diversity and range of variation in the size of the screens used, the varying operating systems (OS) and their versions, the manufacturing companies, the processor chips, the web browsers, and the configuration of the device as a whole.
Testing for every device is not necessary. One should construct a matrix that evaluates all those areas with a focus on the customer, key business processes, high revenue generating processes, the OS that are currently being supported, and defects that have been previously logged. One should focus first on the coverage that is creating the greatest risk.
Appium is an open-source automation framework that can test native, web, and hybrid apps across Android and iOS devices. Test automation for Appium can be written in several languages, including Java, JavaScript, Python and C#. It supports Appium through platform-specific drivers.
Appium is a framework for teams that want to have automation across platforms. Because it uses a higher order automation framework, the setup and execution of the framework creates a great deal of overhead, though it offers a great deal of coverage.
Espresso is Android’s official UI testing framework. It is tightly integrated within Android apps and helps teams write tests for Android UI by taking care of UI thread synchronization. Espresso is one of the UI testing frameworks for Android, and because of its platform focus, teams need a different approach for iOS. Android app teams usually integrate Espresso with other unit tests, integration tests, and selected real device tests.
XCUITest is a framework developed by Apple that is used for UI testing of iOS applications. XCUITest has the ability to control UI elements, as well as determine the behavior of the system, inside of Apple’s software development tools. In terms of mobile UI automation, selectors are crucial. Accessibility identifiers are more predictable than screen coordinates, visible text, or dynamically generated view indexes.
AI-based mobile test tools help teams acquire, organize, and analyze automation frameworks. Based on the service, AI offers a variety of solutions, such as creating test case automation, identifying test case elements, grouping failure cases, AI that can distinguish between visually similar images, or suggestions to enhance automation coverage. AI can be quite helpful with regression testing when combined with a consistent framework, although teams need to establish acceptable test case input and output, stable test data, and validated test case executions.
Drizz offers a simple framework that automates the test case execution, while providing reporting tools for failed tests. This provides value for teams covering more testing devices without increasing the burden of maintenance for each test.
CI/CD provide a link to validate code changes automatically. Typically, a mobile pipeline consists of building an app, running unit tests, executing integration or UI tests, collecting reports, and building a release candidate after the required checks pass.
A good pipeline separates tests based on speed and risk. Unit tests might be executed for every pull request. Integration tests might be executed on every merge. A focused UI suite might be executed on each build, while a larger real-device regression suite might be executed once per day or before releasing.
Parallel testing frameworks exist for the major programming languages. These frameworks are designed to run independent tests across multiple devices or environments in parallel. An example of parallel testing is a test suite requiring a real device. Test suites that rely on integration tests can be executed in parallel using test suites that run across multiple emulators or simulators. With test isolation and independent test data, parallel execution is possible.
Flaky collisions and failures lead to unreliable test results. A flaky test provides inconsistent results across repeated test runs. Flaky test results are caused by unstable networks, timing assumptions, test data shared across test runs, animations, and async operations. Do not cover up flaky tests by using infinite retries. Track the failure reason, device, build, test result frequency, and test results.
Take some time to determine the cause of failed tests before assigning blame to personnel. If a test fails repeatedly on the same build and device, investigate the failure further. Check the test results for the account and the state of the backend, as well as the application logs, network activity, and application output.
Review recent DVG log video captures. Run the test on a different build, device, and/or environment to see if the failure is reproducible. If the failure happens only on one device or is intermittent, it could be caused by an API or hardware/software platform failure. A failure that happens after code is changed may indicate a regression, but the cause should be confirmed through investigation.
Begin with revenue, activation, retention, privacy, and compliance workflows.
Cover these workflows at various levels:
Perform fast, localized checks immediately on a code commit to maintain the test velocity. At the time of planned release points, run tests on a larger suite of devices along with performing regression testing. Review failures using evidence instead of labels. The optimal mobile QA strategy combines types of tests, the execution environment, devices, the timing of the pipeline, and the risk of a release.
Once these relationships are known, your glossary is no longer a list of definitions. It can help explain what should be tested and where as well as how failure of a mobile release should be handled.