monkeyrunner tutorial – Running tests on multiple devices with monkeyrunner

OK.. Great … Now you know what is monkeyrunner and how to run tests with monkeyrunner. Let’s discuss about one important feature of the monkeyrunner tool.

Running tests on multiple devices with a single python script.

It looks like a big ask. But that is as simple as drinking a Sri Lankan Tea …

By following my previous posts

now you are running some scripts with monkeyrunner. Let’s add some little bit of information to that script.

#First you need to import the modules which you are using in this script

from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice

 

#Then you have to connect to the device which you are running your test

device = MonkeyRunner.waitForConnection()

Wait here !!!!!!

In this script you are waiting for a connection to a running android device or emulator implicitly. Rather than doing like that, you can explicitly tell what emulator or device you may need to connect. You can do that like this.

# Timeout value for waiting for connection 10 seconds

timeout = 10000

# Connects to the current device, returning a MonkeyDevice object

device = MonkeyRunner.waitForConnection(timeout, “emulator-5554″)

here you specify which device you need to connect by the id of the emulator or device.

 If you want to connect to another device within the same script, you can do like this

device2 = MonkeyRunner.waitForConnection(timeout, “emulator-5556″)

Then you can do all the operations you have done with device parameter to device2 parameter.

With this kind of scripting, you can run commands on as many devices you have with you. I believe in sample scripts in tutorials. Here is a sample script in action.

# Imports the monkeyrunner modules used by this program

from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice

# Timeout value for waiting for connection

timeout = 10000

# Connects to the current device, returning a MonkeyDevice object

device = MonkeyRunner.waitForConnection(timeout, “emulator-5554″)

# Installs the Android package. Notice that this method returns a boolean, so

# you can test to see if the installation worked.

device.installPackage(‘/home/chanaka/workspace/SimpleIntentPreference/bin/SimpleIntentPreference.apk’)

# sets a variable with the package’s internal name

package = ‘com.chanaka.android.sip’

# sets a variable with the name of an Activity in the package

activity = ‘.SimpleIntentPreferenceActivity’

# sets the name of the component to start

runComponent = package + ‘/’ + activity

# Runs the component

device.startActivity(component=runComponent)

# Wait for few seconds

MonkeyRunner.sleep(2)

# Presses the Menu button

device.press(‘KEYCODE_MENU’, MonkeyDevice.DOWN_AND_UP)

# Wait for few seconds

MonkeyRunner.sleep(2)

#Touch the new status button

device.touch(160, 460, ‘DOWN_AND_UP’)

# Wait for few seconds

MonkeyRunner.sleep(2)

# Connects to the current device, returning a MonkeyDevice object

device2 = MonkeyRunner.waitForConnection(timeout, “emulator-5556″)

# Installs the Android package. Notice that this method returns a boolean, so

# you can test to see if the installation worked.

device2.installPackage(‘/home/chanaka/workspace/SimpleIntentPreference/bin/SimpleIntentPreference.apk’)

# sets a variable with the package’s internal name

package = ‘com.chanaka.android.sip’

# sets a variable with the name of an Activity in the package

activity = ‘.SimpleIntentPreferenceActivity’

# sets the name of the component to start

runComponent = package + ‘/’ + activity

# Runs the component

device2.startActivity(component=runComponent)

# Wait for few seconds

MonkeyRunner.sleep(2)

# Presses the Menu button

device2.press(‘KEYCODE_MENU’, MonkeyDevice.DOWN_AND_UP)

# Wait for few seconds

MonkeyRunner.sleep(2)

#Touch the new status button

device2.touch(160, 460, ‘DOWN_AND_UP’)

# Takes a screenshot

result = device.takeSnapshot()

# Wait for few seconds

MonkeyRunner.sleep(2)

# Writes the screenshot to a file

result.writeToFile(‘/home/chanaka/status_update.png’,’png’)

#Touch the first preference

device2.touch(160, 30, ‘DOWN_AND_UP’)

#Touch the entre button

device2.press(‘KEYCODE_DPAD_CENTER’, MonkeyDevice.DOWN_AND_UP)

# Takes a screenshot

result2 = device2.takeSnapshot()

# Writes the screenshot to a file

result2.writeToFile(‘/home/chanaka/shot1.png’,’png’)

7 thoughts on “monkeyrunner tutorial – Running tests on multiple devices with monkeyrunner

  1. Nice tutorial. Can we make the test device agnostic? How can we simulate key press or slides which can run on phones of different screen sizes.

  2. Hi , I noticed that. You have finished testing one device , then another. Could I simultaneously run the testing on the two devices ?

    e.g. device.touch ;
    device2.touch;
    device.press;
    device2.touch;

    example2: two scripts simultaneously runing test on two devices perspective.

  3. I have a batch file that uses the START command on a windows box that will launch multiple Monkeyrunners against individual devices. if you run Monkey runner against each script independently, the scripts work on each device.

    If you run them simultaneously, the first script will start, but then the second script takes over and sends both sets of keystrokes to the second device. I believe that Monkeyrunner is not Thread safe.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s