A quote from Tim Cook says- “When you care about people’s happiness and productivity, you give them what brings out the best in them and their creativity. And if you give them a choice, they’ll say, ‘I want an iPhone,’ or ‘I want a Mac.’ We think we can win a lot of corporate decisions at that level.”
This says a lot about the love for the iPhone we all have! So how do the testing community ensure that this love for iPhone and iOS apps grows manifolds with time? True! With quality testing and automation, we can ensure the iPhone provides the best experience to its loyal users.
In this article, we will be looking at mobile testing for iOS. More specifically, 5 types of tests that are recommended to be automated if you are doing iOS testing.
1. Unit Testing
Unit testing is really important for an application because we test the smallest units or components in it. We test an independent module in isolation during unit testing. These are small tests where the input is provided to the small unit of the app and the output is checked against the expected values.
Since they are small tests they can be executed quickly in less time. However, unit tests are the most ignored tests when it comes to app testing. If utilized properly they help in reducing the defects immensely because the bugs are caught at the unit level itself.
Therefore, unit tests are the ideal candidates for automation because they execute quickly and are huge in number. Usually, the unit tests are the specific condition in a class, where the class is independent of other classes. Unit tests provide documentation of the testing at the unit level and hence during any code changes we know already which code may cause issues.
Swift is a modern and latest programming language for writing code for macOS, iOS, watchOS, etc. It is safe, fast, compatible, open-source, and easy to learn. To write Swift code we use an IDE(Integrated Development Environment) or toolkit called Xcode, they both are backed by Apple.
Interestingly, Xcode provides a testing framework called XCTest to write unit tests, performance tests, and UI tests. The test cases are defined using the primary class – XCTestCase, while the test cases are managed and executed using the abstract base class – XCTest.
The test cases are run and asserted(checked) against the expected results. A few of the assertions used in XCTest are:
- Boolean assertions
- Nil/ Non-Nil assertions
- Equality assertions
- Error assertions
- Comparable value assertions
Rare conditions are better tested using unit testing. Example: Consider an e-commerce app that is running an offer of providing 50% off on the next order to the customer. To win this offer, the customer should have bought 1000 orders from the app.
To test this, the tester should either manually place 1000 orders and wait if the customer receives a 50% off or not. Or just run an automated unit test to check the results are as expected.
2. UI Testing
User Interface testing is vital for the success of any app, be it Android or iOS. In UI testing, we test the visual behaviour of the application during user interaction. iOS-based gestures, user interactions, screen rotation, text input, buttons, etc, should work as expected on the iOS app. Unlike unit tests which are tested in isolation, UI testing is performed on the integration of the multiple classes.
The common frameworks and tools for performing automated UI testing on iOS are – UIAutomation, Testsigma, XCTest, MonkeyTalk, KIF, etc.
We should automate the UI testing due to the below reasons:
1. Saves time– Manual testing is time-consuming and we want to save our precious time to do some other useful stuff like – exploratory testing, ad-hoc testing, etc.
2. Documented testing– With automation testing tools/frameworks, it is easier to have the whole testing process documented with screenshots, reports, test results, test run time, etc. We can use these documented statistics to improve the testing and application performance.
3. Testing on real devices– These automation testing tools, provide access to thousands of real devices to run test cases. Particularly in the case of iOS, we would want the test cases to be run and the application tested on actual real devices.
4. Parallel testing– Automated testing tools provide the privilege of testing the iOS app on multiple devices in parallel. This helps us in wrapping up the testing tasks quickly.
Screen orientation (portrait, landscape) related testing is really important when we are talking about UI testing. Example: A new functionality is added in a gaming iOS application and is unit tested successfully. Next, regression testing is performed on the app using an automation tool to detect any regression bugs.
It is observed that when the layout is changed from landscape to portrait during the game then the application crashes unexpectedly. Such layout related issues can be detected during automated UI testing.
3. Compatibility Testing
During compatibility testing of an application, we check the compatibility of the application with multiple devices, hardware, software versions, network, operating systems, and browsers, etc. During backward compatibility testing we will ensure that the latest application version is compatible with the older devices/ browsers/ hardware.
Similarly, during forward compatibility testing, we ensure that the latest application version will be compatible with the new patches and updates to the device software.
Types of compatibility testing
1. Operating System
The application should work on all intended Operating Systems and their versions – Android, iOS, Mac OS X, Windows, etc. Here we are talking about iOS, so the app should work on all common iOS versions, providing backward and forward compatibility.
We would want the iOS app to work on all probable and commonly used hardware configurations like- memory, device-specific hardware, camera, etc.
The app should support the software components like APIs, videos, voice, images, etc. present on the device without undergoing any application crash or hanging.
Safari is the native browser for all Apple products, however, we can use Google Chrome, Edge, Firefox, Opera Touch, Dolphin, etc. on an iOS device. Therefore, we would want to test all the possible alternatives of the browsers for our iOS application.
We would want our iOS app to be compatible with other external devices like printers, memory cards, scanners, speakers, GPS, USB devices, etc.
The iOS app should work well on the networks of different bandwidths, speeds, data transfer rates, etc.
An iOS movie streaming application should be compatible with all the Apple devices- iPhone, iPad, Apple TV, iPod Touch, and their different versions. We can achieve this by testing the compatibility of the streaming application on all these devices using cloud-based automation tools. Such tools provide thousands of real devices to test the application.
4. Continuous Integration
The software world is following Agile and DevOps rigorously today. We cannot think about software development without these, and therefore it is imperative to have mobile app testing follow suite. Continuous Integration helps in providing early feedback, quick delivery, and better quality without any manual intervention.
CI/CD pipeline works on the strong base of various automation tools. We are using Jenkins and other CI/CD tools to trigger testing whenever a new build is pushed in web application development.
How do we achieve the same impact in mobile app testing? Many automation tools support integration with Jenkins to provide the Continuous Integration and testing of the iOS app. E.g. Testsigma
Read more details and benefits of Continuous Integration and Testing here.
Continuous testing requires help from automated tools like – GitHub as a repository, Jenkins as CI tool, XCTest for unit testing, etc. CI/CD helps in delivering applications more frequently by the use of extensive automation throughout the application development cycle.
Whenever a piece of code is pushed in the repository the unit tests are supposed to run automatically. We cannot think of CI/CD without automation tools. For example, the security of the iOS application, signing the application code with proper certificates and entitlements can be taken care of by automation easily.
5. Regression Testing
During software development, regression testing has always been the best candidate for automation. We do not want our application to break after new enhancements and feature development. So how can we ensure that the app is intact and in great shape? By running automated regression tests after every change.
By automating the regression tests we can run them in the nightly cycle without manual intervention when everyone is off work. This helps in reducing the testing time and provides faster delivery of the software. The same holds for iOS apps. E.g., We can use XCode’s XCTest to perform regression test cases.
Proper maintenance of the regression suite- by adding relevant test cases and removing the obsolete test cases is required. This way we can benefit from the automated regression test cases to the maximum.
Whenever a new version of the iOS operating system is released, the customers want their mobile apps to work efficiently on it. We do not want to upset the customers just because our iOS app is not able to function on the newly released iOS version.
Therefore, it is the most important scenario where we need to run the regression test suite through automation tools. This instils a sense of confidence among the developers and testers, regarding the mobile application.
Can we skip the testing for iOS devices if the application is already tested on Android? Absolutely no! We need to test the app on both environments separately. We can leverage the help of automated testing tools and frameworks for mobile like Testsigma to speed up the testing and provide a quality product to the end-users.
Testsigma, an automated testing tool, has transformed the automation world in mobile by making it easy for real. Check out how to automate your test cases on a native iOS application with Testsigma.
Try out the easy way to automate your test cases on mobile devices