使用命令提示符运行带有参数的检测测试

时间:2018-09-24 07:26:57

标签: android android-testing android-instrumentation

我有一个InstrumentedTest

url

我想使用@RunWith(AndroidJUnit4.class) public class ExampleInstrumentedTest { @Test public void useAppContext(String groupName) { Context appContext = InstrumentationRegistry.getTargetContext(); UiDevice device=UiDevice.getInstance(getInstrumentation()); ... ... } } 命令执行它。但是我必须为方法adb shell

传递参数groupName的值

我正在使用命令

useAppContext(String groupName)

但是如何将方法参数作为参数传递给在命令提示符下运行的命令?

2 个答案:

答案 0 :(得分:1)

Ref:How to pass an argument to an AndroidTestCase?

public class MyTestRunner extends InstrumentationTestRunner {

    public static String BAR;

    public void onCreate(Bundle arguments) {

        if (null != arguments) {    
            BAR = (String) arguments.get("foo"));
        }    
        super.onCreate(arguments);
    }
}

我已添加到Android.mk:

LOCAL_JAVA_LIBRARIES := android.test.runner

并转到AndroidManifest.xml:

<instrumentation 
    android:name="com.example.MyTestRunner"
    android:targetPackage="com.example" />

使用以下命令行运行它:

adb shell am instrument -w -e foo the_value_of_bar com.example/com.example.MyTestRunner

编辑2

这听起来像参数化的JUnit Test用例。

请查看简短的教程here-请注意,您将需要使用JUnit4,但我不确定Android的测试框架已准备就绪。

也就是说,JUnit4向后兼容JUnit3,因此从理论上讲,可以在android测试用例运行器下使用JUnit4批注,并带有一些构建路径。

答案 1 :(得分:1)

一个人可以使用adb am instrument传递参数:

adb push ./app/build/outputs/apk/debug/com.<package_name>-debug.apk /data/local/tmp/com.<package_name>.debug
adb shell pm install -t -r "/data/local/tmp/com.<package_name>.debug"
adb push ./app/build/outputs/apk/androidTest/debug/com.<package_name>-debug-androidTest.apk /data/local/tmp/com.<package_name>.debug.test
adb shell pm install -t -r "/data/local/tmp/com.<package_name>.debug.test"
adb shell am instrument -w -r -e debug true -e class 'com.<package_name>.ExampleInstrumentedTest' com.<package_name>.debug.test/android.support.test.runner.AndroidJUnitRunner
Waiting for application to come online: com.<package_name>.debug.test | com.<package_name>.debug
Connecting to com.<package_name>.debug

最好使用TestRule模拟参数输入。

一个人同样可以通过android.testInstrumentationRunnerArguments.class

./gradlew app:connectedAndroidTest -P android.testInstrumentationRunnerArguments.class=com.<package_name>.ExampleInstrumentedTest#someMethodToTest

或通过其他类似的参数

-Pandroid.testInstrumentationRunnerArguments.argument1=make_test_fail

一个人可以同时运行整个测试组(例如EspressoTest):

./gradlew app:connectedAndroidTest -Pandroid.testInstrumentationRunnerArguments.class=com.example.android.testing.blueprint.ui.espresso.EspressoTest

请参见Android Testing Blueprint