Hintergrund

In der Welt des Softwaretests kann Leistungstest für verschiedene Teams und Einzelpersonen unterschiedliche Bedeutungen haben, je nachdem, was sie testen. Beispielsweise werden Lasttests und Stresstests mit Tools wie JMeter oder SoapUI häufiger mit Leistungstests in Verbindung gebracht, um den Backend-Server einer Anwendung zu validieren, wenn mehrere Benutzer gleichzeitig mit der Anwendung interagieren.

Leistungstests für iOS- oder Android-Mobilweb- und native Anwendungen sind jedoch ein Bereich, den nicht viele Unternehmen erforscht haben, teilweise weil nur wenige Markttools eine anständige Leistungstestlösung für mobile Geräte bieten.

Organisationen mit kundenorientierten Anwendungen haben in den letzten Jahren Automatisierungstests für Mobilgeräte priorisiert. Mit dem Wachstum der Anwendungen steigt jedoch auch die Nachfrage der Kunden nach Anwendungen, die optimal und ohne Unterbrechungen funktionieren. Angenommen, ein Benutzer lädt eine Anwendung aus dem AppStore herunter und hat Probleme wie langsames Laden oder Abstürze. In diesem Fall werden sie wahrscheinlich zu einer anderen Anwendung wechseln, die ihren Anforderungen entspricht.

Während sich herkömmliche Automatisierungsskripte stark auf den funktionalen Aspekt der Anwendung konzentrieren, versäumen sie es, andere kritische Elemente der Anwendungsleistung zu validieren. Sie validieren beispielsweise nicht die Zeit, die zum Navigieren und Landen auf einer neuen Seite benötigt wird, Spitzen bei der CPU-, Speicher- und Akkunutzung oder unnötige Netzwerkaufrufe, die während Benutzerströmen getätigt werden. Dies sind tägliche Herausforderungen, mit denen Benutzer konfrontiert sind, doch Unternehmen legen keinen Wert darauf, diese Bereiche mobiler Anwendungen zu testen.

Wie funktioniert Digital.ai Herausforderung angehen?

Der wahre Wert von Leistungstests auf Mobilgeräten wird messbar, wenn Sie eine große Anzahl von Leistungstests für verschiedene Gerätemodelle und Betriebssystemversionen durchführen können.

Das Testen der Leistung für ein einzelnes Gerät spiegelt möglicherweise nicht genau wider, was Benutzer tatsächlich erleben, aber die Verwendung von Trends und das Verständnis, wie sich eine einzelne Transaktion über eine Reihe von Gerätemodellen und Betriebssystemversionen hinweg verhält, ergeben ein besseres Bild.

Aber wie skaliert man Leistungstests auf Mobilgeräten, um solche Daten zu messen?

Digital.ai stellt Befehle vor, die in einem funktionalen Appium-Skript implementiert werden können; Das bedeutet, dass wir ein funktionales Automatisierungsskript mit Leistungstests kombinieren können.

Wenn wir uns ein vereinfachtes funktionales Appium-Skript für ein Szenario ansehen, in dem wir die Anmeldefunktionalität einer Anwendung testen, können wir erkennen, dass der Test unkompliziert ist. Zuerst füllen wir das Feld für Benutzername und Passwort aus und klicken auf die Schaltfläche „Anmelden“, bis wir schließlich auf der nächsten Seite landen:

Wenn wir Leistungstests in dieses funktionale Appium-Skript implementieren würden, würde es etwa so aussehen:

Bevor das Skript auf den Login-Button klickt, starten wir eine Performance-Transaktion, und sobald wir auf der nächsten Seite gelandet sind, beenden wir die Performance-Transaktion.

Das Erfassen der Leistungstransaktion zum Ausfüllen des Benutzernamen- und Kennwortfelds ist weniger wichtig, da die Eingabe des Textes aus einem Automatisierungsskript möglicherweise nicht genau wiedergibt, wie lange der Benutzer tatsächlich für die Eingabe seiner Anmeldeinformationen benötigt.

