Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I deliver parameters to a test function, that launched using adb shell am Instrumentation command

I am developing in Android, I am using instrumentation to test Phone application. Instrumentation is Android env to test applications.

For that I use am command with name of test case. I run adb, then I enter adb shell, then write in shell the am command.

I wish to deliver a parameter together with this am command. I mean that I wish to deliver parameters to the test launched by the am command.

Is it possible ??? Please help ?

like image 327
ilana Avatar asked Jul 12 '10 11:07

ilana


People also ask

What is adb shell scripting?

Android Debug Bridge (adb) is a versatile command-line tool that lets you communicate with a device. The adb command facilitates a variety of device actions, such as installing and debugging apps, and it provides access to a Unix shell that you can use to run a variety of commands on a device.


2 Answers

you can pass a data uri, mime type and even "extras" to the am command.

am [start|instrument]

am start [-a <action>] [-d ]
[-t <mime_type>] [-c <category> [-c <category>] ...]
[-e <extra_key> <extra_value>
[-e <extra_key> <extra_value> ...]
[-n <component>] [-D] [<uri>]

am instrument [-e <arg_name> <arg_value>] [-p <prof_file>] [-w] <component>

You could pass them as "extras" and then get the extras that are passed to it.

You would pass them like this:

am start -a android.intent.action.VIEW -c android.intent.category.DEFAULT    -e foo bar -e bert ernie -n my.package.component.blah 

then in your code:

Bundle extras = this.getIntent ( ).getExtras ( );  if ( extras != null ) {   if ( extras.containsKey ( "foo" ) ) {     Log.d ( "FOO", extras.getString ( "foo" ) );   } else {     Log.d ( "FOO", "no foo here" );   }      if ( extras.containsKey ( "bert" ) ) {     Log.d ( "BERT", extras.getString ( "bert" ) );   } else {     Log.d ( "BERT", "Bert is all alone" );   } } else {   this.setTitle ( "no extras found" ); } 
like image 78
Ryan Conrad Avatar answered Sep 22 '22 09:09

Ryan Conrad


Pass the paramater in: (e.g., -e peerID SCH-I545)

adb -s 0915f98870e60701 shell am instrument -w -e class      /
com.example.android.testing.uiautomator.BasicSample.sendInvite /
-e peerID SCH-I545 /
com.example.android.testing.uiautomator.BasicSample.test/android.sup /
port.test.runner.AndroidJUnitRunner

In the test class:

{
    Bundle extras = InstrumentationRegistry.getArguments();
    String peerID = null;

    if ( extras != null ) {
        if ( extras.containsKey ( "peerID" ) ) {
            peerID = extras.getString("peerID");
            System.out.println("PeerID: " + peerID);
        } else {
            System.out.println("No PeerID in extras");
        }
    } else {
        System.out.println("No extras");
    }
}
like image 27
Tony Nutter Avatar answered Sep 22 '22 09:09

Tony Nutter