AndroidJUnitRunner

Die Klasse AndroidJUnitRunner ist ein JUnit-Test-Runner, der können Sie instrumentierte JUnit 4-Tests auf Android-Geräten, z. B. für Espresso, UI Automator und Compose Frameworks testen.

Der Test-Runner übernimmt das Laden des Testpakets und der zu testenden App in eine Gerät, das Ausführen von Tests und das Melden von Testergebnissen.

Dieser Test-Runner unterstützt mehrere gängige Testaufgaben, darunter:

JUnit-Tests schreiben

Das folgende Code-Snippet zeigt, wie Sie ein instrumentiertes JUnit 4 schreiben, Test, um zu prüfen, ob der changeText-Vorgang in ChangeTextBehavior -Klasse ordnungsgemäß funktioniert:

Kotlin


@RunWith(AndroidJUnit4::class) // Only needed when mixing JUnit 3 and 4 tests
@LargeTest // Optional runner annotation
class ChangeTextBehaviorTest {
 val stringToBeTyped = "Espresso"
 // ActivityTestRule accesses context through the runner
 @get:Rule
 val activityRule = ActivityTestRule(MainActivity::class.java)

 @Test fun changeText_sameActivity() {
 // Type text and then press the button.
 onView(withId(R.id.editTextUserInput))
 .perform(typeText(stringToBeTyped), closeSoftKeyboard())
 onView(withId(R.id.changeTextBt)).perform(click())

 // Check that the text was changed.
 onView(withId(R.id.textToBeChanged))
 .check(matches(withText(stringToBeTyped)))
 }
}

Java


@RunWith(AndroidJUnit4.class) // Only needed when mixing JUnit 3 and 4 tests
@LargeTest // Optional runner annotation
public class ChangeTextBehaviorTest {

    private static final String stringToBeTyped = "Espresso";

    @Rule
    public ActivityTestRule<MainActivity>; activityRule =
            new ActivityTestRule<>;(MainActivity.class);

    @Test
    public void changeText_sameActivity() {
        // Type text and then press the button.
        onView(withId(R.id.editTextUserInput))
                .perform(typeText(stringToBeTyped), closeSoftKeyboard());
        onView(withId(R.id.changeTextBt)).perform(click());

        // Check that the text was changed.
        onView(withId(R.id.textToBeChanged))
                .check(matches(withText(stringToBeTyped)));
    }
}

Auf den Kontext der Anwendung zugreifen

Wenn Sie AndroidJUnitRunner zum Ausführen Ihrer Tests verwenden, können Sie auf den Kontext zugreifen für die zu testende App durch Aufrufen der statischen ApplicationProvider.getApplicationContext()-Methode. Wenn Sie ein benutzerdefiniertes von Application in Ihrer App übergeben, gibt diese Methode Kontext der abgeleiteten Klasse an.

Wenn Sie Tools implementieren, können Sie über die API Klasse InstrumentationRegistry. Dieser Kurs umfasst die Instrumentation-Objekt, das Ziel-App-Objekt Context, den Test Context und die Befehlszeilenargumente, die an den Test übergeben wurden.

Tests filtern

In Ihren JUnit 4.x-Tests können Sie den Testlauf mithilfe von Annotationen konfigurieren. Dieses die Verwendung von Boilerplate und bedingtem Code in der Tests durchführen. Zusätzlich zu den von JUnit 4 unterstützten Standardanmerkungen enthält der Test Runner unterstützt auch Android-spezifische Anmerkungen, einschließlich der Folgendes:

  • @RequiresDevice: Gibt an, dass der Test nur auf physischen Geräten und nicht auf Emulatoren.
  • @SdkSuppress: Unterdrückt die Ausführung des Tests auf einer niedrigeren Android API. Level als der angegebene Level ist. Um beispielsweise Tests auf allen API-Ebenen zu unterdrücken, als 23 davon entfernt wurden, verwenden Sie die Annotation @SDKSuppress(minSdkVersion=23).
  • @SmallTest, @MediumTest und @LargeTest: Klassifizieren, wie lange ein Test dauert und folglich auch, wie oft Sie den Test durchführen können. Ich können Sie mithilfe dieser Annotation filtern, welche Tests ausgeführt werden. android.testInstrumentationRunnerArguments.size-Property:
-Pandroid.testInstrumentationRunnerArguments.size=small

Shard-Tests

Wenn Sie die Tests parallelisieren müssen, damit sie schneller ausgeführt werden, können Sie sie in Gruppen aufteilen oder Shards: Der Test-Runner unterstützt die Aufteilung einer einzelnen Testsuite in mehrere Shards verwenden. So können Sie ganz einfach Tests, die zum selben Shard gehören, gemeinsam als ein Gruppe. Jeder Shard ist durch eine Indexnummer gekennzeichnet. Verwenden Sie beim Ausführen von Tests die Methode -e numShards-Option, um die Anzahl der zu erstellenden separaten Shards anzugeben, und -e shardIndex-Option zum Angeben des auszuführenden Shards.

Um die Testsuite beispielsweise in zehn Shards aufzuteilen und nur die Tests auszuführen, im zweiten Shard gruppiert werden, verwenden Sie den folgenden adb-Befehl:

adb shell am instrument -w -e numShards 10 -e shardIndex 2

Android Test Orchestrator verwenden

