Is "Monkey Runner" useful for testers to prepare test cases directly in Android applications?

Sushilareddy picture Sushilareddy · Mar 15, 2011 · Viewed 7k times · Source

I have gone through the "Monkey Runner" for the following link http://developer.android.com/guide/topics/testing/testing_android.html It has so much Java code. I am not able to under stand the code to create test cases. Is it only for developers, or the testers to test the application thoroughly. Is there any other pattern for creating test cases through code? Can any one suggest me about the same.

Thank you.

Answer

Boris Ivanov picture Boris Ivanov · May 6, 2011

Have a look at my MonkeyRunner code. Should be easier then Java. Change path to save file, and replace phone number. I had only 1 problem. Cant Hangup a call.

#! /usr/bin/env monkeyrunner
    '''
    Created on Apr 1, 2011

    @author: sj
    '''

    import sys

    # import the MonkeyRunners modules used by this program
    from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage







    def browse(d):
        d.broadcastIntent("http://www.google.com/", "ACTION_MAIN")
        #d.startActivity(component="com.android.browser/.BrowserActivity")

    def debug(device):
        print" package:%s" % device.getProperty('am.current.package')
        print" action:%s" % device.getProperty('am.current.action')
        print" comp.class:%s" % device.getProperty('am.current.comp.class')
        print" comp.package:%s" % device.getProperty('am.current.comp.package')
        print device.getProperty('display.width'), device.getProperty('display.height')

    def screenshot(d):
        MonkeyRunner.sleep(1.0)
        result = d.takeSnapshot()
        MonkeyRunner.sleep(1.0)
        result.writeToFile('/yourPath/device.png', 'png')  

    def call(d):

        d.startActivity(component="com.android.contacts/.TwelveKeyDialer")
        print "Start Activity"

        MonkeyRunner.sleep(1.0)

        d.type("+XXXXXXXX")

        # Call number.
        print "Call"
        d.touch(190, 800, 'DOWN_AND_UP');
        # not working device.press('KEYCODE_CALL', 'DOWN_AND_UP')

        print "Wait 10 sec"

        MonkeyRunner.sleep(10.0)

        # HangUp Call
        #device.press('KEYCODE_ENDCALL', 'DOWN_AND_UP')

        print "Hang Up"
        #x1 = 215
        #x2 = 230
        #y = 700
        #start = (x1,y)
        #end = (x2, y)
        #steps = 2
        #pause = 0.2
        #device.drag(start, end, pause, steps)

        d.startActivity(component="com.android.phone/.InCallScreen")
        #device.touch(230, 700, "DOWN");
        MonkeyRunner.sleep(1.0)
        #device.touch(230, 700, "UP");

        d.touch(230, 700, 'DOWN_AND_UP');
        #device.touch(270, 650, 'DOWN_AND_UP');


    def main():
        print "Start"

        # Connect to the current device returning the MonkeyDevice object
        device = MonkeyRunner.waitForConnection()

        #MonkeyRunner.alert("Starting Activity", "monkeyrunner", "OK")

        if not device:
            print "Couldn't get connection"
            sys.exit()

        print "Found device"

        #call(device)
        browse(device)
        debug(device)
        screenshot(device)


        device.press('KEYCODE_ENDCALL', 'DOWN_AND_UP')

        MonkeyRunner.sleep(10.0)




    if __name__ == '__main__':
        main()