Wir können messen, wie lange es gedauert hat, von der Anmeldeseite zur nächsten Seite zu navigieren, oder ob beim Klicken auf die Schaltfläche „Anmelden“ Spitzen beim CPU-, Speicher- oder Batterieverbrauch aufgetreten sind.

Wir können auch eine andere Netzwerkbedingung simulieren, um zu sehen, wie der Endbenutzer die Anwendung erlebt, wenn er sich unter anderen Netzwerkbedingungen befindet, und das Netzwerkprofil wird als erster Parameter übergeben:

Driver.executeScript(“seetest:client.startPerformanceTransaction(\“4G-average\“)“);

Schauen wir uns die Art der Metriken an, die wir erfassen, und wie sie uns helfen können, den Verlauf der Leistungstransaktion zu verstehen.

Welche Arten von Metriken werden im Rahmen einer Leistungstransaktion erfasst?

Für jede Leistungstransaktion erfassen wir die folgenden Kennzahlen:

  • Dauer: Dauer der gesamten Transaktion, von Anfang bis Ende
  • Geschwindigkeitsindex: Berechnete Gesamtbewertung dafür, wie schnell der endgültige Inhalt gemalt wurde
  • ZENTRALPROZESSOR: Diagramm mit der verbrauchten CPU sowie Durchschnitts- und Maximalwerten für die Transaktion
  • Erinnerung: Diagramm mit dem verbrauchten Speicher sowie Durchschnitts- und Maximalwerten für die Transaktion
  • Batterie: Diagramm mit den verbrauchten Batterie-, Durchschnitts- und Maximalwerten für die Transaktion
  • Netzwerk: Gesamtzahl der während der Transaktion hochgeladenen/heruntergeladenen KBs basierend auf dem angewendeten Netzwerkprofil
  • Netzwerkanrufe: Alle während der Transaktion getätigten Netzwerkanrufe

Was wir betrachten, ist eine einzelne Leistungstransaktion, die auf einem iPhone 13 Pro ausgeführt wurde. Wir können das im Rahmen der Leistungstransaktion aufgenommene Video wiedergeben und in Bezug auf das Video den CPU-, Speicher- und Batterieverbrauch verfolgen.

Wie hilft mir dieser Bericht, Trends und potenzielle Engpässe zu verstehen?

Der Bericht, den wir uns gerade angesehen haben, konzentriert sich auf eine einzelne Leistungstransaktion. Aber stellen Sie sich vor, wenn wir jetzt dieselbe Leistungstransaktion im großen Maßstab über viele Gerätemodelle und Betriebssystemversionen hinweg ausführen würden, könnten wir unsere integrierten Berichtsfunktionen nutzen, um mit der Suche nach Trends zu beginnen.

Hier ist ein Beispielbericht, der gefiltert ist, um alle Transaktionen anzuzeigen, die ich unter einem bestimmten Build und einer bestimmten Transaktion ausgeführt habe (z. B. Suchen nach einem Element im Suchfeld in einer nativen Anwendung und Verstehen, wie lange es gedauert hat, das nächste zu laden). Seite im Kontext einer Einzelhandelsanwendung):

Aus diesem Bericht geht hervor, dass der Geschwindigkeitsindex bei iOS Version 13.2 im Vergleich zu anderen iOS-Versionen deutlich höher war.

Ebenso können wir Trends für die anderen Metriken wie CPU, Speicher und Akku betrachten:

Dieser Informationsstand ermöglicht es QA-Testern und Entwicklern, bestimmte Gerätemodelle und Betriebssystemversionen auf potenzielle Engpässe zu untersuchen und Bereiche für Verbesserungen in der getesteten mobilen Anwendung zu identifizieren.

Es ist wichtig zu beachten, dass es Leistungsunterschiede zwischen verschiedenen Geräten oder Netzwerken geben kann. Es kommt häufig vor, dass zwischen den Geräten eine Abweichung von bis zu 30 % auftritt, was nicht unbedingt auf ein schwerwiegendes Leistungsproblem hinweist. Leistungsprobleme können jedoch zu Unterschieden führen, die das 10- bis 100-fache der Basismessungen betragen.

