Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Vortrag zur Diplomarbeit Automatische Generierung von Testskript- Kommandos durch Capturing von Nutzereingaben Andreas Hirth.

Ähnliche Präsentationen


Präsentation zum Thema: "Vortrag zur Diplomarbeit Automatische Generierung von Testskript- Kommandos durch Capturing von Nutzereingaben Andreas Hirth."—  Präsentation transkript:

1 Vortrag zur Diplomarbeit Automatische Generierung von Testskript- Kommandos durch Capturing von Nutzereingaben Andreas Hirth

2 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben2 Übersicht Motivation, Intention Realisierung Fazit Demonstration

3 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben3 ATOS bisheriger Funktionsumfang Simulation von Nutzereingaben in Testobjekte Auslesen des Status von Elementen eines Testobjekts und Vergleich mit erwarteten Werten Unterstützung einer Skriptsprache zur Definition von Kommandos Speichern von Kommandoabläufen in Testskripts Zusammenfassen von Testskripts in Testpakten Unterstützung bei der Erstellung von Testskripts mittels intelligentem Editor

4 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben4 ATOS einige Einschränkungen Quelltext des Testobjekts muss vorliegen Notwendige Informationen werden zum großen Teil mit Softwareunterstützung aus den Fremdquellen ausgelesen –müssen per Hand nachbearbeitet, teilweise vollständig manuell eingegeben werden –Unterstützung abhängig von verwendeter Entwicklungsumgebung Eigenschaften dynamisch erzeugter Fensterelemente müssen immer manuell eingegeben werden

5 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben5 ATOS Kommandoerzeugung (bisher) Schrittweiser Aufbau der Kommandostruktur dabei Sicherstellung der Validität erzeugter Kommandos –Invalide Kommandos können nicht erstellt werden –direkte manuelle Eingabe ist nicht vorgesehen die meisten Kommandos bestehen aus 5 oder mehr Komponenten

6 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben6 Neue Idee Automatische Kommandoerzeugung –Aktionen der Testskriptdesigner bedient das Testobjekt auf übliche Art und Weise ATOS schneidet alle Eingaben mit (Capturing) und generiert daraus automatisch die entsprechenden Testskript-Kommandos (HTS) –Tests in einem zweiten Modus klickt der Testskriptdesigner im laufenden Testobjekt ein Fensterelement an ATOS generiert (nach Auswahl) automatisch Testskript-Kommandos, die den Status des Fensterelements mit den aktuellen Werten vergleichen die Nutzeraktionen werden hierbei abgefangen, das Testobjekt erhält also keine Eingaben

7 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben7 Vorteile enormer Performance-Gewinn bei der Testskript- Erstellung automatisch generierte Kommandos sind syntaktisch und semantisch korrekt der zu programmierende Testfall wird bei der Erstellung direkt durchgeführt –Vermeidung von logischen Design-Fehlern

8 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben8 Übersicht Motivation, Intention Realisierung –technische Grundlagen –Capturing –Integration Fazit Demonstration

9 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben9 Windows-Nachrichten Windows-Nachrichten als Basiskonzept für –Kommunikation mit und zwischen Fenstern (Dialoge, Controls, …) –Synchronisation System-Queue FIFO –Übermittlung von Eingaben (Maus/Tastatur) –Timer

10 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben10 Was sind Hooks? Hooks erlauben es einer Applikation, eine eigene Subroutine in die systemweite Nachrichtenverarbeitung einzuschalten Möglichkeiten: –Nachrichten "mitschneiden" –Nachrichten modifizieren oder blockieren Systemweite vs. Thread-spezifische Hooks

11 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben11 WH_CALLWNDPROC Hook WH_CALLWNDPROCRET Hook WH_CBT Hook WH_DEBUG Hook WH_FOREGROUNDIDLE Hook WH_GETMESSAGE Hook WH_JOURNALPLAYBACK Hook WH_JOURNALRECORD Hook WH_KEYBOARD_LL Hook WH_KEYBOARD Hook WH_MOUSE_LL Hook WH_MOUSE Hook WH_MSGFILTER and WH_SYSMSGFILTER Hooks WH_SHELL Hook Typen von Hooks The WH_CALLWNDPROC hook enables you to monitor messages sent to window procedures. The system calls a WH_CALLWNDPROC hook procedure before passing the message to the receiving window procedure The WH_KEYBOARD hook enables an application to monitor message traffic for WM_KEYDOWN and WM_KEYUP messages about to be returned by the GetMessage or PeekMessage function. The WH_MOUSE hook enables you to monitor mouse messages about to be returned by the GetMessage or PeekMessage function. The WH_GETMESSAGE hook enables an application to monitor messages about to be returned by the GetMessage or PeekMessage function. You can use the WH_GETMESSAGE hook to monitor mouse and keyboard input and other messages posted to the message queue.

12 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben12 Was können Hooks nicht? Idee: –Nachrichten verarbeiten wie in der Nachrichten-Schleife der Fensterfunktion WndProc() –Nutzen der von Controls gesendeten Notifications z.B: BN_CLICKED, EN_CHANGE Control-bezogene Aktionen Aber: –ob Controls wirkliche die benötigten Notifications senden, ist programmabhängig –Client-Client-Nachrichten laufen nicht über die systemweite Nachrichtenverwaltung kein Zugriff über Hooks

13 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben13 "Mitschneiden" von Eingaben Abfangen von reinen Eingabe-Ereignissen (Maus, Tastatur) für das Testobjekt Mausklick: –Bestimmen des Ziel-Fensters des Mausklicks aus den Koordinaten –Interpretation abhängig vom Typ des Fensters Tastendruck: –Ermittlung des aktiven Fensters –Interpretation abhängig vom Typ des Fensters

14 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben14 Bestimmen des Controltyps (1) Ermitteln des Klassennamens des Fensters (GetClassName(…)) –Edit –Static –Button Problem 1: –Programme können Controls in ihrer Funktionalität erweitern, ohne das Basisverhalten einzuschränken normal steuerbar über HTS-Kommandos Aber: abweichender Klassenname Lösung: nutzereditierbare Liste mit Synonymen für Klassennamen

15 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben15 Bestimmen des Controltyps (2) Problem 2: –Controls desselben Typs können unterschiedliche Eigenschaften haben (und unterschiedliche Behandlung erfordern) Klasse "Button" realisiert eine Reihe unterschiedlichster Controls Pushbutton Radiobutton Checkbox Groupbox Identifizierung über gesetzte Stylebits möglich (GetWindowLong(…, GWL_STYLE))

16 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben16 Übersicht Motivation, Intention Realisierung –technische Grundlagen –Capturing –Integration Fazit Demonstration

17 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben17 Capturing (Übersicht) Hook Daten- Segment Testobjekt ATOS Shared Data installiert steuert sendet Informationen Nachrichten AbfragenAntworten Code-Segment Nachrichten

18 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben18 Capturing ATOS installiert Hooks für den Thread des Testobjekts –WH_MOUSEMausklicks –WH_KEYBOARDTastatureingaben –WH_CALLWNDPROCMenüaufrufe jede Nachricht, die einen der installierten Hooks betrifft, durchläuft zunächst die zugehörige Hook-Funktion (im Kontext des Testobjekts) –Analyse der Nachricht –ggf. Informationsübermittlung an ATOS mittels nutzerdefinierter Nachricht –ggf. Stoppen der Übermittlung Testobjekt erhält die Nachricht nicht Übersicht

19 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben19 Capturing (Beispiel 1) Beispiel Übermittlung der Information zum Ereignis "linke Maustaste gedrückt" #define WM_CAPTURE_LMOUSEDOWNUSER SendMessage( hWnd,// Dialog des Capturing-Moduls WM_CAPTURE_LMOUSEDOWN, wParam,// LOWORD: x-Koordinate // HIWORD: y-Koordinate lParam// Handle des Zielfensters );

20 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben20 Capturing (Beispiel 2) Beispiel Übermittlung der Information zum Ereignis "Tastatureingabe" #define WM_CAPTURE_KEYUSER SendMessage( hWnd,// Dialog des Capturing-Moduls WM_CAPTURE_KEY, wParam,// LOWORD: 0 // HIWORD: virtueller Tastenkode lParam// Handle des Fensters mit dem // Fokus );

21 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben21 Interpretation der Eingaben (Mausklick) Mausklick (links) –Prüfen, ob Drücken der Maustaste und Loslassen auf demselben Control stattfanden –Ermitteln des Control-Typs –Prüfen des Control-Status (aktiviert) –Generieren eines Kommandos in Abhängigkeit vom Control-Typ ButtonKlick RadiobuttonAuswahl CheckboxSetzen/Löschen ListboxAuswahl (ggf. Mehrfachauswahl mehrere Kommandos) ComboboxAuswahl oder Wert TabAuswahl Editbox, Static- –bei bestimmten Controls überflüssige Zwischenkommandos vermeiden (z.B. Editbox, Listbox, Combobox) Übersicht

22 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben22 Interpretation der Eingaben (Tastatur) Tastatureingabe –Prüfen des virtuellen Tastenkodes –Ermitteln des Control-Typs (des aktuell fokusierten Fensters) –ggf. Generierung eines Kommandos in Abhängigkeit vom Typ des Controls und der gedrückten Taste z.B: ButtonSPACEKlick ButtonENTERKlick CheckboxENTERTastendruck ENTER Button'A'- Editbox'A'Wert setzen Combobox'A'Auswahl oder Wert setzen Übersicht

23 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben23 Capturing von Menüaktionen (1. Möglichkeit) 1. Möglichkeit: Auswerten von WM_COMMAND Notification –das high-order word von wParam gibt Auskunft, ob es sich um eine Menüaktion handelt –Aber: unzuverlässig –Aber: nachträglich keine Möglichkeit, das Fenster zu ermitteln, zu dem das Menü gehörte nicht realisiert

24 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben24 Capturing von Menüaktionen (2. Möglichkeit) 2. Möglichkeit (wurde realisiert): Auswerten der WM_MENUSELECT Notification –Nachricht wird immer empfangen, wenn der Cursor über einen neuen Menüpunkt kommt oder mittels Tastatur zu einem anderen Menüpunkt gesprungen wird –zwischen auswählbaren und nicht auswählbaren (inaktive, Trennlinien, Submenüs) Menüpunkten unterscheiden –aktives Rechteck des Menüpunkts speichern und bei nächstem Klick-Ereignis Treffer prüfen –Fenster, das das Menü aufgerufen hat ermitteln zum Zeitpunkt der ersten WM_INITMENU Notification

25 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben25 Übersicht Motivation, Intention Realisierung –technische Grundlagen –Capturing –Integration Fazit Demonstration

26 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben26 Ziele für die Integration in das ATOS-Grundsystem die ATOS-Testsuite soll weiterhin wie bisher nutzbar bleiben die Erweiterung soll sich möglichst ohne Bruch in das ATOS-System einfügen die generierten Kommandos müssen gültige HTS- Befehle darstellen –generierte Kommandos sollen nachbearbeitet werden können

27 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben27 Integration eines neuen Dialogs Beschränkung auf notwendige und sinnvolle Steuer- und Informationselemente –selbsterklärende Bedienung –geringer Platzbedarf Dialog wird im Vordergrund gehalten optisches Feedback bei Generierung neuer Kommandos –grünneues Kommando erfolgreich erzeugt –gelbletztes Kommando erfolgreich modifiziert –rotFehler bei der Kommandoerzeugung

28 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben28 Modellierung der neuen Klasse 'CapturingProcessor' Funktionalität –Hookinstallation, -steuerung –Auswertung der Hook-Nachrichten –Ermittlung weiterer benötigter Informationen aus dem Testobjekt –Generierung von kommentierten Kommandos –Undo-Funktion

29 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben29 Klasse 'CapturingProcessor' CapturingProcessor -struct TEMPORARYDATA { UINT uiVal; HWND hWnd; HMENU hMenu; RECT area; } mTempData; -unsigned short munInternalState; -bool mbHookRunning; -HWND mhRunningAppWnd; -DWORD mdwRunningAppPId; -HWND mhCallingDlgWnd; -UINT muiGeneratedCmdsCnt; +CapturingProcessor(const char* szConfigFilePath); +virtual ~CapturingProcessor(); +bool Initialize(const char* szAppPath, LRESULT (*fnStartTestSelDlg)(HWND, Line *), HWND hDlgWnd); +void Uninitialize(); +HWND GetRunningAppTopMostWnd(); +bool StartCapturing(HWND hWndMsgTarget); +bool StopCapturing(); +bool SetWorkingMode(unsigned short NewWorkingMode); +unsigned short GetWorkingMode(); +Line * Undo(); +unsigned short GetLastCmdCreationMode(); +UINT GetGeneratedCmdsCnt(); +LineList * GetCommands(bool bClearCommands); +void ClearCommands(); +char * GetCtrlInfo(HWND hCtrl); +Line * CaptureClick(HWND hCtrl, POINT pt); +Line * CaptureKey(HWND hCtrl, UINT uiKeyCode); +Line * CaptureMenuCmd(HMENU hMenu, UINT uiMenuItemID); +Line * CaptureMenuInit(HWND hWnd); - bool ImportTypeSynonymsFile(char *szFilename); -HWND StartApplication(char *szPath); -void PreparePreAndPostCommands(); -UINT GetControlType(HWND hWndControl, char *szName); -BOOL IsRunningAppWndValid(); -void MaskQuotes(char * szText); -static BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam); -Line * CaptureClickACTION(HWND hCtrl, POINT pt); -Line * CaptureKeyACTION(HWND hCtrl, UINT uiKeyCode); -Line * CaptureMenuCmdACTION(HMENU hMenu, UINT uiMenuItemID); -Line * CaptureMenuInitACTION(HWND hWnd); -Line * CaptureClickTEST(HWND hCtrl, POINT pt); -bool CreateCmdEDITBOX(HWND hCtrl, Line *commentLine, Line *commandLine); -bool CreateCmdBUTTON(HWND hCtrl, Line *commentLine, Line *commandLine); -bool CreateCmdTAB(HWND hCtrl, Line *commentLine, Line *commandLine); -bool CreateCmdLISTBOX(HWND hCtrl, Line *commentLine, Line *commandLine); -bool CreateCmdLISTBOXMULTISEL(HWND hCtrl, Line *commentLine, Line *commandLine, UINT uiCmdArraySize); -bool CreateCmdCOMBOBOX(HWND hCtrl, Line *commentLine, Line *commandLine); -bool CreateCmdMENU(HWND hWnd, HMENU hMenu, UINT uiMenuItemID, Line *commentLine, Line *commandLine); -bool CreateCmdKEY(UINT uiKeyCode, Line *commentLine, Line *commandLine); -bool CreateTestCmd(HWND hCtrl, Line *commentLine, Line *commandLine, UINT uiCmdArraySize, unsigned short unTestMode); -void AddCommandToList(Line **commentLine, Line **commandLine, UINT uiCmdArraySize); -unsigned short GetKeyHandlingForCtrl(UINT uiKeyCode, UINT uiControlType); -bool IsLastCmdOfCtrl(char *szControl, HWND hCtrl); -LineList * mCommandList; -LineList * mPostCommands; -LineList * mPreCommands; -unsigned short munWorkingMode; -unsigned short munLastCmdCreationMode; -LRESULT (*mfnStartTestSelDlg)(HWND, Line *) ; -LineList * mControlTypeSynonyms;

30 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben30 Hook Trennung von GUI und Logik ATOS GUI Logik Testsequenz startet sendet Nachrichten installiert, steuert übermittelt Daten steuert CapturingProcessor ATOS Capturing Dialog

31 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben31 Besonderheiten aus dem Capturing erzeugter HTS-Kommandos "herkömmliche" HTS-Befehle beinhalten verbale Bezeichner an Stelle der numerischen Identifikatoren von Controls –die Zuordnung wird durch Informationen aus URF-Dateien hergestellt beim Capturing werden die numerischen Identifikatoren ermittelt –Rückwärts-Zuordnung über Daten aus URF-Dateien wäre möglich, würde aber dem Ziel einer Quelltext-Unabhängigkeit entgegenstehen –projektgebundenes Umschalten zwischen entweder Nutzung der manuellen Testskript-Erstellung oder des Capturings widerspricht Zielstellung "herkömmliche" und generierte HTS-Befehle sollen innerhalb derselben Testsequenz kombiniert werden können Einführung eines "Schalters" zum Deaktivieren der Substitutionen beim Übersetzen der Kommandos von HTS nach ATS

32 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben32 Neues HTS-Kommando NOSUBST Erweiterte HTS-Syntax –anweisung =aktionsschritt | auswertungsschritt | interaktion | dateioperation | loopstruktur | kommentar | deakt_kommando | nosubst_kommando... nosubst_kommando = NOSUBST,anweisung Kommandos mit dem Präfix NOSUBST werden normal verarbeitet, bis auf folgende Einschränkungen: –an Stelle von Control-Bezeichnern oder Menübäumen werden die entsprechenden numerischen Identifikatoren der Controls oder Menükommandos erwartet NOSUBST-Kommandos können im ATOS-Befehls-Editor bearbeitet werden, eine automatische Fehlerkontrolle ist jedoch nicht möglich

33 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben33 Übersicht Motivation, Intention Realisierung Fazit Demonstration

34 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben34 Fazit und Ausblick Erreichte Ziele –zuverlässiges Capturing der Nutzeraktionen durch Interpretation von Eingabe-Nachrichten auf niedrigem Level –schnelle, intuitive Generierung von Aktions- und Testkommandos –Unterstützung des Testens von Applikationen, für die kein Quellkode vorliegt –saubere Einbettung in das ATOS Grundsystem –Möglichkeit der kombinierten Verwendung von manueller Testskript-Erstellung und Capturing Erweiterungen, Verbesserungen –Verwendung der URF-Daten zur Kommando-Generierung, wenn vorhanden –ggf. Unterstützung weiterer Controls Abhängig auch von Unterstützung durch HTS

35 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben35 Übersicht Motivation, Intention Realisierung Fazit Demonstration –Rechner –Editor

36 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben36 Diskussion Vielen Dank für Ihre Aufmerksamkeit!


Herunterladen ppt "Vortrag zur Diplomarbeit Automatische Generierung von Testskript- Kommandos durch Capturing von Nutzereingaben Andreas Hirth."

Ähnliche Präsentationen


Google-Anzeigen