Was eine großartige Testplattform ausmacht: Eine Checkliste für Enterprise-Teams

Jedes QA-Team in Unternehmen stößt irgendwann an dieselbe Grenze. Eine Testsuite, die in einer Sprint-Demo auf zwei Geräten einwandfrei läuft, schlägt plötzlich unvorhersehbar fehl, sobald sie auf einer realen Geräteumgebung – mit Dutzenden oder Hunderten von Geräten, unterschiedlichen Betriebssystemversionen, verschiedenen Mobilfunkanbietern und unterschiedlichem Akku- und Netzwerkzustand – eingesetzt wird. Das Team verbringt das nächste Quartal damit, rätselhafte Fehler zu beheben, die nichts mit der Anwendung selbst zu tun haben, sondern ausschließlich mit der Testkonzeption und der Testumgebung. 

Eine hervorragende Testplattform definiert sich nicht durch die Anzahl der in ihrem Datenblatt aufgeführten Geräte. Sie zeichnet sich vielmehr dadurch aus, wie gut sie Teams dabei unterstützt, mit Variabilität umzugehen, Tests zu schreiben, die unter realen Bedingungen funktionieren, und einen sicheren und effizienten Betrieb in großem Umfang zu gewährleisten. Diese Checkliste beleuchtet beide Aspekte: die Testdesignpraktiken, die eine zuverlässige Automatisierung in einer Gerätefarm ermöglichen, und die Plattformfunktionen, die Unternehmen von jedem Anbieter oder internen Testlabor erwarten sollten.

Design für Variabilität, nicht nur für Geräteanzahl

Warum es wichtig ist 

Eine Gerätefarm ist nicht einfach eine größere Version der beiden Telefone auf Ihrem Schreibtisch. Die Geräte werden zwischen den Testläufen gemeinsam genutzt und wiederverwendet, der Systemzugriff ist eingeschränkt, und kein Testlauf beginnt mit dem gleichen Zustand. Umgebungsschwankungen – wie z. B. Netzwerkgeschwindigkeitsschwankungen, Gerätestatus oder Unterschiede in der Betriebssystemversion – gehören zu den häufigsten Ursachen für Testfehler, die nichts mit der zu testenden Anwendung zu tun haben. 

Bei Googles Größenordnung schlägt sich das in harten Fakten nieder: Rund 1.5 % aller Testläufe sind fehlerhaft, und etwa jeder siebte Test schlägt zeitweise aus Gründen fehl, die nichts mit Codeänderungen zu tun haben. Die Ursachen sind selten mysteriös – meist handelt es sich um Synchronisierungsprobleme, gemeinsam genutzte Zustände oder eine Umgebung, die bei den verschiedenen Testläufen nicht so identisch ist, wie das Team angenommen hat. 

Aktivitäten 

Behandeln Sie Variabilität von Anfang an als Designbeschränkung. Gehen Sie davon aus, dass sich der Geräte-, Netzwerk- und Anwendungszustand bei jedem Testlauf leicht ändert, und schreiben Sie Tests, die den tatsächlichen Zustand überprüfen, von dem sie abhängen, anstatt von einem festen Timing oder Layout auszugehen. Die Standardisierung der Testinfrastruktur – konsistente Betriebssystem-/Browserversionen, containerisierte Testumgebungen und vorhersehbare Gerätebereitstellung – reduziert die Instabilität messbar, noch bevor Sie den Testcode bearbeiten.

Explizite Wartezeiten statt fest codierter Zeitvorgaben

Warum es wichtig ist 

Nichts führt schneller zu unzuverlässigen Ergebnissen als ein fest codierter schlaf ()Entweder wird Zeit verschwendet, indem auf etwas gewartet wird, das bereits geschehen ist, oder es scheitert komplett, wenn die Umgebung etwas langsamer als üblich ist. 

Aktivitäten 

Die Selenium-Dokumentation ist in diesem Punkt eindeutig: Explizite Wartezeiten prüfen die Anwendung auf eine bestimmte Bedingung und fahren erst fort, wenn diese Bedingung erfüllt ist, anstatt die Ausführung bedingungslos anzuhalten. Vermeiden Sie es, implizite und explizite Wartezeiten im selben Test zu mischen, da sich die beiden Timer unvorhersehbar kombinieren können. Bei Elementen mit tatsächlich variablen Ladezeiten ist eine kontinuierliche Wartezeit mit einem Abfrageintervall in der Regel schneller als ein langes, festes Timeout, da die Bedingung wiederholt geprüft wird, anstatt eine einmalige maximale Wartezeit abzuwarten. Die zugrunde liegende Vorgehensweise ist dieselbe, die Googles Testteam als einen der wichtigsten Hebel gegen Instabilität hervorhebt: den genauen Zustand zu verstehen, auf den gewartet wird, anstatt einfach nur Zeit hinzuzufügen.

