Calabash Android Handleiding voor het testen van tools

⚡ Slimme samenvatting

Calabash is een open-source acceptatietestframework dat daadwerkelijke gebruikersinterfaceacties uitvoert op Android en iOS-applicaties, in begrijpelijke taal. Cucumber scenario's ondersteund door Ruby-stapdefinities en een testserver aan de apparaatzijde.

  • 🔸 Definitie: Calabash Automatiseert tikken, tekstinvoer en beweringen tegen native en hybride mobiele applicaties op echte apparaten en emulators.
  • ☑️ Taalstapel: Scenario's worden geschreven in Gherkin-featurebestanden en de bijbehorende methoden bevinden zich in Ruby-bestanden binnen de map `step_definitions`.
  • BDD-basis: Behavior Driven Development (BDD) stelt bedrijfseigenaren, ontwikkelaars en testers in staat om het gedrag van het project te bepalen voordat er ook maar één script bestaat.
  • 🧪 Instelvolgorde: Java JDK, dan Ruby, dan Android StudioVervolgens de calabash-android gem, geverifieerd met een versiecommando.
  • Uitvoeringsstroom: Onderteken de APK opnieuw, bouw de testserver, koppel een apparaat, vraag locators op en voer vervolgens de feature-bestanden uit.
  • 📊 Huidige status: Calabash is gearchiveerd en wordt niet meer onderhouden, dus nieuwe projecten kiezen over het algemeen voor Appium, Espresso Of XCUITest in plaats daarvan.

Calabash handleiding voor het testen van een tool Android tonen Cucumber Functiebestanden die een mobiele applicatie aansturen.

Wat is Calabash?

Calabash is een open-source acceptatie Testen raamwerk waarmee u tests voor iOS en iOS kunt schrijven en uitvoeren Android Apps.

Het is een geautomatiseerd framework voor gebruikersinterfaces waarmee tests in Ruby kunnen worden geschreven. Cucumber.

Calabash Het werkt door automatische UI-interacties binnen een mobiele applicatie mogelijk te maken, zoals het indrukken van knoppen, het invoeren van tekst, het valideren van antwoorden, enz. Het kan worden geconfigureerd om op verschillende apparaten te draaien. Android en iOS-apparaten, die realtime feedback en validaties bieden.

⚠️ Versie-opmerking: Microsoft beëindigde zijn bijdragen aan Calabash na de laatste iOS 11 en Android 8 releases, en de calabash-android repository Het project omschrijft zichzelf nu als een project dat op zoek is naar een beheerder. De onderstaande handleiding is ongewijzigd gebleven en de moderne alternatieven worden in het laatste gedeelte behandeld.

Waarom Calabash Automatisering?

Voordat je iets installeert, is het handig om af te wegen wat het framework oplevert ten opzichte van de onderhoudskosten.

Voordelen Nadelen
Het helpt de doorvoer/productiviteit te verhogen. Vaardigheid is vereist om de automatiseringstestscripts te schrijven.
Verbeterde kwaliteit of verhoogde voorspelbaarheid van kwaliteit Het debuggen van het testscript is een groot probleem.
Verbeterde robuustheid (consistentie) van processen of producten. Testonderhoud is kostbaar bij afspeelmethoden.
Verhoogde consistentie van de output en verlaag de arbeidskosten en uitgaven Het onderhouden van testgegevensbestanden is lastig als het testscript meer schermen test

Calabash en BDD

  • Calabash is Gedragsgestuurde ontwikkeling (BDD)Het is hetzelfde als Testgestuurde ontwikkeling (TDD)Maar in plaats van tests te maken om de structuur van API's te beschrijven, wordt het applicatiegedrag gespecificeerd.
  • BDD is een proces waarbij meerdere belanghebbenden hun steentje bijdragen om een ​​gemeenschappelijk begrip te creëren van wat er gebouwd moet worden.
  • BDD helpt bij het bouwen van de juiste software en het ontwerpen vanuit het perspectief van de bedrijfseigenaar.

Het onderstaande diagram laat zien hoe een Calabash De suite is gelaagd, van het voor bedrijven leesbare functiebestand bovenaan tot de interactie met het apparaat onderaan.

Calabash BDD-laagdiagram met weergave van featurebestanden, stapdefinities en de apparaatautomatiseringslaag.

Hoe te installeren Calabash

Calabash on Windows Hiervoor moeten vier vereisten in de juiste volgorde geïnstalleerd zijn. Voltooi elk onderdeel volledig voordat je aan het volgende begint, omdat de calabash-android gem controleert of Ruby en de Android SDK tijdens de installatie.

