Alternative to Selenium grid for running appium tests in parallel

Are you using or planning to use selenium grid for parallel test run on mobile devices?
If you are, how easy and maintainable is the whole setting up process?

Before we move any further and discuss an alternative approach, let’s go back to the basics and think of what we really need for running tests in parallel?

  • A mechanism to be able to launch more than one appium server instances
  • Being able to bind devices to these servers.
  • A way to distribute tests on these devices, distributed or fragmented.

Selenium grid does all of this but not without its own share of issues, the most important being the fact that whole setup is static. You have to know device details and a bunch of configurations(port number, bootstrap port number etc) in advance to be able to setup and proceed.

So we set out to build a tool that is much more dynamic and elegant when it comes to running your tests in parallel across multiple mobile devices. And we called it Optimus, an open source testing framework built using appium. It supports parallel test runs out of the box among a variety of other promising features.

Some clear benefits of Optimus over the old school selenium grid way:

Selenium Grid Optimus
The whole setup is static. Appium server instances are created in advance and devices are attached to these instances. Dynamically starts Appium server instances and can attach any available devices at runtime based on user configuration.
You need to manually configure port numbers, device udid etc. Ports and devices are picked up dynamically. You just need to connect devices, rest all is taken care of.
An appium server crash would not allow any further tests to run on that thread/instance. Tests run in a container of their own with each test having its own appium server instance. An appium server crash doesn’t disrupt subsequent test runs.
Configuring run modes (distributed or fragmented) is not that straight forward. Separate task pre configured to trigger parallel run in either of distributed or fragmented modes.

Project github link:


heavy lifting done…good work