Ortungsfunktionen, die App-Änderungen überstehen

Warum es wichtig ist 

Eine Testsuite ist nur so stabil wie die ihr zugrunde liegenden Locators. Lange, fehleranfällige XPath-Ausdrücke führen zu Problemen, sobald ein Entwickler ein Layout neu anordnet oder einen Container umbenennt – und auf einer Gerätefarm, die mit verschiedenen Betriebssystemversionen und Bildschirmgrößen betrieben wird, verstärken bereits kleine Darstellungsunterschiede dieses Problem. 

Aktivitäten 

Die Dokumentation der Appium-Lokalisierungsstrategie ist in dieser Hierarchie einheitlich: Accessibility-IDs oder Ressourcen-IDs haben Vorrang, da sie schnell, eindeutig und – im Fall der Accessibility-ID – plattformübergreifend zwischen iOS und Android funktionieren. XPath sollte für Fälle reserviert werden, in denen keine ID existiert, und als Fallback und nicht als Standard verwendet werden, da es die stabilste und leistungssensitivste Strategie darstellt. Die Zentralisierung von Locators in einem gemeinsamen Objekt-Repository und die Aufforderung an Entwickler, von vornherein stabile IDs und Accessibility-Labels bereitzustellen, zahlt sich um ein Vielfaches aus, sobald eine App-Suite mehr als einige wenige Bildschirme umfasst.

Beobachtbarkeit von einem einzelnen Lauf bis zur gesamten Flotte

Warum es wichtig ist 

„Der Test ist fehlgeschlagen“ ist keine Diagnose. In einer Gerätefarm kann ein Fehler auf eine tatsächliche Regression, eine kurzzeitige Netzwerkstörung, einen Speichermangel oder eine Hintergrundaktualisierung einer App, die den Testlauf unterbrochen hat, zurückzuführen sein. Ohne Einblick in die tatsächlichen Vorgänge auf dem Gerät zum Zeitpunkt des Fehlers beginnt jede Fehleranalyse bei null. 

Aktivitäten 

Gute Plattformen liefern Protokolle, Metriken und Traces pro Testlauf – nicht nur eine Bestanden/Nicht bestanden-Meldung. Das bedeutet Telemetriedaten auf Geräteebene (CPU, Speicher, Netzwerkbedingungen, Screenshots oder Videos zum Zeitpunkt des Fehlers) neben der eigentlichen Testausgabe und Dashboards, mit denen Sie Trends im Zeitverlauf erkennen können, anstatt jeden Fehler einzeln zu analysieren. Diese Transparenz macht aus „Dieser Test ist unzuverlässig“ die Erkenntnis „Dieser Test bricht speziell auf Geräten mit weniger als 2 GB freiem Speicher ab“ – ein Problem, das Sie tatsächlich beheben können.

Behandeln Sie Testzugangsdaten wie Produktionsgeheimnisse.

Warum es wichtig ist 

Testkonten, API-Schlüssel und Zugriffstoken für Gerätefarmen werden häufig als unbedeutend angesehen, weil es sich ja „nur um Testdaten“ handle. In der Praxis haben sie jedoch oft realen Zugriff auf gemeinsam genutzte Infrastruktur, und durchgesickerte Testzugangsdaten sind genauso angreifbar wie durchgesickerte Produktionszugangsdaten. 

Aktivitäten 

Die OWASP-Richtlinien zum Geheimnismanagement sind diesbezüglich eindeutig: Geheimnisse dürfen niemals im Quellcode, in Konfigurationsdateien oder im Klartext in Versionskontrollsystemen – einschließlich Test-Repositories – gespeichert werden. Speichern und Bereitstellen sollte zentral über einen Geheimnismanager oder -tresor erfolgen. Der Zugriff sollte auf Ebene der einzelnen Geheimnisse nach dem Prinzip der minimalen Berechtigungen erfolgen. Zugangsdaten sollten regelmäßig rotiert werden, anstatt sie dauerhaft statisch zu belassen. CI/CD-Systeme, die auf diese Geheimnisse zugreifen, müssen mit der gleichen Sorgfalt gehärtet und gepatcht werden wie die Produktionsinfrastruktur, da eine kompromittierte Pipeline die gleichen schwerwiegenden Folgen wie ein kompromittierter Anwendungsserver hat.

Automatisierte Bereinigung: Jeder Durchlauf beginnt mit einem sauberen System.

Warum es wichtig ist 

