Android- und iOS-UI-Tests mit Calabash
Veröffentlicht: 2022-03-11Das Testen ist ein wesentlicher Bestandteil jedes Entwicklungsprozesses für mobile Apps. Unabhängig davon, ob Sie solche Tests automatisieren oder nicht, betrachtet kein vernünftiger Entwickler seine Arbeit als erledigt, es sei denn, er hat seine App getestet.
Eine gut getestete App durchläuft normalerweise mehrere Testschritte: Unit-Tests, Integrationstests, Akzeptanztests und so weiter. Wenn Ihre App wächst, nimmt die Bedeutung des Testens zu und die Automatisierung beim Testen wird zu einer Notwendigkeit.
Während andere Plattformen, wie das Web, in Bezug auf Testmechanismen und Frameworks deutliche Fortschritte gemacht haben, hinkt der mobile Bereich nicht hinterher. In diesem Artikel erfahren Sie, wie Sie Calabash verwenden können, um die Benutzeroberfläche für Ihre Android- und iOS-Apps mit einfachen englischen Anweisungen zu automatisieren und Akzeptanztests so einfach wie möglich zu gestalten.
Worum geht es beim UI-Testen?
Wenn Sie Ihre Apps manuell getestet haben, verschwenden Sie wahrscheinlich einen großen Teil Ihrer Zeit damit, immer wieder dieselben Aufgaben zu erledigen. Sie nehmen einige Änderungen am Code vor, erstellen die App, führen sie auf einem Gerät oder einem Emulator aus und spielen mit der App herum, um herauszufinden, ob sie wie erwartet funktioniert.
Durch die Automatisierung von UI-Tests können Sie dieselben manuellen Schritte automatisch durchführen. Wenn Ihre App eine anständige Größe hat, kann dies viel Zeit sparen und auch verhindern, dass Ihre App mit peinlichen Fehlern übersät ist, insbesondere mit Regressionsfehlern.
„Das klingt großartig“, sagen Sie, aber wie machen Sie das für Ihre Android- oder iOS-App?
UI-Test-Frameworks für Android und iOS
Wenn Sie die offizielle Dokumentation für Android und iOS lesen, schlagen sie vor, dass Sie UI-Tests in ihren offiziellen IDEs schreiben und ausführen. Für Android ist es Android Studio und für iOS Xcode.
Die offizielle Dokumentation geht so weit, spezifische Frameworks zum Testen zu empfehlen. Die offizielle Android-Dokumentation behandelt einige Themen zu Espresso, dem Android-UI-Testframework. In ähnlicher Weise schlägt Apple vor, das XCTest-Framework zu verwenden.
Und wenn Sie ernsthaft an UI-Tests arbeiten, befolgen Sie möglicherweise diese Vorschläge, was sinnvoll ist, da Espresso von Google verwaltet wird und Teil des Android Support Repository ist. Es ist sehr wahrscheinlich, dass Espresso alle neuen Funktionen unterstützen wird, die Google in Zukunft für Android einführen wird. Dasselbe könnte man über das XCTest-Framework für iOS sagen.
Es sollte jedoch beachtet werden, dass trotz der zahlreichen Vorteile automatisierter Tests viele Entwickler sie einfach überhaupt nicht schreiben.
Jeder Entwickler, der tief in sich mit Testautomatisierungen vertraut ist, weiß, dass dies eine großartige Idee ist. Aber wenn es darum geht, sich hinzusetzen und diese Tests zu schreiben, fragen sich viele Entwickler, ob es ihre Zeit wert ist, weil sich herausstellt, dass das manuelle „Berühren der Schaltfläche“ viel schneller ist als das Schreiben eines Codes, der „diese Schaltfläche berührt“. automatisch. Manchmal helfen auch Kunden und Manager nicht weiter, die gespannt darauf warten, die App auszuprobieren.
Viele Entwickler entscheiden sich an diesem Punkt, dass es besser ist, weiter an neuen Funktionen der Anwendung zu arbeiten, anstatt automatisierte UI-Tests für die vorhandenen zu schreiben.
Wenn die Anwendung wächst, wird es immer zeitaufwändiger, jedes Mal, wenn Sie die Anwendung aktualisieren, manuell „auf diese Schaltflächen zu tippen“.
Aber was wäre, wenn es ein Framework gäbe, das UI-Tests einfacher macht und Ihnen keine Entschuldigung dafür gibt, keine UI-Tests für Ihre Apps zu schreiben?
Lernen Sie Kalebasse kennen.
Calabash: Automatisierter Akzeptanztest für mobile Apps
Vor ungefähr einem Jahr begann ich mit der Suche nach einem Test-Framework, das für Leute, die keine Softwareentwickler sind, einfach zu verwenden ist. Und da fand ich Calabash.
Dieses Open-Source-Testframework, das vom Xamarin-Team entwickelt und gepflegt wird, funktioniert sowohl für Android als auch für iOS. Damit können Sie automatisierte Akzeptanztests für mobile Anwendungen schreiben und ausführen.
Akzeptanztests sind im Allgemeinen das, was nach Systemtests kommt, die bestimmen, ob Ihre App die Geschäftsanforderungen erfüllt. Da es auf der UI-Ebene arbeitet, funktioniert dies gut als Framework für die Automatisierung von UI-Tests.
Calabash kann wie Espresso oder XCTest mit Ihrer App interagieren. Was Calabash hier jedoch zu einer ausgezeichneten Wahl macht, ist die Unterstützung für Cucumber.
Cucumber ist ein Tool, das automatisierte Tests ausführen kann, die in einfachem Englisch geschrieben sind (wenn Sie möchten, können Sie es anpassen, um jede andere einfache Sprache zu verwenden). Um also automatisierte Tests auf Cucumber zu schreiben, muss der Tester weder Java, Objective-C noch irgendeine andere Programmiersprache beherrschen.
Wie tickt Kalebasse?
Das Calabash-Framework besteht aus Bibliotheken, die mit den Android- und iOS-Apps interagieren können. Es kann auf echten Geräten ausgeführt werden. Es kann also Dinge tun, die der Tester manuell tut.
Es gibt zwei verschiedene Projekte auf GitHub, die Calabash möglich machen:
calabash-android - für Android
calabash-ios - für iOS
Calabash kann mit jedem Ruby-basierten Testframework arbeiten. In diesem Artikel behandeln wir Cucumber - die beliebteste und bequemste Art, Tests für Calabash zu schreiben.
Bevor Sie fortfahren und Calabash ausprobieren möchten, während Sie dem Rest des Artikels folgen, vergewissern Sie sich, dass Ruby auf Ihrem Computer installiert ist. Eine ausführliche Installationsanleitung finden Sie hier.
Installieren Sie als Nächstes Calabash für Ihre bevorzugte Plattform, indem Sie den obigen GitHub-Links folgen.
Schreiben Sie Ihren ersten Test auf Calabash
Das Schreiben von Tests auf Calabash ist ziemlich einfach. Mal sehen, wie ein einfacher Test für eine iOS-App aussieht:
Feature: User Login Scenario: Unsuccessful user login Given the app has launched Then I wait for the "Login" button to appear When I enter "tstuser" into the "Username" field And I enter "qwerty" into the "Password" field And I touch "Login" Then I should see "Username you entered is incorrect" Scenario: Successful user login Given the app has launched Then I wait for the "Login" button to appear When I enter "testeruser" into the "Username" field And I enter "qwerty" into the "Password" field And I touch "Login" Then I should see "Hey testeruser!"
Hier wird eine App mit falschem Benutzernamen und Passwort getestet und dann mit korrektem Benutzernamen und Passwort. Der Test geht davon aus, dass die Anmeldung der App im ersten Szenario fehlschlägt, im zweiten jedoch erfolgreich ist.
Sie können beliebig viele Szenarien erstellen, und alles, was Sie tun müssen, ist, die Schritte/Anweisungen in einfache englische Sätze zu unterteilen. Als würde man eine Geschichte schreiben!
Jeder, der sich mit Behavior Driven Development (BDD) auskennt, wird damit bereits vertraut sein.
Wie funktioniert Kalebasse?
Um zu sehen, was hinter den Schritten passiert, die der Tester verwendet, können Sie das Projekt auf GitHub öffnen und die folgende Datei überprüfen:
calabash-cucumber/features/step_definitions/calabash_steps.rb
Sehen wir uns eine Definition des folgenden Schritts an:
When I enter "testeruser" into the "Username" field
Then /^I enter "([^\"]*)" into the "([^\"]*)" field$/ do |text_to_type, field_name| touch("textField marked: '#{field_name}'") wait_for_keyboard keyboard_enter_text text_to_type sleep(STEP_PAUSE) end
Dieses kleine Ruby-Code-Snippet sucht nach einem bestimmten Feld, berührt es, wartet darauf, dass die Tastatur erscheint, gibt den Text aus der Variable text_to_type
ein und wartet eine Weile, bevor es zum nächsten Schritt wechselt.
Das erste Wort des Schritts kann „Gegeben“, „Wann“, „Dann“, „Und“ oder „Aber“ sein. Es spielt keine Rolle, welches Schlüsselwort Sie verwenden werden. Sie können jeden von ihnen verwenden, um die Geschichte klarer zu machen.
So fügen Sie benutzerdefinierte Schritte hinzu
Wenn Sie einen Schritt benötigen, der noch nicht in Calabash implementiert ist, können Sie ihn selbst schreiben. Die Syntax ist genau die gleiche wie bei bereits vordefinierten Schritten.
Wenn ein Tester beispielsweise auf das Eingabefeld über einen Platzhalter statt über den Feldnamen zugreifen muss:
Then /^I enter "([^\"]*)" into the field with placeholder "([^\"]*)"$/ do |text_to_type, placeholder| touch("textField placeholder:'#{placeholder}'") wait_for_keyboard() keyboard_enter_text text_to_type sleep(STEP_PAUSE) end
Diese Schrittdefinition ist weitgehend die gleiche wie die vorherige, aber Sie greifen auf das Feld über einen Platzhalter statt über den Feldnamen zu. Je nachdem, wie Ihre App aussieht, kann dies die Arbeit für den Tester noch einfacher machen.
Und es ist auch für den Entwickler einfach. Der Entwickler implementiert den Schritt einmal und der Tester verwendet ihn dann, wann immer er ihn benötigt. Darüber hinaus müssen Sie nicht viel Ruby kennen, um Ihre eigenen benutzerdefinierten Schritte zu implementieren.
Hier finden Sie die Ruby-Funktionen, die Sie verwenden können:
http://www.rubydoc.info/gems/calabash-cucumber/Calabash/Cucumber
Xamarin-Testcloud
Beim Testen mobiler Anwendungen gibt es noch eine weitere Herausforderung. Sie sollten sie auf so vielen Geräten wie möglich testen, da es so viele Geräte und so viele Betriebssystemversionen gibt.
Hier hilft Xamarin Test Cloud sehr. Es gibt ungefähr 2.000 echte Geräte in der Cloud und die gute Nachricht ist, dass sie Calabash-Tests unterstützt.
Dieselben Calabash-Tests, die Ihnen dabei geholfen haben, Zeit zu sparen, indem Sie sich wiederholende Arbeiten ersparen, können jetzt zum Testen Ihrer Anwendung auf vielen realen Geräten verwendet werden.
Beginnen Sie mit dem Schreiben von UI-Tests
Ob Calabash die Testlösung ist, die Ihre App benötigt, mit den Vorteilen, die es mit sich bringt, lässt es keinen Raum für Ausreden, wenn es darum geht, automatisierte UI-Tests für Ihre mobilen Apps zu schreiben. Calabash kann zu kurz kommen, wenn Ihre App stark auf bestimmte Gerätefunktionen (z. B. die Kamera) angewiesen ist, aber es macht das Schreiben von Tests für die meisten Apps immer noch viel einfacher.