Tuesday, April 10, 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

http://chanakaudaya.wordpress.com/2012/03/31/android-testing-with-monkeyrunner-a-monkeyrunner-tutorial/
http://chanakaudaya.wordpress.com/2012/03/31/android-testing-with-monkeyrunner-a-monkeyrunner-tutorial-part-ii/

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

No comments:

Post a Comment