Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何从CI启动APK测试?_Android_Gradle_Android Uiautomator - Fatal编程技术网

Android 如何从CI启动APK测试?

Android 如何从CI启动APK测试?,android,gradle,android-uiautomator,Android,Gradle,Android Uiautomator,我有一个CI服务器来从GIT构建APK,它工作得很好 我需要对CI服务器生成的构建启动自动测试(UI自动机)。为了实现这一目标,我: 通过命令gradlew assembleDebug设置CI服务器以使用测试构建APK。我还尝试使用gradlew assembleDebug-Pandroid.injected.signing.store.file=/path/to/keystore.jks-Pandroid.injected.signing.store.password=password1-Pa

我有一个CI服务器来从GIT构建APK,它工作得很好

我需要对CI服务器生成的构建启动自动测试(UI自动机)。为了实现这一目标,我:

  • 通过命令
    gradlew assembleDebug
    设置CI服务器以使用测试构建APK。我还尝试使用
    gradlew assembleDebug-Pandroid.injected.signing.store.file=/path/to/keystore.jks-Pandroid.injected.signing.store.password=password1-Pandroid.injected.signing.key.alias=myapp-Pandroid.injected.signing.key.password=password2

  • 尝试使用命令
    adb.exe shell am instrument-w-r-e debug false-e package com.mysite.myapp.com.mysite.myapp.test/com.mysite.myapp.runner.MyCustomTestsRunner启动它

  • 没有运气。我得到一个错误:

    java.lang.SecurityException: Permission Denial: starting instrumentation ComponentInfo{com.mysite.myapp.test/com.mysite.myapp.runner.MyCustomTestsRunner} from pid=4922, uid=4922 not allowed be
    cause package com.mysite.myapp.test does not have a signature matching the target com.mysite.myapp
            at android.os.Parcel.createException(Parcel.java:2071)
            at android.os.Parcel.readException(Parcel.java:2039)
            at android.os.Parcel.readException(Parcel.java:1987)
            at android.app.IActivityManager$Stub$Proxy.startInstrumentation(IActivityManager.java:5441)
            at com.android.commands.am.Instrument.run(Instrument.java:512)
            at com.android.commands.am.Am.runInstrument(Am.java:196)
            at com.android.commands.am.Am.onRun(Am.java:80)
            at com.android.internal.os.BaseCommand.run(BaseCommand.java:56)
            at com.android.commands.am.Am.main(Am.java:50)
            at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
            at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:338)
    INSTRUMENTATION_STATUS: Error=Permission Denial: starting instrumentation ComponentInfo{com.mysite.myapp.test/com.mysite.myapp.runner.MyCustomTestsRunner} from pid=4922, uid=4922 not allowed b
    ecause package com.mysite.myapp.test does not have a signature matching the target com.mysite.myapp
    INSTRUMENTATION_STATUS: id=ActivityManagerService
    INSTRUMENTATION_STATUS_CODE: -1
    Caused by: android.os.RemoteException: Remote stack trace:
            at com.android.server.am.ActivityManagerService.startInstrumentation(ActivityManagerService.java:15744)
            at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:2350)
            at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2741)
            at android.os.Binder.execTransactInternal(Binder.java:1021)
            at android.os.Binder.execTransact(Binder.java:994)
    

    它是如何工作的?我猜APK里面已经包含了测试,不需要安装额外的代码。。。或者我也必须在CI上构建测试?如何使用CI中的APK在本地计算机上启动测试?

    由于插入指令的测试默认使用调试变量,您的应用程序的调试变量可能存在签名问题。唯一的方法是检查应用程序模块的
    build.gradle
    文件,看看应用了什么
    signingConfigs

    我的建议是尝试以下方法。由于CI最终只是运行一个命令脚本,请在您的开发机器上进行测试,看看是否成功:

  • 打开命令终端并运行以下命令,这些命令将在debug variant中构建应用程序和Android instrumented测试,然后将它们安装到连接的Android设备上:
    • gradlew clean
    • gradlew assembleDebug assembleDebugAndroidTest installDebug installDebugAndroidTest
  • 启动仪表化测试用例:
    • adb.exe shell am instrument-w-r-e debug false-e package com.mysite.myapp.com.mysite.myapp.test/com.mysite.myapp.runner.MyCustomTestsRunner

  • 如果异常
    java.lang.SecurityException
    仍在出现,则这应该表明APK签名有误。

    您可以发布应用程序
    build.gradle