Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Vortrag zur Diplomarbeit

Ähnliche Präsentationen


Präsentation zum Thema: "Vortrag zur Diplomarbeit"—  Präsentation transkript:

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

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

3 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 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben

4 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 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben

5 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 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben

6 Neue Idee Automatische Kommandoerzeugung Aktionen Tests
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 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben

7 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 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben

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

9 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 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben

10 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 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben

11 Typen von Hooks 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 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_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. 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. Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben

12 Was können Hooks nicht? Idee: Aber:
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 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben

13 "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 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben

14 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 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben

15 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)) Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben

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

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

18 Capturing ATOS installiert Hooks für den Thread des Testobjekts
Übersicht ATOS installiert Hooks für den Thread des Testobjekts WH_MOUSE Mausklicks WH_KEYBOARD Tastatureingaben WH_CALLWNDPROC Menü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 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben

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

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

21 Interpretation der Eingaben (Mausklick)
Übersicht 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 Button Klick Radiobutton Auswahl Checkbox Setzen/Löschen Listbox Auswahl (ggf. Mehrfachauswahl  mehrere Kommandos) Combobox Auswahl oder Wert Tab Auswahl Editbox, Static - bei bestimmten Controls überflüssige Zwischenkommandos vermeiden (z.B. Editbox, Listbox, Combobox) Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben

22 Interpretation der Eingaben (Tastatur)
Übersicht 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: Button SPACE Klick Button ENTER Klick Checkbox ENTER Tastendruck ENTER Button 'A' - Editbox 'A' Wert setzen Combobox 'A' Auswahl oder Wert setzen Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben

23 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 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben

24 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 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben

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

26 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 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben

27 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ün neues Kommando erfolgreich erzeugt gelb letztes Kommando erfolgreich modifiziert rot Fehler bei der Kommandoerzeugung Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben

28 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 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben

29 Klasse '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; - LineList * mCommandList; - LineList * mPostCommands; - LineList * mPreCommands; - unsigned short munWorkingMode; - unsigned short munLastCmdCreationMode; - LRESULT (*mfnStartTestSelDlg)(HWND, Line *) ; - LineList * mControlTypeSynonyms; + 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); Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben

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

31 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 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben

32 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 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben

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

34 Fazit und Ausblick Erreichte Ziele Erweiterungen, Verbesserungen
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 Andreas Hirth, Automatische Generierung von Testskript-Kommandos durch Capturing von Nutzereingaben

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

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


Herunterladen ppt "Vortrag zur Diplomarbeit"

Ähnliche Präsentationen


Google-Anzeigen