如何从 CI 启动 APK 测试?

问题描述 投票:0回答:2

我有一个 CI 服务器可以从 GIT 构建 APK,并且运行良好。

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

  1. 设置 CI 服务器以通过命令

    gradlew assembleDebug
    构建 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

    来构建它
  2. 尝试使用命令启动它

    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 在本地计算机上启动测试?

android gradle android-uiautomator
2个回答
1
投票

您的应用程序的调试变体可能存在签名问题,因为仪器测试默认使用调试变体。唯一的判断方法是检查应用程序模块的

build.gradle
文件并查看应用了哪些
signingConfigs

我的建议是尝试以下方法。由于最终 CI 只是运行命令脚本,因此请在您的开发计算机上测试它并查看它是否成功:

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


0
投票

问题 Poyer 有兴趣比较她喜欢的两种 YouTube 音乐视频的长度。她 从这两种类型中各抽取 15 个样本。 为了帮助她,您将运行假设检验程序并撰写包含以下内容的报告 (a) 说明数据表中变量的名称和数据类型。 (b) 说明您使用的假设检验。 (c) 陈述原假设和备择假设。 (d) 运行测试并将主输出表复制到您的报告中。不允许复制图像。选择并 直接从 SPSS 输出复制。 (e) 说明相关检验统计量和 p 值。 (f) 陈述结论。结论应该清楚地回答研究问题。 (g) 说明正态性和方差的假设是否适用。如果有任何适用,请说明 相关 p 值以及上述结论如何受到影响。 可交付成果 您需要提交包含该报告的文字处理文档(非 PDF)。 您还必须将数据表中的数据复制并粘贴(无图像)到报告末尾。 该文件应包含成员名单。 您可能会被要求为您提交的内容进行辩护。

© www.soinside.com 2019 - 2024. All rights reserved.