The explosion of mobile apps and the pursuant 'appification' of the world has brought an intense focus on software testing. The consumer of today is extremely conversant with app experiences. As a result, mobile app developers are constantly being challenged to deliver elevated experiences.
Moreover, the testing teams have to work harder to find impediments that could hamper these. In fact, testing is becoming all the more crucial as security becomes a top-of-the-mind concern.
To that end, tools like Appium assist testing teams in accelerating their testing efforts and increasing testing velocity. Appium supports Android and iOS on real devices as well as simulators and emulators. It's also compatible with Selenium WebDriver. Some of the major benefits that Appium brings to testing are:
- It is open source and free. Further, it does not need any additional installation on a device to support it.
- Provides support to multiple programming languages such as Java, Python, PHP, C#, etc. As a result, it makes itself more user-friendly in the developer community
- Compatibility with Selenium WebDriver ensures that all the Selenium features are available in Appium.
- Provides a record and playback tool and allows the use of Inspectors to accelerate testing efforts through record and playback functionality
- Allows easy integration with most CI tools such as Jenkins, Bamboo, etc. Moreover, it allows automated triggering of tests during release cycles.
- Enables easy test creation and allows a single Appium test to run on multiple devices and OS versions.
Appium 2.0 - Ready for the New World
Appium started out as a command-line-based testing service designed mainly for native, hybrid, and web applications with a focus on Android and iOS apps. They released the first major version around seven years ago. While they have rolled out several new features and evolved their backend automation architecture, Appium 2.0 is its major release after a long time.
Some of the key feature highlights that Appium 2.0 promised to bring about are:
Appium drivers (UIAutomator2 driver, XCUITest driver, Espresso Driver, etc.) have been tightly coupled with Appium Server until now. With the new update, these drivers get separated from the Appium Server and can be installed separately depending on user requirements. This feature also creating custom drivers for any new platform or special use cases easier.
The update simplifies the overall installation process. Users also get the flexibility to choose to upgrade drivers without updating the server itself. These drivers can further be used privately on the existing Appium driver's template. As such, they give developers the flexibility to:
- Create drivers for the open-source community
- Use them privately, or
- Sell them as customized drivers.
A variety of use cases require special commands or unique ways to alter how Appium behaves to reach certain specific commands. With the new update, Appium offers plugins to manage the various use cases that demand a change to the default Appium behavior.
With this change, users can easily build new plugins and add arbitrary functionality before or after actual Appium commands. The plugins can also come in handy to modify the Appium Server to introduce new commands and distribute them.
Many new plugins are expected to be introduced with Appium 2.0. This will help address many complex use cases and problems that were hard to solve before.
Installing Appium 2.0
Since Appium 2.0 is not currently the main line of Appium development, it cannot be installed with a simple npm install -g Appium. There are special beta versions with a special NPM tag next that can be employed to install Appium on any platform using NPM using a simple command as follows:
npm, install -g appium@next
The Appium drivers also need installation once the upgrade to Appium 2.0 takes place. Upon installing Appium 2.0, the "appium driver" command can be used to install the drivers. Appium 2. x does not include any drivers by default, and users can choose the drivers they want to use instead.
It is possible to remove and update these drivers when necessary without the need for making any changes to the version of Appium.
Some of the commands you could use to install the XCUITest, and UiAutomator2 drivers include:
appium driver install xcuitest
appium driver install uiautomator2
Those not installing one of Appium's "official" drivers also have the option to use the --source option to tell the driver install command where to find the driver that they want to install. The --source option tells Appium how it should treat the included Install Specs and creates the possibility of installing drivers from anywhere.
They can also use a --package option for drivers where the source is something other than npm. All it needs is the name of an official driver, as found in the Appium driver list.
The Appium drivers' list provides a centralized repository of all the drivers that have been installed and that could be installed as well. All installed drivers will display their version and the source involved in installing them. This driver list is useful to check for updates, and it is possible to install all installed drivers in one go.
Appium also does not allow updating a driver across a major version boundary and keeps it safe from breaking changes. After the completion of the due diligence on any breaking changes with the next major version of a driver, the upgrade takes place as follows:
appium driver update --unsafe
Furthermore, Appium creates a hidden directory called .appium in the user's home directory. However, users can also use different directories or keep multiple driver repositories around.
With the new release and all the updates, Appium takes care of some of its major challenges and becomes an attractive tool as it overcomes the hassles of a pre-set bundling issue. The new version aims to make the lives of testers easier.
However, with Appium 2.0, Appium aims to evolve from being a tool and automation library to a platform for a whole automation ecosystem spanning devices and platforms and frameworks and everything else in between.