Friday, April 13, 2012

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’)


That's it. Cheers !!!!!!!!!!!!!!!

6 comments:

  1. Thanks man. This tutorial help me! Please do others!

    ReplyDelete
  2. Hi
    A very good tutorial on monkey runner.Kindly post some tutorials on Robotium.
    I am using Robotium in my current project.I have Phone.apk but while I am trying to install it in Emulator,I am getting a pop-up saying that APK already exist in emulator.Kindly let me know how can I uninstall the Phone.APK(Dialer) from emulator and install mine.Is there any way.

    Thanks
    Saswat

    ReplyDelete
  3. You can install it with adb(android debug bridge) using this command
    adb install -r "path of apk"

    this -r switch is used for reinstall or we can say force install

    ReplyDelete
  4. Saswat Dash Remove the APk using the Package Id of your test Apk.

    ReplyDelete
  5. can you help with how one can setup an environment, i am very new to this interface

    ReplyDelete