Deel I) Installeren Java JDK – Raadpleeg deze handleiding – /install-java.html

Deel II) Download en installeer Ruby.

Stap 1) Download Ruby van de URL https://rubyinstaller.org/downloads

RubyInstaller downloadpagina met een overzicht van de beschikbare Ruby-versies. Windows

Stap 2) Open het .exe-bestand en volg de instructies op het scherm. Zodra de installatie is voltooid, ziet u het volgende scherm. Klik op Voltooien.

Het scherm van de Ruby-installatiewizard is voltooid, met de knop 'Voltooien' gemarkeerd.

Start de opdrachtprompt met Ruby ingeschakeld Windows 10 & typ hieronder Commando.

ruby -v

De console geeft de geïnstalleerde interpreterversie weer, zoals hieronder te zien is.

Opdrachtprompt met Ruby die het geïnstalleerde Ruby-versienummer weergeeft

Deel III) Downloaden en installeren Android

Stap 1) Downloaden Android Studio at https://developer.android.com/studio

Android Studio installatiewizard actief op Windows tijdens de installatie

Stap 2) Open het .exe-bestand, volg de instructies op het scherm en voltooi de installatie. Klik op de knop 'Voltooien' als u klaar bent.

Android Studio Installatie voltooid, scherm met de knop 'Voltooien'.

Deel IV) Installeren Calabash Android

Stap 1) Typ in de console `gem install calabash-android`. De installatie start en zal enige tijd in beslag nemen.

Console-uitvoer tijdens de installatie van de calabash-android gem en de bijbehorende afhankelijkheden.

Stap 2) Zodra de installatie is voltooid, typt u calabash-android versie

De console bevestigt de geïnstalleerde calabash-android gem-versie.

Werken met Calabash

Nadat de gem is geïnstalleerd, is de volgende stap het vinden van de frameworkmap en het begrijpen van de structuur die daarin is opgenomen.

Open de map “calabash-android-0.9.0”. Deze bevindt zich op pad C:\Ruby23\lib\ruby\gems\2.3.0\gems\calabash-android-0.9.0. De mapnamen veranderen synchroon met de ruby/calabash-versie die u op uw machine installeert.

Open de feature skeleton-map. Let op dit basiskader.

Calabash Een map met een basisstructuur voor functies, die de mappen 'support' en 'step_definitions' bevat.

  • Het *.feature-bestand bevat scenario's die we gaan automatiseren.
  • De methode die door het featurebestand wordt gebruikt, is geschreven in het *.rb-bestand in de map “step_definitions”.
  • Algemene methoden, omgevingsinstellingen, app-installatie en hooks moeten in de map “support” worden geplaatst.

Neem ontslag en bouw de app

  • Calabash-android resign *.apk
  • Calabash- Android-build *.apk

Het opnieuw ondertekenen vervangt de ontwikkelaarshandtekening door een debugsleutel, zodat de testserver de applicatie kan instrumenteren. De buildstap genereert vervolgens die testserver, zoals de onderstaande console-uitvoer laat zien.

Console-uitvoer van de calabash-android resign- en build-commando's die een testserver produceren.

Sluit het apparaat aan op het systeem /Open de emulator

Controleer of het apparaat is aangesloten. Typ opdracht

adb devices

De lijst met aangesloten apparaten moet worden weergegeven. Als het apparaat ontbreekt, moeten de stappen voor USB-debugging en -koppeling in de handleiding worden uitgevoerd. ADB-verbindingshandleiding lost de meeste gevallen op.

adb devices command listing one attached Android apparaat aan de hand van het serienummer

Hoe u de elementzoeker kunt vinden

  • Open de console. Typ de opdracht.
    calabash-android console "APK Path"
    start_test_server_in_background
  • Bovenstaande opdracht start de app op het apparaat. Om de elementlocator te vinden, gebruikt u de volgende opdracht.
    query "*"

Dit toont alle elementlocators op het huidige scherm. Testers die de voorkeur geven aan een visuele inspecteur kunnen dezelfde hiërarchie controleren met uiautomatorviewer.

Calabash De console print de opgevraagde elementenstructuur voor het huidige toepassingsscherm.

Calabash Projectstructuur en vooraf gedefinieerde stappen

In plaats van de gem-map handmatig te kopiëren, kan het framework een werkend project voor je genereren. Door de generator in je projectmap uit te voeren, creëer je de standaard Cucumber lay-out die elke Calabash suite verwacht.