Muss ich Leistungstests in bestehende funktionale Automatisierungsskripte implementieren?

Ob es sinnvoll ist, Leistungstests in bestehende funktionale Skripte zu implementieren oder neue eigenständige Skripte für Leistungstests zu erstellen, hängt von der Flexibilität und Komplexität des aktuellen Automatisierungs-Frameworks ab.

In dem Beispiel, das ich zuvor gegeben habe, ist der Code zu stark vereinfacht. Lassen Sie uns dennoch über denselben Ansatz im Kontext eines vorhandenen Automatisierungs-Frameworks nachdenken. Beim Aufrufen einer Methode zum Ausführen von Vorgängen wie „Klicken“ oder „Tasten senden“ können viele weitere Abhängigkeiten und Ebenen beteiligt sein.

Schauen wir uns ein Beispiel an:

Das Hinzufügen von mehr Logik zum bestehenden Automatisierungs-Framework könnte die Gesamtzeit erhöhen, die zum Ausführen des automatisierten Skripts erforderlich ist, was sich möglicherweise negativ auf die Leistungstests auswirkt und keine wertvollen Metriken liefert.

Wenn die Komplexität des vorhandenen Automatisierungsframeworks Leistungstests behindert, empfiehlt es sich, separate Automatisierungsskripte ausschließlich zur Erfassung von Leistungsmetriken zu schreiben.

Dadurch können wir die Codelogik bis zu einem gewissen Grad vereinfachen und die entsprechenden Metriken für die Leistungstests genau erfassen.

Welche Art von Benchmark-Zahlen sollte ich festlegen, um sicherzustellen, dass die erfassten Daten messbar sind?

Es gibt keine universellen oder standardisierten Metriken zur Messung der Leistung, da jede Organisation und ihre Teams die Benutzererfahrung für ihre eigene Anwendung definieren. Darüber hinaus können die Benchmark-Zahlen je nach Komplexität der Anwendung von Seite zu Seite oder von Anwendung zu Anwendung variieren.

Ein Beispiel für eine verwendbare Metrik ist TTI (Time-to-Interactivity), die misst, wie lange es dauert, bis eine Anwendung nutzbar ist, nachdem der Benutzer sie gestartet hat.

Hierzu wurden Untersuchungen durchgeführt, und einige hilfreiche Faustregeln, die auf der HCI-Forschung (Mensch-Computer-Interaktion) basieren, sagen uns:

  • Jede Verzögerung über 500 ms wird zu einem „kognitiven“ Ereignis, was bedeutet, dass der Benutzer weiß, dass Zeit vergangen ist.
  • Jede Verzögerung von mehr als 3 Sekunden wird zu einem „reflexiven“ Ereignis, was bedeutet, dass der Benutzer Zeit hat, über die Tatsache nachzudenken, dass Zeit vergangen ist. Sie können abgelenkt werden oder sich entscheiden, etwas anderes zu tun.

Es gibt aber auch andere Kennzahlen, die als wichtige Leistungskennzahlen gelten, wie zum Beispiel:

  • Höchste Reaktionszeit
  • Durchschnittliche Reaktionszeit
  • Maximale Anzahl von Anfragen

Wenn die Reaktionszeit Ihres Servers langsam ist, kann dies die Benutzererfahrung beeinträchtigen. Google PageSpeed ​​Insights empfiehlt eine Server-Antwortzeit von unter 200 ms. Ein Bereich von 300–500 ms gilt als Standard, während alles über 500 ms unter einem akzeptablen Standard liegt.

Es ist wichtig zu beachten, dass es für diese Kennzahlen keine allgemeingültige Antwort gibt und die Bestimmung der Basislinie von Fall zu Fall unterschiedlich sein kann. Daher ist es wichtig zu verstehen, was im Kontext der getesteten Anwendung akzeptabel ist. Dies kann die Zusammenarbeit mit den Anwendungsentwicklern beinhalten, um Einblicke in das Backend der Anwendung zu gewinnen, z. B. die Anzahl der Netzwerkaufrufe, die während eines bestimmten Benutzerflusses getätigt werden, schwere Vorgänge im Backend bei der Interaktion mit bestimmten Anwendungskomponenten und andere damit zusammenhängende Faktoren.

