UI-Automatisierungsmuster und Best Practice für Desktop-Anwendungen

9

Hintergrund

Ich automatisiere derzeit einige Tests für ein Plugin für MS Office. Wir erstellen Coded UI-Tests in VS 2010. Ich nehme an, ich könnte das Tool " Coded UI Test Builder " verwenden, aber es passt nicht wirklich zu meinem speziellen Fall.

Aus diesem Grund habe ich meine eigene UI-Map-Klasse und Erweiterungsmethoden für jedes UI-Steuerelement / Map erstellt, in denen ich verschiedene Aktionsfunktionen hinzufüge. Drücken Sie beispielsweise die Tasten oder bestätigen Sie einige UI-Werte.

Die Szenarien der Testfälle befinden sich in den Testklassen.

Ich bin neu in diesem Bereich und auch neu in der Arbeit als Automatisierungstester.

Die Frage

Wären die Leute so freundlich, ihre Erfahrungen und Ratschläge für einige bewährte Methoden zur Testautomatisierung auf Desktop-Anwendungen aus Programmier- / Design-Sicht zu teilen?

CoffeeCode
quelle
Eine meiner Hauptaufgaben ist die Automatisierung der Benutzeroberfläche ... und ich habe mich ein halbes Dutzend Mal beim Lesen dieser Frage verlaufen. Ich habe keine Ahnung, was die Hälfte der von Ihnen verwendeten Fachbegriffe bedeutet. Ist diese Frage spezifisch für eine Umgebung oder Sprache? Das sollte wahrscheinlich ein Tag sein.
Sparr
@Sparr Ich habe die Frage bearbeitet, um sie zugänglicher zu machen. Hoffe es passt noch die Anforderung.
Gary Rowe

Antworten:

6

Die beste Vorgehensweise für UI-Automatisierungstests besteht darin, so wenig wie möglich zu tun. Benutzeroberflächen ändern sich häufig, was bedeutet, dass Sie Ihre Automatisierung ständig aktualisieren müssen. Im Allgemeinen ist es vorzuziehen, den Produktcode so zu strukturieren, dass automatisierte Tests ohne UI-Automatisierung möglich sind.

Das heißt, Sie können UI Automation nicht immer loswerden. Sie erwähnen Office, also gehe ich davon aus, dass Sie für Windows codieren und .Net verwenden. Ich mache ziemlich viel in meinem aktuellen Job. Hier sind einige der Dinge, die ich gelernt habe.

1) Sehen Sie sich die UIAutomation-Bibliotheken an, die in .Net 3.0 eingeführt wurden. Sie bieten eine umfangreiche und recht einfach zu verwendende Bibliothek für die Automatisierung. (http://msdn.microsoft.com/en-us/library/ms753107.aspx)

2) Laden Sie UISpy herunter (http://msdn.microsoft.com/en-us/library/ms727247.aspx)

3) Machen Sie die Benutzeroberflächen Ihres Produkts automatisierbar.

3a) Wenn es WPF ist, setzen Sie AutomationIDs auf alles.

3b) Versuchen Sie, eindeutige Steuerungs- und Fensterklassennamen zu erstellen (UI-Klassennamen, nicht Quellcode-Klassenname). Wenn Sie nicht wissen, was ich meine, laden Sie UI Spy und sehen Sie sich Windows an. Beachten Sie, wie viele Fenster in verschiedenen Apps den Klassennamen # 32770 haben. Dies ist der Klassenname für ein Windows-Dialogfeld. Jedes Fenster, das den Dialog erweitert und keinen eigenen Namen festlegt, ist standardmäßig so eingestellt. Dies verursacht vom Standpunkt der UI-Automatisierung aus allerlei Kummer.

4) Vermeiden Sie Thread.Sleep () -Anweisungen. Versuchen Sie stattdessen, Kellner zu verwenden (siehe UIAutomation-Dokumente).

5) Mischen Sie NIEMALS den Testcode mit dem UI-Automatisierungscode. Erstellen Sie separate Bibliotheken, um die UI-Automatisierung durchzuführen. Rufen Sie diese Bibliotheken aus Ihren Tests auf. Wenn sich die Benutzeroberfläche ändert, wird das Aktualisieren der Automatisierung erheblich vereinfacht.

6) Registrieren Sie immer einen Listener für ein UI-Ereignis, bevor Sie die Aktion ausführen, die das Ereignis auslösen würde. In der Praxis bedeutet dies, dass Sie mit Threads arbeiten.

6a) Beispiel: Warten Sie nicht auf ein Ereignis "Fenster geöffnet", nachdem Sie auf eine Schaltfläche geklickt haben, um das Fenster zu öffnen. Das Fenster kann sich öffnen, bevor der Kellner registriert ist und die Veranstaltung nie erhält.

7) Nehmen Sie niemals an, dass das gerade geöffnete Fenster das gewünschte ist. In Windows werden möglicherweise alle Arten von Fenstern unerwartet geöffnet.

Ich könnte noch weiter machen, aber das wird ein bisschen lang.

aef123
quelle
1) - 3) ist für Personen gedacht, die den zu prüfenden Antrag schreiben. 6) war auch für mich ein hartes Lernen. :)
Andreas Reiff
2

Erstellen Sie Funktionstests aus wiederverwendbaren Anwendungsfällen

Wenn es an der Zeit ist, Ihre Anwendung vor Ort zu testen, führen Sie Funktionstests durch. In der Regel haben Sie eine Reihe von Anforderungen, anhand derer Sie testen, und Sie können verschiedene Anwendungsfälle erstellen, die diese darstellen.

Betrachten Sie als Beispiel den Anwendungsfall "Als Standardbenutzer anmelden". Ihr Testframework startet die Anwendung, wartet auf den Anmeldebildschirm, gibt einige Anmeldeinformationen ein, klickt auf die Anmeldeschaltfläche und überprüft, ob auf dem entsprechenden Bildschirm jetzt angezeigt wird, dass die Anmeldung erfolgreich war.

Nachdem Sie den Anwendungsfall "Als Standardbenutzer anmelden" ausgeführt haben, möchten Sie darauf aufbauen, um etwas anderes zu tun, z. B. den Anwendungsfall "Meine Benutzerdetails bearbeiten". Sie möchten nicht den gesamten Code aus dem Anwendungsfall "Als Standardbenutzer anmelden" wiederholen, sondern verweisen lediglich auf den Test-Framework-Code, der dieses Bit ausführt.

Dies bedeutet, dass Sie eine Art übergreifenden Funktionstest haben, der eine Liste von Anwendungsfällen enthält. Diese Anwendungsfälle enthalten die Testframework-Methoden, um das Anwendungsverhalten zu verursachen (klicken Sie auf die Schaltfläche X) und das Verhalten zu überprüfen (Bildschirm wird blau).

Insgesamt können Sie eine Reihe wiederverwendbarer Anwendungsfälle erstellen, die auf bestimmte Sequenzen abzielen und auf bestimmte Antworten testen, und diese dann zu verschiedenen Funktionstests zusammenfassen, die eng mit den Geschäftsanforderungen korrelieren. Sobald Sie dies eingerichtet haben, können Sie Ihren gesamten Erstellungsprozess vollständig automatisieren .

Wenn Sie weiterlesen möchten, habe ich an anderer Stelle über diesen Ansatz geschrieben. Der Artikel zielt jedoch eher auf Webanwendungen in Java (mit Maven und SeleniumRC) als auf von Ihnen angeforderte Desktopanwendungen ab.

Gary Rowe
quelle