Mit Android Test Orchestrator können Sie alle Tests Ihrer App innerhalb der Eigener Aufruf von Instrumentation. Bei Verwendung von AndroidJUnitRunner Version 1.0 oder höher, haben Sie Zugriff auf Android Test Orchestrator.

Android Test Orchestrator bietet die folgenden Vorteile für Ihre Tests Umgebung:

  • Minimaler gemeinsamer Status:Jeder Test wird in einer eigenen Instrumentation ausgeführt. Instanz. Wenn Ihre Tests den App-Status teilen, wird nach jedem Test von der CPU oder dem Speicher Ihres Geräts entfernt. So entfernen Sie alle gemeinsamen Status nach jedem Vorgang von der CPU und dem Arbeitsspeicher Ihres Geräts: verwenden Sie das Flag clearPackageData. Weitere Informationen finden Sie im Abschnitt Enable from Gradle (Über Gradle aktivieren). finden Sie ein Beispiel.
  • Isolierte Abstürze: Selbst wenn ein Test abstürzt, werden nur die eigene Instanz von Instrumentation. Das bedeutet, dass die anderen Tests Ihre Suite wird noch ausgeführt und Sie erhalten vollständige Testergebnisse.

Diese Isolation führt möglicherweise zu einer längeren Testausführungszeit, da Android Test Orchestrator startet die Anwendung nach jedem Test neu.

Android Studio und Firebase Test Lab bieten Android Test Orchestrator vorinstalliert sind. Aktivieren Sie diese Funktion unter Android Studio verfügbar.

Über Gradle aktivieren

So aktivieren Sie Android Test Orchestrator mit dem Gradle-Befehlszeilentool: diese Schritte:

  • Schritt 1: Ändern Sie die Gradle-Datei. Fügen Sie die folgenden Aussagen zu Ihrem build.gradle-Datei des Projekts hinzugefügt:
android {
 defaultConfig {
  ...
  testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

  // The following argument makes the Android Test Orchestrator run its
  // "pm clear" command after each test invocation. This command ensures
  // that the app's state is completely cleared between tests.
  testInstrumentationRunnerArguments clearPackageData: 'true'
 }

 testOptions {
  execution 'ANDROIDX_TEST_ORCHESTRATOR'
 }
}

dependencies {
 androidTestImplementation 'androidx.test:runner:1.1.0'
 androidTestUtil 'androidx.test:orchestrator:1.1.0'
}
  • Schritt 2: Führen Sie Android Test Orchestrator mit dem folgenden Befehl aus:
./gradlew connectedCheck

In Android Studio aktivieren

Fügen Sie die angezeigten Anweisungen hinzu, um Android Test Orchestrator in Android Studio zu aktivieren in Enable from Gradle in der build.gradle-Datei Ihrer App.

Über die Befehlszeile aktivieren

Führen Sie die folgenden Befehle aus, um Android Test Orchestrator über die Befehlszeile zu verwenden in einem Terminalfenster:

DEVICE_API_LEVEL=$(adb shell getprop ro.build.version.sdk)

FORCE_QUERYABLE_OPTION=""
if [[ $DEVICE_API_LEVEL -ge 30 ]]; then
   FORCE_QUERYABLE_OPTION="--force-queryable"
fi

# uninstall old versions
adb uninstall androidx.test.services
adb uninstall androidx.test.orchestrator

# Install the test orchestrator.
adb install $FORCE_QUERYABLE_OPTION -r path/to/m2repository/androidx/test/orchestrator/1.4.2/orchestrator-1.4.2.apk

# Install test services.
adb install $FORCE_QUERYABLE_OPTION -r path/to/m2repository/androidx/test/services/test-services/1.4.2/test-services-1.4.2.apk

# Replace "com.example.test" with the name of the package containing your tests.
# Add "-e clearPackageData true" to clear your app's data in between runs.
adb shell 'CLASSPATH=$(pm path androidx.test.services) app_process / \
 androidx.test.services.shellexecutor.ShellMain am instrument -w -e \
 targetInstrumentation com.example.test/androidx.test.runner.AndroidJUnitRunner \
 androidx.test.orchestrator/.AndroidTestOrchestrator'

Wie die Befehlssyntax zeigt, installieren Sie Android Test Orchestrator und verwenden es dann .

adb shell pm list instrumentation

Verschiedene Toolchains verwenden

Wenn Sie Ihre App mit einer anderen Toolchain testen, können Sie weiterhin Android verwenden Testen Sie Orchestrator, indem Sie die folgenden Schritte ausführen:

  1. Fügen Sie die erforderlichen Pakete in die Build-Datei Ihrer App ein.
  2. Aktivieren Sie Android Test Orchestrator über die Befehlszeile.

Architektur

Das Orchestrator-Dienst-APK wird in einem Prozess gespeichert, der unabhängig vom Test-APK und das APK der zu testenden App:

<ph type="x-smartling-placeholder">
</ph> Mit dem Orchestrator können Sie JUnit-Tests steuern.
Abbildung 1: APK-Struktur der Android Test Orchestration.

Android Test Orchestrator erfasst zu Beginn des Tests JUnit-Tests ausgeführt, führt dann aber jeden Test separat in einer eigenen Instanz Instrumentation

Weitere Informationen

Weitere Informationen zur Verwendung von AndroidJUnitRunner finden Sie in der API-Referenz.

Weitere Informationen

Weitere Informationen zur Verwendung von AndroidJUnitRunner finden Sie hier: Ressourcen.

Produktproben