Es kann auch hilfreich sein, einige Leistungstests durchzuführen, um sie dann als Grundlage zu verwenden.

Sollte ich meine Leistungstests auf allen verfügbaren Gerätekombinationen durchführen?

Bei der Entscheidung, welche Geräte für Leistungstests getestet werden sollen, ist es wichtig, diejenigen zu berücksichtigen, die den meisten Umsatz generieren. Um dies festzustellen, ist ein klares Verständnis der Benutzerbasis und der Gerätetypen erforderlich, die für die zu testende Anwendung am häufigsten verwendet werden.

Von dort aus wird empfohlen, die 5–10 besten Geräte auszuwählen, mit denen regelmäßig Tests durchgeführt werden sollen (die genaue Anzahl kann je nach Umfang des Projekts und Benutzerbasis variieren). Dieser Ansatz trägt dazu bei, eine Basislinie für die getesteten Geräte zu erstellen und so genauere Leistungsmessungen zu ermöglichen.

Zusammenfassung

Leistungstests sind von entscheidender Bedeutung, um sicherzustellen, dass Software, Anwendungen und Systeme die erwarteten Lasten und den erwarteten Datenverkehr bewältigen können. Es hilft, Leistungsengpässe und potenzielle Ausfälle bereits im Vorfeld zu erkennen und zu beheben deployDies stellt sicher, dass Endbenutzer ein nahtloses Erlebnis haben.

Im Gegensatz zu herkömmlichen Automatisierungsskripten zielt der Leistungstest darauf ab, die Zeit zu messen, die ein Benutzer zum Navigieren zwischen den Seiten benötigt, Spitzen im CPU-, Speicher- und Batterieverbrauch zu identifizieren und unnötige Netzwerkaufrufe zu lokalisieren.

Der Wert von Leistungstests liegt in der Fähigkeit, Probleme frühzeitig im Entwicklungsprozess zu erkennen und so die Kosten zu senken, die mit der späteren Behebung dieser Probleme verbunden sind. Darüber hinaus hilft es dabei, eine Basis für Leistungsmetriken zu erstellen, die im Laufe der Zeit überwacht und verglichen werden können und Erkenntnisse darüber liefern, wie sich Änderungen im System auf die Leistung auswirken. Leistungstests sind für jeden Softwareentwicklungszyklus von entscheidender Bedeutung, von der Entwicklung bis zum deployment und darüber hinaus.

 

Sind Sie bereit, mit Leistungstests für Mobilgeräte zu beginnen? Kontaktieren Sie uns noch heute unter https://digital.ai/why-digital-ai/contact/ 

Sind Sie bereit, Ihr Unternehmen zu skalieren?

Entdecken

Was gibt es Neues in der Welt von Digital.ai

22. Juli 2024

Zusammenfassung des CrowdStrike-Vorfalls und der Prävention mit Digital.ai Lösungen

Am 19. Juli 2024 wurde ein fehlerhaftes Softwarekonfigurationsupdate von…

Mehr erfahren
15. Juli 2024

Auswahl der richtigen automatisierten Testtools: Eine Einführung

Erfahren Sie, wie Sie das richtige automatisierte Testtool für Ihren Tech-Stack auswählen. Von Testmanagement bis zu Cross-Browser-Tests behandeln wir die wichtigsten Funktionen, die Sie kennen müssen.

Mehr erfahren
8. Juli 2024

Die Logik des Testens: Wie Geschwindigkeit, Sicherheit und Qualität ein perfektes Skript ergeben

Entdecken Sie die Logik des Testens: Wie continuous testing, App-Sicherheit und Zusammenarbeit sorgen für Geschwindigkeit, Sicherheit und Qualität für eine effiziente Softwarebereitstellung.

Mehr erfahren