calabash-android gen

De gegenereerde boomstructuur scheidt de drie aandachtspunten van een BDD-suite:

  • Kenmerken/ — de Gherkin-scenario's, één ervan .functie bestand per gebruikerstraject.
  • functies/stapdefinities/ — de Ruby-methoden die overeenkomen met elke Gherkin-regel, inclusief het meegeleverde calabash_steps.rb.
  • functies/ondersteuning/ — Omgevingsconfiguratie en de hooks die de applicatie installeren, starten en afsluiten in elk scenario.

Het meegeleverde calabash_steps.rb-bestand is belangrijker dan het op het eerste gezicht lijkt. Het bevat een grote set kant-en-klare Engelse stappen, waardoor een eerste scenario knoppen kan indrukken, tekst kan invoeren en zichtbare tekenreeksen kan controleren voordat er ook maar één aangepaste methode is geschreven. Aangepaste stappen zijn pas nodig wanneer een reis de standaardzinnen ontgroeit.

Twee projectinstellingen zijn handig om van tevoren te weten. Screenshots worden standaard in de huidige werkmap opgeslagen, maar de omgevingsvariabele SCREENSHOT_PATH zorgt ervoor dat ze naar een andere locatie worden omgeleid. Dit houdt de build-artefacten netjes op een gedeelde machine. Om met systeemdialoogvensters of een andere applicatie te communiceren, is de UIAutomator2-backend vereist. Deze wordt gestart met start_test_server_in_background(with_uiautomator: true).

Nieuwe scripts maken

Open het feature-bestand en de volgende regels

Het inlogbestand is geopend in een editor en toont de stappen van het Gherkin-scenario.

Feature: Login feature
  Scenario: As a valid user I can log into my app
    When I press "Login"
    And I enter my username
    And I enter my password
    Then I see "Welcome to coolest app ever"

Open het stapdefinitiebestand en definieer de methode in een *.rb-bestand.

Ruby step definition file mapping een Gherkin-lijn naar een Calabash elementquery

Given /^I am on the login windows$/ do
   wait_for(:timeout =>100) { element_exists("* id:'loginInput;")}
   check_element_exists("* id:'loginInput;")
end

Voer het testproject uit

Gebruik de onderstaande opdracht om het testproject uit te voeren

calabash-android run "APK Path" "feature file Path" --tags "tag name"

Cucumber Elke stap wordt afgedrukt tijdens de uitvoering, en een geslaagde run eindigt met het scenario en de totalen van de stappen zoals hier weergegeven.

Calabash De uitvoer toont elke Gherkin-stap die op het apparaat wordt uitgevoerd.

Calabash De console geeft een overzicht van de geslaagde scenario's en het aantal stappen na de uitvoering.

Veelgestelde Calabash Fouten en hoe je ze kunt oplossen

De meeste fouten bij de eerste testrun worden veroorzaakt door de verpakking en de toegangsregels waarvan de testserver afhankelijk is, en niet door het scenario zelf. De onderstaande tabel koppelt de meest gemelde symptomen aan hun gedocumenteerde oorzaak.

Symptoom Mogelijke oorzaak en oplossing
De applicatie crasht zodra een test begint. De APK mist de machtiging android.permission.INTERNET, die de testserver nodig heeft om commando's te accepteren. Declareer deze machtiging in AndroidManifest.xml en herbouwen.
Knoppen en tekst reageren niet op aanrakingen. Er is geen targetSdkVersion opgegeven. Voeg een uses-sdk-vermelding toe met de naam van het SDK-niveau waarmee de applicatie is gebouwd.
De testserver kan geen verbinding maken met de applicatie. De APK is niet opnieuw ondertekend met de debug-sleutel. Voer de opdracht 'opnieuw ondertekenen' uit en bouw het project opnieuw voordat u het uitvoert.
Er worden geen apparaten weergegeven tijdens de uitvoering. USB-debugging is uitgeschakeld of het stuurprogramma ontbreekt. Controleer eerst of het serienummer in de uitvoer van `adb devices` verschijnt.
Stappen mislukken met een ongedefinieerde stapfout. De Gherkin-formulering komt niet overeen met een reguliere expressie in step_definitions. Kopieer het voorgestelde codefragment. Cucumber print het uit en voer het uit.

Twee manifestvermeldingen corrigeren de eerste twee regels. Voeg ze toe voordat u het APK-bestand opnieuw ondertekent.

