AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

GUI-Testing mit Sikuli - HowTo

Ein Thema von neo4a · begonnen am 3. Aug 2011 · letzter Beitrag vom 3. Aug 2011
Antwort Antwort
neo4a

Registriert seit: 22. Jan 2007
Ort: Ingolstadt
362 Beiträge
 
Delphi XE2 Architect
 
#1

GUI-Testing mit Sikuli - HowTo

  Alt 3. Aug 2011, 10:40
Unit-Testing mit DUnit macht ja nun jeder. Man kann wohl damit auch irgendwie GUI-Elemente testen.

Sikuli bietet da einen etwas anderen Ansatz. Durch einen simplen formalen Aufbau realisiere ich daraus einen GUI-Test:

Zuerst einmal ein typisches Script (testA.sikuli), das einige Aktionen in der Delphi-App ausführt:
Code:
from sikuli.Sikuli import *
def testRun(self):
  switchApp("MyDelphiApp")
  wait(1)
  type(Key.F12)
  wait(1)
  if not exists( ):
    click( )
  click( )
  click( )
  doubleClick( )
  type(Key.F12)
  assert exists( )

#testRun(0)
Bemerkungen:
- Die erste Zeile ist notwendig, damit das Script dann im Batch-Modus funktioniert.
- Def XXX()- ist die Funktionsdeklaration
- Wait()-Aufrufe sind dann sinnvoll, wenn z.B. animierte Übergänge erfolgen.
- Die Einrückungen entsprechen Begin/Ende-Strukturen.
- Assert ist die visuelle Prüfung, ob auf dem Screen auch das da ist, was erwartet wird.
- Die letzte Zeile erlaubt den Aufruf des Scripts in der Sikuli-IDE.

Nachdem ein oder mehrere GUI-Test-Scripts vorliegen, sollte das nun auch im Batch-Modus erfolgen. Dazu dient diese Script, das nacheinander alle Test-Scripts aufruft.
Code:
def setUp(self):
  myScriptPath="C:\\MyPath\\To\\Sikuli"
  if not myScriptPath in sys.path: sys.path.append(myScriptPath)
 
def tearDown(self):
  closeApp("MyApp")

def testA(self):
  import testA
  testA.testRun(0)
 
def testB(self):
  import testB
  testB.testRun(0)
Bemerkungen:
- Dieser Aufbau geht davon aus, dass die Test-Scripts in den myScriptPath abgelegt wurden und dort als Verzeichnisse TestA.sikuli und TestB.sikuli existieren.
- Die formale Struktur des Batch-Scripts lässt sich nun sehr einfach erweitern und variieren. Der Screenshot im Anhang zeigt beispielhaft das Ergebnis eines solchen Tests.

Hinweise:
- Sikuli arbeitet nur mit der GUI, keine API o.ä.
- MyDelphiApp sollte zum Testen für Sikuli wieder erkennbar sein, d.h. SetBounds, Skinning etc. muss dem Zustand entsprechen, womit die TestScripts erzeugt wurden.
- Meine Delphi-Apps werten dazu eine Start-Parameter aus, der das sicherstellt.

Probleme:
- Sikuli verhält sich bei mir manchmal etwas "zickig" und ist auch nicht sehr schnell, was ich aber auf die verwendete Auflösung (2 x 1920 x 1200) schiebe.
- Der Batch-Modus muss noch über die Sikuli-IDE angeschoben werden. Ich habe bislang noch keinen anderen Weg gefunden.

Diese GUI-Tests sind für mich eine sehr hilfreiche Ergänzung zu den Unit-Tests und sicher den Aufwand für die Erstellung wert.
Miniaturansicht angehängter Grafiken
screenshot-result.png  
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

AW: GUI-Testing mit Sikuli - HowTo

  Alt 3. Aug 2011, 11:02
Seltsam: die Scriptsprache sieht ganz stark nach Python aus, während das Java Runtime Enviroment als Vorrausetzung benötigt wird (also wohl in Java programmiert wurde).

Das ist schon ein bisschen schizo
So nach dem Motto: "Menno, Python gefällt mir eigentlich viel besser, aber ich hab' nur Java an der Uni gelernt"
Aber Python ist als Scriptsprache recht gut geeignet

Geändert von sx2008 ( 3. Aug 2011 um 11:07 Uhr)
  Mit Zitat antworten Zitat
neo4a

Registriert seit: 22. Jan 2007
Ort: Ingolstadt
362 Beiträge
 
Delphi XE2 Architect
 
#3

AW: GUI-Testing mit Sikuli - HowTo

  Alt 3. Aug 2011, 11:16
Seltsam: die Scriptsprache sieht ganz stark nach Python aus, während das Java Runtime Enviroment als Vorrausetzung benötigt wird (also wohl in Java programmiert wurde).
Das ist richtig und zukunftssicher, denn damit ist auch gewährleistet, dass die XE2-Programme unter OSX ebenfalls mit diesem Tool getestet werden können.

Die Einarbeitung in Sikuli ist ansich trivial. Mit meinen Beitrag wollte ich lediglich zeigen, wie man damit auch ein ganzes GUI-Test-Framework aufbaut. Das kommt aus den ganzen Docs, Tuts und Samples auf der Website nicht so richtig heraus.
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz