Virtual Mobile Devices
The Virtual Mobile Devices is a project of vente-privee Epitech innovation lab. It has been developed by six of our students during their internship at the lab: Clara GIRARD, Nicolas MENETTRIER, Jonathan BIBAS, Clément QUARESMA, Benjamin GUARIGLIA and Guillaume VERNERET ; and their vente-privee mentor Jimmy RAMOS!
But first, What is Virtual Mobile Devices and why ?
Did you ever spend a lot of time trying to borrow a phone for your application’s test? Like, you need a specific model but … too bad, your company doesn’t have this model. Did you ever ask for a phone but someone borrowed it and lost the phone?
Virtual Mobile Devices is vente-privee’ new mobile center and will solve all your problems: it will allow vente-privee’ employees to use smartphones, touchpads, etc., without having to physically borrow them and possibly break or lose them. This will optimize the use of those devices and will also reduce the cost of buying those same devices for each team.
The project is a web application that is accessible, in the first place, by the authorized employees with their active directory account to allow them to easily take control over devices easily. They will be able to upload application that will be installed directly on the device in order to test their applications, preview, etc. … They are several devices available to allow several users at the same time.
The architecture
Project’s architecture is composed by 3 main parts: Client, server manager and servers (or connectors). Those 3 parts interact together thanks to socket.io
Client
The client is made with ReactJS, and is basically structured in two parts : the main page (the device visualization) and the left panel which contains the “Tools” to interact with the device.
In order to access to the project’s website, the user must be enrolled in a MySQL database that is in charge of referencing every authorized users and admins.
Server manager
The server manager is made with NodeJS and is the entity that manages all the different servers where all the devices and emulators are. It’s also the link between the client and the used server that allow the user to upload application in order to use it on the device. It also allows the project to be more scalable, you can plug as much servers as you want.
Servers (connectors)
Servers are made with NodeJS with Express, all devices are plug to a server (Mac OS for iOS devices and Ubuntu for Android devices). Every server is connected to the server manager that redirects the client to the asked device.
We used the Minicap project and Appium in order to control the different devices, Minicap is a C++ open-source project made by sorccu.
On one hand, Appium allows use to send the different events triggered by the user on the chosen device. Appium is also used to give the full control of the device: just like if it was in your hands.
On the other hand, we use Minicap to retrieve the video stream of the device in an optimized way.
Emulator
Virtual Mobile Devices also allows the user create emulators of every possible models of phone and touchpad.
This feature avoids to acquire all potential device configurations and models. We used avdmanager to deal with emulators, when an admin create an emulator, the information is (again) send by socket to the first available server that will create the asked emulator on itself and refresh the client’s device list to allow the client to use the newly created emulator.
The emulator works just like any other device with Appium and Minicap, so we’re able to interact with it normally.
These virtual images can only be created by admins in order to avoid tons of them: emulators requires a lot of RAM, so administrators will be in charge of limiting RAM overload.
How does the different parts interact together?
As you can see in this story, we use sockets! Thanks to socket.io, all those different parts are able to communicate.
Let’s take the basic example of a touch event: First, when the client detect a mouse click, it will send the information with the selected device event (here, a touch event with the correct x and y value). This information will go straight to the server manager which will forward this signal to the correct server.
In the server, the information is treated and the Appium library will be used to transform this event into an action made directly on the phone. We use this pattern for every device event.
Virtual Mobile Devices in a nutshell
Virtual Mobile Devices is the new mobile center that will be used by vente-privee’s employees in order to avoid the different issues with real devices (having to borrow them, possibly lose them, break them, etc…) . It will appear as a website that allows you to control a phone remotely and test all the possible application you want. It also grant you the possibility of using an emulator in case of the phone is not available as a real device.
We are planning to install test tools by default in order to simplify test on applications with Gherkin scenarios.