<uses-permission android:name="android.permission.INTERNET" />
<uses-sdk android:targetSdkVersion="SDK_VERSION" />

Time-outfouten zijn meestal omgevingsgerelateerd in plaats van functioneel. Een trage emulator, een koude start van de applicatie of een synchronisatie op de achtergrond kunnen ervoor zorgen dat een scherm de wait_for-periode overschrijdt. Verhoog daarom de time-out voordat een stap die eigenlijk correct was, opnieuw wordt uitgevoerd.

Is Calabash Wordt het nog steeds onderhouden? Alternatieven voor modern mobiel testen

Calabash wordt niet langer actief ontwikkeld. Microsoft stopte met bijdragen na de ondersteuning van de laatste iOS 11-versie. Android Na 8 releases is het project nu een gearchiveerde open-source codebase zonder beheerder. Bestaande softwarepakketten werken nog steeds op oudere apparaten, maar er moet worden begonnen met de ontwikkeling van een ondersteund framework.

Kader Platform Het meest geschikt voor:
Appium Android en iOS Cross-platform suites in Java, Python, Ruby of JavaScript, en de beste vervanging voor een Calabash team.
Espresso Android Slechts Snelle tussentijdse tests geschreven in Kotlin of Java door de applicatieontwikkelaars zelf.
XCUITest alleen iOS Native Xcode suites, de ondersteunde opvolger van de gepensioneerde UIAutomation-framework.
Maestro en Detox Android en iOS Nieuwere open-sourceprojecten gericht op flake-resistentie en React Native-applicaties.

De BDD-gewoonte zelf wordt probleemloos overgenomen. Gherkin-featurebestanden blijven exact zoals ze zijn, en alleen de stapdefinitie-body's veranderen, omdat Cucumber zit boven de driver in plaats van erin. Teams die migreren behouden meestal de feature-bestanden en herschrijven de Ruby-stappen. Appiumen hergebruik hetzelfde mobiel testen apparaatmatrix en automatisering testen pijplijn die ze al gebruiken.

Veelgestelde vragen

Ja. Een aparte calabash-ios gem stuurde iOS-applicaties aan via dezelfde Ruby-code. Cucumber laag. Het deelt de status van afschrijving van de Android gem, dus huidige iOS-ontwikkelingen kunnen beter worden uitgevoerd met XCUITest of Appium.

Machine learning-modellen repareren nu automatisch defecte locators, signaleren onbetrouwbare scenario's door uitvoeringsgeschiedenissen te vergelijken en groeperen crashrapporten zodat de meest schadelijke defecten als eerste aan het licht komen. De beslissing welke tests moeten worden uitgevoerd, blijft echter bij de tester.

Copilot schrijft de repetitieve onderdelen goed, zoals een wait_for-blokomloop.ping Een elementquery. Deze kent de element-ID's van uw applicatie niet, dus beschouw elke gegenereerde stap als een concept dat u moet controleren aan de hand van het resultaat van een live query.

Cucumber is de generieke BDD-runner die Gherkin leest en Ruby-methoden aanroept. Calabash Is de mobiele automatiseringsbibliotheek de methode die wordt aangeroepen? Cucumber beslist wat er gebeurt; Calabash Voert de tik, de tekstinvoer en de bewering uit.

Screenshots worden standaard opgeslagen in de huidige werkmap en krijgen bij elke uitvoering een opeenvolgende naam. Door de omgevingsvariabele SCREENSHOT_PATH vóór de uitvoering in te stellen, worden ze naar een gekozen map omgeleid, waardoor continue integratie-artefacten gescheiden blijven van de broncode.

Nee. Calabash Instrumenteert een gecompileerde APK, vandaar het bestaan ​​van de herondertekeningsstap. Toegang tot de broncode helpt je bij het toevoegen van stabiele element-ID's, maar het framework zelf heeft alleen een build nodig die het mag herondertekenen en instrumenteren.

Ja. Omdat de uitvoering een enkele opdrachtregelopdracht is, kan elke buildserver deze aanroepen nadat de APK is geproduceerd. Jenkins De taak omvat doorgaans het verwijderen van het APK-bestand, het starten van een emulator, het uitvoeren van de gemarkeerde functies en het archiveren van de rapporten.

Laat de Gherkin-functiebestanden ongewijzigd en herschrijf alleen de stapdefinitie-body's. Appium Client. Elementquery's worden locatorstrategieën en de hooks die de applicatie hebben geïnstalleerd, worden gewenste mogelijkheden in de driverconfiguratie.

Vat dit bericht samen met: