gradle 如何从CI启动APK测试?

ct3nt3jp  于 2023-11-18  发布在  其他
关注(0)|答案(1)|浏览(114)

我有一个CI服务器来从GIT构建APK,它运行得很好。
我需要在CI服务器生成的版本上启动自动测试(UI Automator)。要实现它,我:
1.通过命令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构建它
1.正在尝试使用命令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在本地计算机上启动测试?

kuhbmx9i

kuhbmx9i1#

您可能在应用的调试变体上遇到了签名问题,因为插装测试默认使用调试变体。唯一的方法是检查应用模块的build.gradle文件,看看应用了什么signingConfigs
我的建议是尝试以下操作。由于最终CI只是运行命令脚本,因此在开发机器上测试它并查看它是否成功:

  • 打开一个命令终端并运行以下命令,这些命令将在调试变体中构建您的应用程序和Android Jmeter 化测试,然后将它们安装到连接的Android设备上:
  • gradlew clean
  • gradlew assembleDebug assembleDebugAndroidTest installDebug installDebugAndroidTest
  • 启动 Jmeter 化测试用例:
  • 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的签名不正确。

相关问题