Как запустить тесты на APK из CI? - PullRequest
1 голос
/ 13 июля 2020

У меня есть CI-сервер для сборки APK из GIT, и он работает хорошо.

Мне нужно запускать автоматические c тесты (UI Automator) на сборках, созданных CI-сервером. Для этого я:

  1. настраиваю CI-сервер для сборки APK с тестами командой gradlew assembleDebug. Я также пробовал собрать его с помощью 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? Как запустить тесты на локальном компьютере с помощью APK от CI?

1 Ответ

1 голос
/ 20 июля 2020

Вероятно, у вас проблемы с подписью в отладочном варианте вашего приложения, поскольку инструментальные тесты по умолчанию используют отладочный вариант. Единственный способ узнать это - проверить файл 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 неверный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...