GUI-Automatisierungstest - Fenster-Handle-Fragen


2

Unser Unternehmen schreibt gerade ein GUI-Automatisierungstester für kompakte Framework-Anwendungen. Wir haben zunächst viele Tools durchsucht, aber keine war für uns richtig.

Mithilfe des Tools können Sie Testfälle aufzeichnen und sie zu Test-Suites zusammenfassen. Für jede Testsuite wird eine Anwendung generiert, die die zu testende Anwendung startet und die Benutzereingabe simuliert.

Im Allgemeinen funktioniert das Tool gut, aber da wir Fenstergriffe für Simulation Benutzereingabe verwenden, können Sie nicht viele Dinge tun. Zum Beispiel ist es unmöglich für uns, den Namen eines Steuerelements zu erhalten (wir erhalten nur die Überschrift).

Ein weiteres Problem bei der Verwendung von Fenstergriffen ist die Überprüfung auf eine Änderung. Im Moment simulieren wir einen Klick auf ein Steuerelement und abhängig vom Ergebnis wissen wir, ob die Anwendung zum nächsten Schritt gegangen ist.

Gibt es eine andere (einfachere) Möglichkeit, solche Dinge zu tun (zum Beispiel die Nachrichtenwarteschlange oder irgendetwas anderes)?

1

Wenn das automatisierte GUI-Test-Tool über das Framework verfügt, in dem die Anwendung geschrieben ist, könnte es diese Informationen verwenden, um bessere oder erweiterte Skripte zu erstellen. TestComplete zum Beispiel kennt Borland VCL und WinForms. Wenn Sie Anwendungen testen, die mit Windows Presentation Foundation erstellt wurden, unterstützt diese Version build in.


2

Interessantes Problem! Ich habe seit einiger Zeit keine Low-Level (denke Win32) Windows-Programmierung, aber hier ist, was ich tun würde.

Verwenden Sie eine Named Pipe und lassen Sie Ihre Anwendung darauf hören. Verwenden Sie diese Named Pipe als Kommunikationsmedium, implementieren Sie ein echtes einfaches Protokoll, mit dem Sie die Anwendung nach dem Namen eines Steuerelements abfragen können, wenn Sie HWND oder andere nützliche Dinge verwenden. Stellen Sie sicher, dass das Protokoll reich genug ist, sodass genügend Informationen zwischen Ihrer Anwendung und dem Testframework ausgetauscht werden. Stellen Sie sicher, dass das Testframework nicht zu viel "besonderes Verhalten" von der App liefert, denn dann würden Sie nicht wirklich die Features testen, sondern Ihr Testframework.

Es gibt wahrscheinlich viel elegantere und coolere Möglichkeiten, dies zu implementieren, aber das ist, woran ich mich von ganz oben erinnere, mit nur einfachen Win32 API-Aufrufe.

Ein anderer Ansatz, den wir für unser Produkt bei der Arbeit implementiert haben, besteht darin, Benutzerereignisse wie Mausklicks und Schlüsselereignisse in einem Ereignisskript aufzuzeichnen. Dies sollte reich genug sein, damit Sie die Anwendung abspielen lassen können, indem Sie diese Ereignisse künstlich in die Nachrichtenwarteschlange einfügen und sich so verhalten, wie sie es bei der ersten Aufzeichnung des Skripts getan haben. Sie simulieren grundsätzlich den Benutzer, wenn Sie das Skript wiedergeben.

Darüber hinaus können Sie alle wichtigen Status (Benutzerdokument, Voreinstellungen, GUI-Steuerelemente, Hierarchie usw.) einmal aufzeichnen, wenn Sie das Skript aufzeichnen, und einmal, wenn Sie es wiedergeben. Dies gibt Ihnen zwei Datensätze, die Sie vergleichen können, um sicherzustellen, dass zum Beispiel alles gleich bleibt. Diese Lösung bietet Ihnen Tests, die nicht einfach zu ändern sind (Sie müssen neu aufzeichnen, wenn sich Ihre GUI ändert), aber sie bieten großartige Regressionstests.

(EDIT: Dies ist auch ein tolles QA-Tool während der Beta-Tests, zum Beispiel: einfach Ihre Benutzer ihre Aktionen aufzeichnen, und wenn es einen Absturz gibt, haben Sie eine gute Chance, das Problem einfach durch die Wiedergabe der Skript)

Viel Glück!

Carl


0

Ich fand schließlich eine Lösung zwischen der Testanwendung und der Anwendung unter Test zu kommunizieren: Managed Spy. Es ist im Grunde eine .NET-Anwendung, die auf ManagedSpyLib aufbaut.

ManagedSpyLib ermöglicht den programmgesteuerten Zugriff auf die Windows Forms-Steuerelemente eines anderen Prozesses. Dazu verwendet es Window Hooks und Memory-Mapping-Dateien.

Danke für alle, die mir geholfen haben, zu dieser Lösung zu kommen!


0

Managed Spy bietet keine Lösung für kompakte Framework-Anwendungen.

Die Firma Jamo Solutions (www.jamosolutions.com) erfüllt die Anforderungen für Automatisierungstests auf mobilen Geräten, einschließlich .net Compact Framework-Anwendungen.


1

NUnitForms verwenden. Ich habe sie mit großem Erfolg für Einzel- und Multi-Threading-Anwendungen verwendet, und Sie haben nicht wie die

sind über Griffe und Sachen kümmern Hier einige Beiträge über NUnitForms lesenswert

NUnitForms and failed DragDrop registration - problem of MTA vs STA

Compiled application exe GUI testing with NUnitForms