Testing a mobile app is an important step in the software development lifecycle, but it's often overlooked. Software engineers often receive requests for features that the customer wants from their product owner. The engineers' primary focus is creating the features and ensuring that the customer get their deliverables on time. However, due to the pressure from all sides, they may compromise on the quality of the code.
There are two ways to validate a mobile application's quality. One is by using automated tests written by the developers, and the other is by using manual or automated regression tests from the quality assurance team.
In this post, you'll learn about testing a mobile application. By the end of this post, you'll have learned in detail about the following:
- Unit testing
- Regression testing
- The differences between unit and regression testing
- When to use either unit or regression tests
Introduction to Testing
The purpose of software testing is to validate that the application meets the acceptance criteria and that the actual results match the expected results. There are two main approaches when it comes to mobile application testing, manual testing, and automated testing.
Manual testing
Manual testing is a technique where the quality assurance team or the software engineer runs the mobile app on a real phone or emulator to check whether it meets the requirements. They check different app functionalities and features following written test scenarios.
If the app crashes during a test, they check the crash reports to see what went wrong and then report to the engineering team. With this approach, however, testing becomes cumbersome as the developers add more features, and code is more error prone.
Automated testing
Automated testing is a technique that verifies that the program meets user requirements by using test scripts. Mobile automated tests are written using frameworks like JUnit in Android or XCTest for iOS or Cucumber for regression tests. Software engineers run these automated test scripts on an integrated development environment (IDE) or CI/CD pipeline.
What Is a Unit Test?
Software developers write unit test scripts for a single unit of code to ensure it meets the user requirements. For example, in a banking app, a balance inquiry query test script would be separate from a bank statement test script. Unit tests are part of the software development life cycle and are sometimes written before the software engineer starts writing code in test-driven development (TDD).
When software engineers fail to write unit tests, manual testing becomes more cumbersome and repetitive as the app grows.
What is Regression Testing?
Regression tests focus on existing functionality. They ensure that the mobile app still works as expected after adding new features. The quality assurance team makes sure that no functionality breaks and that prior features still work as expected. For example, if the developers added a new feature to allow the user to request a loan, the quality assurance team validates that the balance query and bank statement functionalities still work as expected on the organizations' test servers.
The main goal of regression testing is to find and identify bugs before they get to production. Regression testing happens on the company's test servers before the new features get to production. If no bugs are found or after the software engineers fix the reported bugs, the company then releases the new features to end users.
Now that you have learned about mobile testing and the two main ways to test (manual and automated testing), in the section below you'll learn when to use either unit or regression tests.
When to Use Unit Tests or Regression Tests
You should use regression tests when you need to validate that the app still performs well with additional functionality, while unit tests validate the functionality of individual features.
Software engineers write unit tests before implementing the new features, while testers perform regression tests after the software engineers implement new features but before releasing the features to end users.
Unit tests and regression tests are both used in behavior-driven development (BDD) and TDD.
Teams use unit tests and regression tests together when they have a CI/CD pipeline enabled. Whenever the software engineers push new code to the Git repository, the unit and regression test cases will run, and you'll see which tests fail in the logs.
Now that you've learned about the use cases for unit and regression tests, in the next section you'll learn the differences between unit and regression tests.
Differences between Unit Tests and Regression Tests
Unit and regression tests differ in the following ways:
- The test team writes regression tests, while software developers write unit tests.
- Unit tests are automated, while regression tests can either be manual or automated.
- Both the technical and non-technical teams understand regression tests, while unit tests can only be understood by the technical team.
- Software engineers write unit tests using Junit or XCTest testing frameworks for Android and iOS apps. Regression tests, on the other hand, use Cucumber, Mspec, and Specflow frameworks to write automated tests.
- Test engineers can run automated regression tests on an IDE or using CI/CD pipelines, while software engineers run automated unit tests using either using an IDE or a CI/CD pipeline.
- Unit tests validate a single piece of code, while regression tests make sure the app still works as a whole when software engineers introduce new changes.
- Regression tests focus on validating that the existing system still works as expected, while unit tests validate new features.
Using Waldo to Perform Automated Tests
Waldo is the world's first no-code testing platform that lets anyone create reliable, automated mobile tests without the hassle of scripting.
With Waldo, you can do the following:
Create a functional test. Waldo ensures that users can go from point A to B on any given flow and version.
Create UI and text assertions. Customize each functional test by defining criteria at each step of the way to make sure the UI displays as designed.
Chain tests together. Use dependencies to make your flows modular so you can maintain them easily and make them more reliable.
Find bugs. Use the Waldo dashboard to quickly access your results, precisely locate problems, and download app logs or crash reports to find a solution.
CI integration. Integrate Waldo in your CI to run your tests automatically each time you merge a PR to master.
Integrations. Receive your results directly on Slack and on GitHub.
Multi-device: Record your tests on one device and then replay them on different screen sizes and OS versions without needing to rerecord them.
Multi-language. Run your recorded tests in multiple languages.
Camera/Photo Gallery/Photos. Test flows that involve the camera directly from Waldo.
In-app purchase. Test your subscriptions and in-app purchases directly from Waldo.
Deep links. Test your flows with deep links.
Concurrency. Runs your suite in parallel to generate faster test results for your team.
Conclusion
Waldo provides a number of advantages for mobile testing, making it easier to use for testing compared to traditional automated testing. Waldo is fast. It can create functional UI test cases that you can chain together. It also makes it easier to find bugs since it integrates with various CI/CD platforms.
Automated E2E tests for your mobile app
Get true E2E testing in minutes, not months.