Gemeinsame Testzustände zwischen Testläufen sind einer der schnellsten Wege, eine zuverlässige Testsuite unzuverlässig zu machen. Ein Test, der einen Account, eine Datei oder einen Datenbankeintrag hinterlässt, kann den nächsten Test, der auf demselben Gerät ausgeführt wird, unbemerkt beeinträchtigen – und in einer gemeinsam genutzten Testumgebung kann dieser „nächste Test“ sogar zu einem ganz anderen Team gehören. 

Aktivitäten 

Jeder Test sollte nach sich selbst aufräumen, indem er Teardown- oder After-Each-Hooks verwendet, die die erzeugten Ressourcen entfernen. Die Aufräumlogik sollte Fehler selbstständig abfangen, damit ein fehlgeschlagener Aufräumvorgang nicht zu einem Ausfall aller nachfolgenden Tests führt. Vermeiden Sie statische oder globale Zustände, die über mehrere Tests hinweg bestehen bleiben, und isolieren Sie Testdaten nach Möglichkeit pro Lauf, sodass keine nachträglichen Abgleiche erforderlich sind. Insbesondere auf Gerätefarmen betrifft dies auch das Gerät selbst: App-Daten, Berechtigungen und Installationsstatus sollten zwischen den Sitzungen zurückgesetzt werden, damit der nächste Testlauf des Teams von einer klar definierten Ausgangsbasis ausgeht.

Überblick: Was Unternehmensteams von der Plattform fordern sollten

Die sechs oben genannten Praktiken gewährleisten die Zuverlässigkeit einzelner Tests. Der Erfolg oder Misserfolg einer unternehmensweiten Implementierung hängt jedoch maßgeblich von der zugrundeliegenden Plattform ab. Bei der Evaluierung einer Testplattform – sei es die Cloud-Gerätefarm eines Anbieters oder ein internes Labor – sollten Teams in Unternehmen außerdem Folgendes prüfen: 

  1. Skalierung ohne Warteschlangen: Es stehen genügend reale Geräte und parallele Ausführungskapazität zur Verfügung, damit eine vollständige Regressionssuite auch bei Spitzenlast in Minuten und nicht in Stunden abgeschlossen ist. 
  2. Sicherheits- und Compliance-Status: SOC 2 Typ II oder ISO 27001 Zertifizierungen, SSO/SAML Unterstützung, rollenbasierte Zugriffskontrolle und Audit-Logs – Grundvoraussetzungen für jedes Team, das Tests mit Vorabversionen oder echten Benutzerdaten durchführt. 
  3. Framework- und CI/CD-Integration: Erstklassige Unterstützung für die Frameworks, die Ihre Teams bereits verwenden (Appium, Selenium, Playwright, Cypress, XCUITest, Espresso, Maestro), und eine nahtlose Integration in bestehende CI/CD-Pipelines anstatt einer nachträglich hinzugefügten Lösung. 
  4. DeployFlexibilität der Gesprächsführung: Die Möglichkeit, in der Cloud, lokal oder in einem Hybridmodell zu arbeiten, da die Anforderungen an Datenstandort und Netzwerk je nach Branche stark variieren. 
  5. Echte Geräte, nicht nur Emulatoren: Zugang zu tatsächlicher physischer Hardware für die Fehlermodi – thermische Drosselung, Eigenheiten des Netzbetreibers, geringer Speicherplatz, Verhalten von Hintergrundanwendungen –, die Simulatoren einfach nicht reproduzieren können.

Alles zusammenfügen: Ein reales Szenario

Stellen Sie sich ein Team in einem Unternehmen vor, das seine Regressionstest-Suite vor einer wichtigen Veröffentlichung von 10 auf 200 Geräte skaliert. In der ersten Woche sinkt die Erfolgsquote von 98 % auf 71 % – nicht etwa, weil die App schlechter geworden wäre, sondern weil die Suite nie für diese Art von Variabilität ausgelegt war. 

Das Team arbeitet die Checkliste der Reihe nach ab. Fest codierte Wartezeiten werden durch explizite, an die tatsächliche Last gekoppelte Wartezeiten ersetzt. Anfällige XPath-Locators werden durch Accessibility-IDs ausgetauscht, wodurch locatorbedingte Fehler um mehr als die Hälfte reduziert werden. Gerätebezogene Beobachtungsdaten zeigen, dass eine Häufung von Fehlern auf ältere Android-Geräte mit geringem Speicherplatz beschränkt ist – ein echtes, behebbares Problem, kein Zufallsbefund. Ein durchgesickerter Test-API-Schlüssel taucht bei einer Überprüfung der Anmeldeinformationen in einem alten Branch auf und wird umgehend ausgetauscht. Und ein fehlender Teardown-Schritt, der verwaiste Testkonten hinterlassen hatte, wird schließlich als Ursache einer separaten Klasse von sporadischen Anmeldefehlern identifiziert. 

