如何将参数传递给使用 adb shell am Instrumentation 命令启动的测试函数

发布于 2024-09-09 21:42:32 字数 235 浏览 2 评论 0原文

我正在 Android 中开发,我正在使用仪器来测试电话应用程序。 Instrumentation 是用于测试应用程序的 Android 环境。

为此,我使用带有测试用例名称的 am 命令。 我运行 adb,然后进入 adb shell,然后在 shell 中写入 am 命令。

我希望与此 am 命令一起传递一个参数。 我的意思是我希望将参数传递给 am 命令启动的测试。

是否可以 ??? 请帮忙?

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 ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

无人问我粥可暖 2024-09-16 21:42:32

您可以将数据 URI、mime 类型甚至“附加内容”传递给 am 命令 。您可以将它们作为“附加项”传递,然后获取传递给它的附加项。

与附加功能相关的可用选项有:

  • -e | --es extra_key extra_string_value:将字符串数据添加为键值对。
  • --ez extra_key extra_boolean_value:将布尔数据添加为键值对。
  • --ei extra_key extra_int_value:将整数数据添加为键值对。
  • --el extra_key extra_long_value:以键值对的形式添加长数据。
  • --ef extra_key extra_float_value:将浮点数据添加为键值对。
  • --eu extra_key extra_uri_value:将 URI 数据添加为键值对。
  • --ecn extra_key extra_component_name_value:添加组件名称,该名称被转换并作为 ComponentName 对象传递。
  • --eia extra_key extra_int_value[,extra_int_value...]:添加整数数组。
  • --ela extra_key extra_long_value[,extra_long_value...]:添加一个长整型数组。
  • --efa extra_key extra_float_value[,extra_float_value...]:添加浮点数数组。

你可以像这样传递它们:

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

然后在你的代码中:

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");
}

You can pass a data URI, mime type and even "extras" to the am command. You could pass them as "extras" and then get the extras that are passed to it.

The available options related to extras are:

  • -e | --es extra_key extra_string_value: Add string data as a key-value pair.
  • --ez extra_key extra_boolean_value: Add boolean data as a key-value pair.
  • --ei extra_key extra_int_value: Add integer data as a key-value pair.
  • --el extra_key extra_long_value: Add long data as a key-value pair.
  • --ef extra_key extra_float_value: Add float data as a key-value pair.
  • --eu extra_key extra_uri_value: Add URI data as a key-value pair.
  • --ecn extra_key extra_component_name_value: Add a component name, which is converted and passed as a ComponentName object.
  • --eia extra_key extra_int_value[,extra_int_value...]: Add an array of integers.
  • --ela extra_key extra_long_value[,extra_long_value...]: Add an array of longs.
  • --efa extra_key extra_float_value[,extra_float_value...]: Add an array of floats.

You would pass them like this:

adb shell 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");
}
北方的巷 2024-09-16 21:42:32

传递参数:(例如,-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

在测试类中:

{
    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");
    }
}

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");
    }
}

要发送额外的值,您应该添加 -n(Component) 来使用 -e 发送额外的值,

这里是发送多个键值的示例,

adb shell am start -n com.example.jk.checkwifi/.MainActivity -e "imei" $myimei -e "ip" $IP

然后在活动中获取数据,在 onCreate 中像这样

ip = intent.getStringExtra("ip")

to send extra value you should add -n(Component) for sending extra value with -e

here is the sample to sent multiple key-value

adb shell am start -n com.example.jk.checkwifi/.MainActivity -e "imei" $myimei -e "ip" $IP

then to get data inside activity, get like this inside onCreate

ip = intent.getStringExtra("ip")
清晨说晚安 2024-09-16 21:42:32

确切地说是:

 ./adb shell am start -a android.intent.action.VIEW -c android.intent.category.DEFAULT -e user_id 1 -n com.shortcut.activity/com.shortcut.activity.SelectCardActivity

com.shortcut.activity/com.shortcut.activity.SelectCardActivity -> uir 到您的主课程活动启动应用程序。
将传递给您的应用程序参数 user_id = 1
在 SelectCardActivity 类中,您可以得到如下结果:

  Bundle installparams = this.getIntent ( ).getExtras ( );

exactly is:

 ./adb shell am start -a android.intent.action.VIEW -c android.intent.category.DEFAULT -e user_id 1 -n com.shortcut.activity/com.shortcut.activity.SelectCardActivity

com.shortcut.activity/com.shortcut.activity.SelectCardActivity -> uir to your main class activity start app.
will pass to your app param user_id = 1
and on class SelectCardActivity you get it as bellow :

  Bundle installparams = this.getIntent ( ).getExtras ( );
_失温 2024-09-16 21:42:32

由于您已经在使用 Android sdk,并且知道 sdk 在系统上的位置 -
转到终端上的 sdk 位置(命令提示符)->输入 adb shell ->输入 am 帮助

示例
http://whenpridefucks.blogspot.in/2011 /12/android-send-broadcast-intents-via-adb.html

Since you are already working on Android sdk, given you know the sdk location on your system -
Go to sdk location on terminal(command prompt)-> type adb shell -> type am help

with example
http://whenpridefucks.blogspot.in/2011/12/android-send-broadcast-intents-via-adb.html

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文