2016-04-13 8 views
1

Testfall:Wie können Sie in Xamarin Test Cloud gleichzeitige Tests auf mehreren Geräten für eine App ausführen, die angemeldete Benutzer verwendet?

Benutzer Bücher ein Hotelzimmer. Der Benutzerstatus ändert sich in booked_room. Dieser Raum ist für andere angemeldete Benutzer nicht mehr verfügbar. Nach der Buchung des Zimmers führt der Benutzer andere Aufgaben basierend auf dem gebuchten Zimmer durch.

Das Problem ist:

Wenn wir diesen Test auf mehreren Geräten gleichzeitig mit dem gleichen Benutzerkonto ausgeführt wird, wird der Test nur auf dem ersten Gerät übergeben. Wenn der Test auf dem zweiten Gerät ausgeführt wird, fordert die App den Benutzerstatus an und zeigt die Zimmerliste nicht an, da der Benutzer bereits eine auf dem vorherigen Gerät ausgewählt hat, wodurch der Test fehlgeschlagen ist, da die REPL keinen Raum in der Elementstruktur gefunden hat.

Jeder einzelne Test meiner Suite beginnt mit dem Login-Prozess.

Haben Sie dieses Problem mit der Xamarin Test Cloud gelöst? Sollte ich eine serverseitige Lösung implementieren, um jedes Mal, wenn die Testsuite ausgeführt wird, eine Datenbankinstanz zu erstellen?

Danke :)

Antwort

2

Dies ist ein Problem, das nicht nur auf die testcloud verwandt ist. Die Wiederholbarkeit von Tests ist immer ein Problem, wenn eine Datenbank/gemeinsame Ressource beteiligt ist ^^

Die Antwort hängt davon ab, was Sie mit diesen UI-Tests erreichen möchten.

Eine Möglichkeit wäre zwischen Integrationstest und UI-Test zu unterscheiden.

  • Integration:

    • Testen Sie die Web-API und der Verbraucher
    • Services, die Ihre API verbrauchen werden als Einheit ausgeführt testet
  • UI:

    • Testen Sie das visuelle Erscheinungsbild (und App-Logik)
    • Mock die Dienste für die UI-Tests (verwenden BookingServiceMock statt BookingService für IBookingService) Ich hoffe, Sie verwenden Dependency Injection :) Der Vorteil dieses Ansatzes ist, dass Sie kann Backdoors verwenden, um deinen Schein (z. B. Fehlerfälle simulieren).

Der Nachteil sind:

  • Sie haben keinen Systemtest, weil die App nie mit der eigentlichen Backend-Gespräche.
  • Ihre App im Test unterscheidet sich von der App im App Store (auf iOS es normal ist, weil Sie die Test-Runner-Bibliothek in die App-Link)

Sie diese mit einem separaten Testsuite lösen könnte, die ausgeführt wird nach der Integration und UI-Tests nur auf einem Android-Gerät und dann auf einem iOS-Gerät.

+0

Ich verwende eine Serviceklasse (diejenige, die die API-Aufrufe tatsächlich ausführt), die in dem freigegebenen Projektcode definiert ist, der von den Android- und iOS-Projekten instanziiert und aufgerufen wird. Was ich aus Ihrer Antwort verstehe, ist, dass ich jedes Mal, wenn die Test-Suite ausgeführt wird, eine Datenbank-Kopie lokal auf jedem Gerät erstellen soll? – albertoms

+1

Nein Ich würde die Implementierung der Serviceklasse durch einen Schein ersetzen (der Daten einfach so zurückgibt, wie Sie möchten). Sie können also jedes Szenario simulieren, ohne Daten in die Datenbank zu schreiben/Ihren Webservice anzurufen. –

+0

UITest und Calabash (iOS und Android) unterstützen "Backdoor" -Aufrufe für Ihre App. Es ist üblich, diese "Hintertür" -Aufrufe zu verwenden, um Ihre App in einen guten Teststatus zu versetzen. In diesem Fall könnten Sie eine Hintertür implementieren, die das tut, was Sven-Michael Stübe vorschlägt. – jmoody

2

Für einen relativ einfachen Ansatz (abhängig von Ihrer App und Ihrem Testcode) können Sie für jeden gleichzeitigen Test (Gerät) einen anderen Satz von Benutzerdaten verwenden und verschiedene Räume buchen. In Ihrem Testcode würden Sie dann eine Sammlung von Benutzeranmeldeinformationen, Raumnummern und anderen Variablen haben, die sich pro gleichzeitigen Test unterscheiden sollten.

Xamarin Test-Wolke hat eine Umgebungsvariable XTC_DEVICE_INDEX:

Dieser String im Bereich von 0 bis N-1 ist, wobei N die Anzahl der Geräte ist der Test auf ausgeführt wird. Diese Variable ist nützlich in Situationen , wo derselbe Test parallel auf mehreren Geräten ausgeführt wird. Der Wert von XTC_DEVICE_INDEX ist für jedes Testskript eindeutig, das unter für ein bestimmtes Gerät ausgeführt wird. Xamarin Test Cloud Environment Variables

Dies funktioniert, wenn Sie nur die Ausführung einen Testlauf haben (auf mehreren Geräten) zu einem Zeitpunkt. Wenn eine zweite Testreihe vor der ersten beendet wird, würde sie versuchen, die gleiche Menge von Variablen wie die erste Testreihe zu verwenden. Wenn Sie dies unterstützen möchten, können Sie einen Webdienst bereitstellen, mit dem der Testcode die Benutzeranmeldeinformationen (und andere zugehörige Variablen) auschecken oder einen Schlüssel oder Index für die Auswahl der richtigen Werte aus den im Testcode eingebetteten Elementen verwenden kann.