Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android reports "Error=Unable to find instrumentation info for: ComponentInfo {}"

There are a lot of topics/questions regard this issue on stackoverflow (such as Error=Unable to find instrumentation info for: ComponentInfo{ }) and other website but the thing that make my problem different than others is I am working on automation. So let me give you more details.

I have no problem when I'm testing on local machine (I mean my laptop). I can run Espresso testing and all tests passes.

Now, I want to run these tests on CI (Bitrise in my case). I create and run Emulator. I confirm there is no issue there. I have following script:

...
# Check which instrumentation packages have been installed on your device, https://stackoverflow.com/a/23394559/513413
echo ""
echo "Check which instrumentation packages have been installed..."
adb shell pm list instrumentation

# Running tests
echo ""
echo "running test..."
adb shell am instrument -w -r   -e debug false -e class my.package.name.MyActivityTest my.package.name.test/android.support.test.runner.AndroidJUnitRunner

This is my output from CI:

Check which instrumentation packages have been installed...
instrumentation:com.android.emulator.smoketests/android.support.test.runner.AndroidJUnitRunner (target=com.android.emulator.smoketests)
instrumentation:com.android.smoketest.tests/com.android.smoketest.SmokeTestRunner (target=com.android.smoketest)
instrumentation:com.example.android.apis/.app.LocalSampleInstrumentation (target=com.example.android.apis)
running test...
INSTRUMENTATION_STATUS: id=ActivityManagerService
INSTRUMENTATION_STATUS: Error=Unable to find instrumentation info for: ComponentInfo{my.package.name.test/android.support.test.runner.AndroidJUnitRunner}
INSTRUMENTATION_STATUS_CODE: -1
android.util.AndroidException: INSTRUMENTATION_FAILED: my.package.name.test/android.support.test.runner.AndroidJUnitRunner
    at com.android.commands.am.Am.runInstrument(Am.java:1093)
    at com.android.commands.am.Am.onRun(Am.java:371)
    at com.android.internal.os.BaseCommand.run(BaseCommand.java:47)
    at com.android.commands.am.Am.main(Am.java:100)
    at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
    at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:251)

I have following line of code in defaultConfig of app.gradle file:

testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner'

I have android.support.test.runner.AndroidJUnitRunner under my EditConfiguration as you see in the following link.

enter image description here

I guess my test fails because I don't have this command in my CI's emulator. So my question is how I can add it via command line? Is that possible?

Update

This is my full script.

#!/bin/bash

# List of devices attached
adb devices

# List all *.apk files inside /bitrise/deploy path
echo "List of all *.apk files in $BITRISE_DEPLOY_DIR"
cd $BITRISE_DEPLOY_DIR && ls

# Push and Install main apk file
echo ""
echo "Pushing main apk at $BITRISE_APK_PATH to /data/local/tmp/my.package.name and install it..."
adb push $BITRISE_APK_PATH /data/local/tmp/my.package.name
adb shell pm install -r "/data/local/tmp/my.package.name"

# Push and Install Test Unaligned apk file
echo ""
echo "Pushing test unaligned apk at $BITRISE_DEPLOY_DIR/my-app-debug-unaligned.apk to /data/local/tmp/my.package.name.test and install it..."
adb push $BITRISE_DEPLOY_DIR/my-app-debug-unaligned.apk /data/local/tmp/my.package.name.test
adb shell pm install -r "/data/local/tmp/my.package.name.test"

# Check which instrumentation packages have been installed on your device, https://stackoverflow.com/a/23394559/513413
echo ""
echo "Check which instrumentation packages have been installed..."
adb shell pm list instrumentation

# Running tests
echo ""
echo "switch directory to $BITRISE_SOURCE_DIR"
cd $BITRISE_SOURCE_DIR
echo "running test..."
adb shell am instrument -w -r -e debug false -e class my.package.name.path.MinHappyPathTest my.package.name.path/android.support.test.runner.AndroidJUnitRunner
like image 538
Hesam Avatar asked Apr 20 '16 19:04

Hesam


1 Answers

You must install (adb install) and application APK and test APK (this is different APK) before running "adb shell am instrument".

like image 179
Vyacheslav Pedak Avatar answered Sep 19 '22 23:09

Vyacheslav Pedak