Sobald die Testsuite auf allen 200 Geräten ausgeführt wurde, erholt sich die Erfolgsquote auf 96 % – und, ganz entscheidend, das Team kann nun zwischen einem zufälligen Fehler in der Umgebung und einer tatsächlichen Verschlechterung unterscheiden. Genau diese Unterscheidung ist der Kern der Checkliste.

Wie Digital.ai Tests können helfen

Jede einzelne Maßnahme auf dieser Checkliste kann ein Team selbst umsetzen – doch die konsequente Anwendung auf Hunderten von realen Geräten im Unternehmensmaßstab ist genau das, was eine gute Plattform ausmacht. Hier zeigt sich der wahre Wert der Plattform. Digital.ai Die Tests beginnen. 

Digital.ai Tests ist für Unternehmensteams konzipiert, die Appium-, Selenium- und Playwright-Tests auf echten iOS-, Android- und Desktop-Browsergeräten ausführen – in der Cloud, lokal oder hybrid. 

Zu den wichtigsten Fähigkeiten, die sich direkt auf diese Checkliste zurückführen lassen, gehören: 

  1. Reale Geräte in großem Maßstab, mit integriertem Labormanagement Variabilität ist also etwas, das man kontrolliert und überwacht, nicht etwas, das man blind bekämpft. 
  2. Beobachtbarkeit pro Lauf — Geräteprotokolle, Screenshots, Videos und Leistungsdaten zu jedem Test, damit die Fehleranalyse auf Beweisen und nicht auf Vermutungen basiert 
  3. Unternehmenssicherheit und Zugriffskontrollen — rollenbasierte Zugriffskontrolle, SSO und lokale Bereitstellungsoptionen für Teams, die bei Datenresidenz und Compliance keine Kompromisse eingehen können. 
  4. Native Integration mit Appium, Selenium und PlaywrightHinzu kommen CI/CD-Pipelines, sodass die obige Checkliste in den bestehenden Workflow Ihres Teams passt. 

Egal, ob Sie von einer Handvoll Geräten zu einem kompletten Unternehmenslabor skalieren, Digital.ai bietet den Gerätezugriff, die Beobachtbarkeit und die Governance, die erforderlich sind, um die Testautomatisierung zuverlässig – und nicht nur schnell – zu gestalten. 

👉 Mehr erfahren unter digital.ai/products/continuous-testing 

Wichtige Erkenntnisse 

  1. Variabilität ist die Regel, nicht die Ausnahme. Die Tests werden so konzipiert, dass der Geräte-, Netzwerk- und App-Status bei jedem Durchlauf leicht variiert. 
  2. Fest codierte Schlafvorgänge eliminieren. Explizite und fließende Wartezeiten, die an reale Bedingungen gekoppelt sind, sind zuverlässiger und oft schneller. 
  3. Die Standortbestimmung erfolgt hierarchisch, nicht nach dem Prinzip „Jeder kann machen, was er will“. Zuerst Accessibility-ID und Ressourcen-ID verwenden; XPath nur als letzte Option. 
  4. Beobachtbarkeit wandelt Rauschen in Signal um. Anhand von Protokollen, Metriken und Gerätetelemetrie pro Lauf lässt sich eine echte Regression von einer vorübergehenden Störung in der Umgebung unterscheiden. 
  5. Testzugangsdaten verdienen Sicherheit auf Produktionsniveau. Speichern Sie sie, rotieren Sie sie und beschränken Sie den Zugriff auf das Prinzip der minimalen Berechtigungen. 
  6. Jeder Lauf sollte mit einem sauberen Start beginnen. Die automatische Aufräumung verhindert, dass die Überreste eines Tests den Testlauf eines anderen Teams beeinträchtigen. 
  7. Die Plattform ist genauso wichtig wie die Tests. Skalierbarkeit, Sicherheitszertifizierungen und Framework-Integration sind im Unternehmensmaßstab unabdingbar. 

Ressourcen 

  1. Selen: Wartestrategien — Offizielle Selenium-Dokumentation zu expliziten, impliziten und flüssigen Wartezeiten 
  2. Appium XCUITest-Treiber: Locator-Strategien — Offizielle Appium-Richtlinien zur Auswahl von Ortungsstrategien 
  3. Google Testing Blog: Woher kommen unsere unzuverlässigen Tests? — Googles technische Forschung zu den Hauptursachen von Testinstabilität 
  4. Google Testing Blog: Fehlerhafte Tests bei Google und wie wir sie beheben — Googles interne Abhilfestrategien
  5. Spickzettel zur Verwaltung von OWASP-Geheimnissen — Branchenübliche Richtlinien für die Speicherung, Rotation und Verwaltung von Geschäftsgeheimnissen 
  6. xUnit-Muster: Automatisierte Demontage — Referenzmuster für zuverlässige Testbereinigung 

Auch interessant