SlideShare une entreprise Scribd logo
1  sur  136
Modellgetriebene FIT-Tests
                am Beispiel XMLFit
               Test Tage 2009


 XMLFit


FIT Selenium
Agenda
Agenda
• Teil I - Einführung in FIT
   – Testen mit Fit Tabellen
   – Fit Tabellen und Applikation verknüpfen
Agenda
• Teil I - Einführung in FIT
   – Testen mit Fit Tabellen
   – Fit Tabellen und Applikation verknüpfen

• Teil II - Webapplikation testen mit Fit und Selenium
   – Einführung in Selenium
   – Selenium in Fit Tests nutzen (Selenium Fixture)
Agenda
• Teil I - Einführung in FIT
   – Testen mit Fit Tabellen
   – Fit Tabellen und Applikation verknüpfen

• Teil II - Webapplikation testen mit Fit und Selenium
   – Einführung in Selenium
   – Selenium in Fit Tests nutzen (Selenium Fixture)

• Teil III - Einführung in XMLFit
   – Fitnesse – Testen mittels Wiki und Fit
   – XMLFit – Fit Tests mit XML DSL entwickeln
Agenda
• Teil I - Einführung in FIT
   – Testen mit Fit Tabellen
   – Fit Tabellen und Applikation verknüpfen

• Teil II - Webapplikation testen mit Fit und Selenium
   – Einführung in Selenium
   – Selenium in Fit Tests nutzen (Selenium Fixture)

• Teil III - Einführung in XMLFit
   – Fitnesse – Testen mittels Wiki und Fit
   – XMLFit – Fit Tests mit XML DSL entwickeln

• Übungsaufgabe
Überblick Fit - Framework for
      Integrated Tests
Überblick Fit - Framework for
         Integrated Tests
• FIT wurde entwickelt von Ward
  Cunningham WIKI-Erfinder...
Überblick Fit - Framework for
         Integrated Tests
• FIT wurde entwickelt von Ward
  Cunningham WIKI-Erfinder...
• Motivation von Fit Tests
  – Automatisierung von Akzeptanztests
    mittels Tabellen
  – Framework für Datengetriebene Tests
    – Data-Driven-Test (xUnit Test
    Patterns - Gerard Meszaros)
Überblick Fit - Framework for
         Integrated Tests
• FIT wurde entwickelt von Ward
  Cunningham WIKI-Erfinder...
• Motivation von Fit Tests
  – Automatisierung von Akzeptanztests
    mittels Tabellen
  – Framework für Datengetriebene Tests
    – Data-Driven-Test (xUnit Test
    Patterns - Gerard Meszaros)
• Fit Design - Open Framework
  – Beautiful Code beschreibt in „Fit
    Tests- BEAUTY THROUGH FRAGILITY“
    das Design von Fit als ein Open
Testen mit Fit Tabellen
• Fit Tests für den Beispiel Zinsrechner
Testen mit Fit Tabellen
• Fit Tests als ColumnFixture Tabelle



     Betrag
       10
Testen mit Fit Tabellen
• Fit Tests als ColumnFixture Tabelle



     Betrag       Zinssatz
       10            2.5
Testen mit Fit Tabellen
• Fit Tests als ColumnFixture Tabelle



    Betrag      Zinssatz    Laufzeit
      10          2.5           2
Testen mit Fit Tabellen
• Fit Tests als ColumnFixture Tabelle



   Betrag   Zinssatz Laufzeit Summe
     10       2.5        2      10.51
Testen mit Fit Tabellen
• Fit Tests als ColumnFixture Tabelle




   Betrag   Zinssatz Laufzeit Summe()
     10       2.5        2      10.51
Testen mit Fit Tabellen
   • Fit Tests als ColumnFixture Tabelle




           Betrag   Zinssatz Laufzeit Summe()
Testfall    10        2.5      2      10.51
Testen mit Fit Tabellen
   • Fit Tests als ColumnFixture Tabelle

      Eingehende - Werte


           Betrag   Zinssatz Laufzeit Summe()
Testfall    10         2.5     2      10.51
Testen mit Fit Tabellen
   • Fit Tests als ColumnFixture Tabelle

                                   Prüfung eines Ergebnis
      Eingehende - Werte


           Betrag   Zinssatz Laufzeit Summe()
Testfall    10         2.5     2        10.51
Testen mit Fit Tabellen
• Fit Tests als ColumnFixture Tabelle


   Betrag     Zinssatz Laufzeit Summe()
     10         2.5      2      10.51
     10          10      3      25.94
     10          10      10    100000
     ...         ...     ...       ...

                                    Testfälle
Testen mit Fit Tabellen
• Fit Tests als ColumnFixture Tabelle
 Applikation Anbindung (Java Klasse)
                                       Prüfung des Ergebnis
Eingehende - Werte
         onlinerechner.ZinsenFixture
    Betrag       Zinssatz Laufzeit Summe()
       10            2.5         2       10.51
       10            10          3       25.94
       10            10         10      100000
        ...          ...         ...        ...
                                                   Testfälle
Testen mit Fit Tabellen
• Fit Tests als ColumnFixture Tabelle
Testen mit Fit Tabellen
 • Fit Tests als ColumnFixture Tabelle




Gelb =Ausnahme - Fehler im Test
Testen mit Fit Tabellen
 • Fit Tests als ColumnFixture Tabelle




Gelb =Ausnahme - Fehler im Test
                                  Grün = erfolgreicher Test
Testen mit Fit Tabellen
 • Fit Tests als ColumnFixture Tabelle
                             Rot = Fehler in der Anwendung




Gelb =Ausnahme - Fehler im Test
                                   Grün = erfolgreicher Test
Testen mit Fit Tabellen
• Fit Test als ActionFixture Tabelle

     fit.ActionFixture
     start     ZinsenActionFixture
     enter     Betrag         10
     enter     Zinssatz       2,5
     enter     Laufzeit       2
     press     Submit
     check     Summe          10,51
Testen mit Fit Tabellen
 • Fit Test als ActionFixture Tabelle
Befehle / Kommandos
        fit.ActionFixture
        start         ZinsenActionFixture
        enter         Betrag         10
        enter         Zinssatz       2,5
        enter         Laufzeit       2
        press         Submit
        check         Summe          10,51
Testen mit Fit Tabellen
 • Fit Test als ActionFixture Tabelle
Befehle / Kommandos
        fit.ActionFixture
        start         ZinsenActionFixture
        enter         Betrag         10      Argumente
        enter         Zinssatz       2,5
        enter         Laufzeit       2
        press         Submit
        check         Summe          10,51
Testen mit Fit Tabellen
 • Fit Test als ActionFixture Tabelle
Befehle / Kommandos
        fit.ActionFixture
        start         ZinsenActionFixture
        enter         Betrag              10         Argumente
        enter         Zinssatz            2,5
        enter         Laufzeit            2
        press         Submit
        check         Summe               10,51
                                 Objekt / Auswahl / Target
Testen mit Fit Tabellen
   • Fit Test als ActionFixture Tabelle
Befehle / Kommandos
           fit.ActionFixture
           start      ZinsenActionFixture
           enter      Betrag              10         Argumente
           enter      Zinssatz            2,5
Testfall
           enter      Laufzeit            2
           press      Submit
           check      Summe               10,51
                                 Objekt / Auswahl / Target
Testen mit Fit Tabellen
   • Fit Test als ActionFixture Tabelle
Befehle / Kommandos
                          Anbindung an die Applikation (Java)
           fit.ActionFixture
           start      ZinsenActionFixture
           enter      Betrag              10         Argumente
           enter      Zinssatz            2,5
Testfall
           enter      Laufzeit            2
           press      Submit
           check      Summe               10,51
                                 Objekt / Auswahl / Target
Testen mit Fit Tabellen
• Fit Test als ActionFixture Tabelle
Testen mit Fit Tabellen
• Fit Test als ActionFixture Tabelle




                         Prüfung
Testen mit Fit Tabellen
• Fit Test als ActionFixture Tabelle



                         Eingaben




                         Prüfung
Testen mit Fit Tabellen
• Fit Test als ActionFixture Tabelle



                         Eingaben


                         Aktion - Zinsen Berechnen

                         Prüfung
Testen mit Fit Tabellen
• Fit Test als ActionFixture Tabelle


                         Anwendung Starten

                         Eingaben


                         Aktion - Zinsen Berechnen

                         Prüfung
Testen mit Fit Tabellen
• Weiteres Beispiel für eine ActionFixture
  Tabelle
 fit.ActionFixture
 start      jugs.Zinsrechner
 enter      Betrag         0
 enter      Zinssatz       2,5
 enter      Laufzeit       0
 press      Submit
 check      Fehler         Kein gültiger Betrag

 check     Fehler          Keine gültige
                           Laufzeit
Testen mit Fit Tabellen
      • Mengen testen mit RowFixture Tabellen
Jugs.TeilnehmerListe

Titel                           Author

Keynote - Wie ich lernte, das   Johannes Link
Testen zu lieben

Glass-Box-Test zur Testsuite-   Rainer Schmidberger
Optimierung
Wertvolle Unittests durch DSL   Ulf Müller
orientiertes API Design
...                             ...
Testen mit Fit Tabellen
    • Geordnete Listen testen mit RowFixture
      Tabellen

Jugs.TeilnehmerListe

Nr    Titel                                     Author

1     Keynote - Wie ich lernte, das Testen zu   Johannes Link
      lieben
2     Glass-Box-Test zur Testsuite-             Rainer
      Optimierung                               Schmidberger
3     Wertvolle Unittests durch DSL             Ulf Müller
      orientiertes API Design
      ...                                       ...
Testen mit Fit Tabellen
• Testen mit Sequenzen von Tabelle
 Beispiel Fit Test ... fit.ActionFixture
                         start jugs.TestTageAnmel
                         enter den
                               name      Baranows
                         enter Titel     Fit
                                         ki Tests
                         pressSubmit
                               Submit
                         chec einladung true
                         k
                         Jugs.TeilnehmerListe
                         Titel                       Author
                         Keynote - Wie ich lernte,   Johannes Link
                         das Testen zu lieben
                         Glass-Box-Test zur          Rainer Schmidberger
                         Testsuite-Optimierung
                         Ulf Müller                  Wertvolle Unittests durch
                                                     DSL orientiertes API Design
                         ...                         ...
Fit Tabellen und Applikation
             verknüpfen
• Fit Design – drei Klassen Framework ...




          ?           ?           ?
• Fit Design – drei Klassen Framework
Fit Tabellen und Applikation
             verknüpfen
• Fit Design – Fixtures
Fit Tabellen und Applikation
             verknüpfen
• Beispiel - ColumnFixture entwickeln

   onlinerechner.ZinsenFixture
   Betrag Zinssatz Laufzeit Summe()
   10       2,5      2        10,51
   10       10       3        25,94
   20       10       10       100000
   ...      ...      ...      ...
Fit Tabellen und Applikation
             verknüpfen
• Beispiel - ColumnFixture
Fit Tabellen und Applikation
             verknüpfen
• Beispiel - ColumnFixture

                              SUT
Fit Tabellen und Applikation
             verknüpfen
• Beispiel - ColumnFixture

                                 SUT
              Anbindung an SUT
• Beispiel Code - ColumnFixture
public class ZinsenFixture extends ColumnFixture {

       private Zinsen zinsen = new Zinsen();

       public double betrag;
       public double zinsatz;
       public double laufzeit;

       public double summe() {
               zinsen.setBetrag(betrag);
               zinsen.setLaufzeit(laufzeit);
               zinsen.setZinssatz(zinsatz);
               return zinsen.berechneZinsen();
       }
}
• Beispiel Code - ColumnFixture
public class ZinsenFixture extends ColumnFixture {   Basis Klasse
                                                     für
       private Zinsen zinsen = new Zinsen();         Fit Extension

       public double betrag;
       public double zinsatz;
       public double laufzeit;

       public double summe() {
               zinsen.setBetrag(betrag);
               zinsen.setLaufzeit(laufzeit);
               zinsen.setZinssatz(zinsatz);
               return zinsen.berechneZinsen();
       }
}
• Beispiel Code - ColumnFixture
public class ZinsenFixture extends ColumnFixture {   Basis Klasse
                                                     für
       private Zinsen zinsen = new Zinsen();         Fit Extension

       public double betrag;              SUT
       public double zinsatz;
       public double laufzeit;

       public double summe() {
               zinsen.setBetrag(betrag);
               zinsen.setLaufzeit(laufzeit);
               zinsen.setZinssatz(zinsatz);
               return zinsen.berechneZinsen();
       }
}
• Beispiel Code - ColumnFixture
public class ZinsenFixture extends ColumnFixture {   Basis Klasse
                                                     für
       private Zinsen zinsen = new Zinsen();         Fit Extension

       public double betrag;              SUT
       public double zinsatz;
       public double laufzeit;            Eingehende - Werte

       public double summe() {
               zinsen.setBetrag(betrag);
               zinsen.setLaufzeit(laufzeit);
               zinsen.setZinssatz(zinsatz);
               return zinsen.berechneZinsen();
       }
}
• Beispiel Code - ColumnFixture
public class ZinsenFixture extends ColumnFixture {   Basis Klasse
                                                     für
       private Zinsen zinsen = new Zinsen();         Fit Extension

       public double betrag;              SUT
       public double zinsatz;
       public double laufzeit;            Eingehende - Werte

       public double summe() {                 Prüfung - Ausgabe
               zinsen.setBetrag(betrag);
               zinsen.setLaufzeit(laufzeit);
               zinsen.setZinssatz(zinsatz);
               return zinsen.berechneZinsen();
       }
}
• Beispiel Code - ColumnFixture
public class ZinsenFixture extends ColumnFixture {   Basis Klasse
                                                     für
       private Zinsen zinsen = new Zinsen();         Fit Extension

       public double betrag;              SUT
       public double zinsatz;
       public double laufzeit;            Eingehende - Werte

       public double summe() {                 Prüfung - Ausgabe
               zinsen.setBetrag(betrag);
               zinsen.setLaufzeit(laufzeit);
               zinsen.setZinssatz(zinsatz);        Anbindung
               return zinsen.berechneZinsen();     an SUT
       }
}
Fit Tabellen und Applikation
             verknüpfen
• Beispiel - ActionFixture entwickeln

 fit.ActionFixture
 start    onlinerechner.ZinsenActionFixtu
 enter    re
          Betrag            10
 enter    Zinssatz          2,5
 enter    Laufzeit          2
 press    berechneZinsen
 check    Summe             10,51
Fit Tabellen und Applikation
             verknüpfen
• Beispiel - ActionFixture entwickeln

 fit.ActionFixture    GOF - Dekorierer-Muster
 start    onlinerechner.ZinsenActionFixtu
 enter    re
          Betrag               10
 enter    Zinssatz             2,5
 enter    Laufzeit             2
 press    berechneZinsen
 check    Summe                10,51
Fit Tabellen und Applikation
             verknüpfen
• Beispiel - ActionFixture entwickeln
• Beispiel Code - ActionFixture
public class ZinsenActionFixture extends Fixture {
       Zinsen zinsen = new Zinsen();
       double summe;
       public void betrag(double betrag) {
               zinsen.setBetrag(betrag);
       }
…
       public void berechneZinsen() {
               summe = zinsen.berechneZinsen();
       }
       public double summe() {
               return summe;
       }
}
• Beispiel Code - ActionFixture
public class ZinsenActionFixture extends Fixture {
       Zinsen zinsen = new Zinsen();
       double summe;
       public void betrag(double betrag) {
               zinsen.setBetrag(betrag);         Eingaben / Enter
       }
…
       public void berechneZinsen() {
               summe = zinsen.berechneZinsen();
       }
       public double summe() {
               return summe;
       }
}
• Beispiel Code - ActionFixture
public class ZinsenActionFixture extends Fixture {
       Zinsen zinsen = new Zinsen();
       double summe;
       public void betrag(double betrag) {
               zinsen.setBetrag(betrag);         Eingaben / Enter
       }
…
       public void berechneZinsen() {         Aktion / Press
               summe = zinsen.berechneZinsen();
       }
       public double summe() {
               return summe;
       }
}
• Beispiel Code - ActionFixture
public class ZinsenActionFixture extends Fixture {
       Zinsen zinsen = new Zinsen();
       double summe;
       public void betrag(double betrag) {
               zinsen.setBetrag(betrag);         Eingaben / Enter
       }
…
       public void berechneZinsen() {          Aktion / Press
               summe = zinsen.berechneZinsen();
       }
       public double summe() {
               return summe;          Ausgabe Prüfung / Check
       }
}
Fit Tabellen und Applikation
              verknüpfen
• Fixture dekorieren
 fit.AliasFixture
 mappin mappingAlias.xml
 start
 g        fit.ActionFixture
 start    Login
 enter    username           baranowski
 enter    password           test
 enter    frageNochmal       Nein
 press    login
 check    login sucessfull   true
Fit Tabellen und Applikation
              verknüpfen
• Fixture dekorieren
                        GOF - Dekorierer-Muster
 fit.AliasFixture
 mappin mappingAlias.xml
 start
 g        fit.ActionFixture
 start    Login
 enter    username           baranowski
 enter    password           test
 enter    frageNochmal       Nein
 press    login
 check    login sucessfull   true
Fit Tabellen und Applikation
              verknüpfen
                       fit.AliasFixture

• Fixture dekorieren   mappin mappingAlias.xml
                       g
                       start  fit.ActionFixture
                       start   Login
                       enter   username           baranowski

  :AliasFixture        enter   password           test
                       enter   frageNochmal       Nein
                       press   login
                       check   login sucessfull   true
Fit Tabellen und Applikation
               verknüpfen
                                      fit.AliasFixture

• Fixture dekorieren                  mappin mappingAlias.xml
                                      g
                                      start  fit.ActionFixture
  Erster Start und mapping Methoden   start   Login
                                      enter   username           baranowski

  :AliasFixture                       enter   password           test
                                      enter   frageNochmal       Nein
                                      press   login
                                      check   login sucessfull   true
            :ActionFixture
Fit Tabellen und Applikation
                verknüpfen
                                      fit.AliasFixture

• Fixture dekorieren                  mappin mappingAlias.xml
                                      g
                                      start  fit.ActionFixture
  Erster Start und mapping Methoden   start   Login
                                      enter   username           baranowski

  :AliasFixture                       enter   password           test
                                      enter   frageNochmal       Nein
                                      press   login
                                      check   login sucessfull   true
            :ActionFixture
Zweiter Start
                     :Login
Fit Tabellen und Applikation
                verknüpfen
                                      fit.AliasFixture

• Fixture dekorieren                  mappin mappingAlias.xml
                                      g
                                      start  fit.ActionFixture
  Erster Start und mapping Methoden   start    Login
                                      enter    username           baranowski

  :AliasFixture                       enter    password           test
                                      enter    frageNochmal       Nein
                                      press    login
                                      check    login sucessfull   true
            :ActionFixture
Zweiter Start
                     :Login                   Eigenes Fixture
                                              username,
                                              password...
Fit Test Abdeckung
• Statement Coverage
• Branch Coverage

• Werkzeuge
  – Emma
  – Cobertura
Fit Test Abdeckung
Agenda
• Teil I - Einführung FIT
  – Testen mit Fit Tabellen
  – Fit Tabellen und Applikation verknüpfen

• Teil II - Webapplikation testen Fit und
  Selenium
  – Einführung in Selenium
  – Selenium in Fit Tests nutzen (Selenium Fixture)

• Teil III - Einführung in XMLFit
  – Fitnesse – Testen mittels Wiki und Fit
  – XMLFit – Fit Tests mit XML DSL entwickeln
Einführung in Selenium

      Selenium Core




Selenium         Selenium RC
   IDE
Selenium Core
• Selenium Core - Beispiel Zinsrechner


open            /JugsBase/zinsrechner.jsp
type            betrag                    20.0
type            zinsatz                   22.0
type            laufzeit                  100.0
clickAndWait    submit
assertTextPrese 8649939365.27 Euro
nt
Selenium Core
• Selenium Core - Beispiel Zinsrechner
                   Action - Tabelle
Selenium Befehl
open            /JugsBase/zinsrechner.jsp
type            betrag                    20.0
type            zinsatz                   22.0 Argumente
type            laufzeit                  100.0
clickAndWait    submit          Target
assertTextPrese 8649939365.27 Euro
nt
Selenium IDE
• Selenium IDE-
  Capture &
  Replay Tests


    Action Tabelle
Selenium Remote Control

              Selenium Server
                                   Browser
                                  Firefox, IE
               Selenium Core
JAVA,
PHP...
                                    SUT
                HTTP Proxy
                                Webapplikation
Selenium Remote Control
• Selenium RC- JUnit Beispiel Zinsrechner

@Test
public void testZinsenBerechnen() throws Exception {
        selenium.open("/JugsBase/zinsrechner.jsp");
        selenium.type("betrag", "10.0");
        selenium.type("zinssatz", "10.0");
        selenium.type("laufzeit", "5.0");
        selenium.click("submit");
        selenium.waitForPageToLoad("30000");
        assertTrue(selenium.isTextPresent("16.11 Euro"));
}
Selenium Remote Control
• Fit und Selenium RC mittels allgemeinem
  Selenium Fixture
fit. SeleniumFixture
open            /JugsBase/zinsrechner.jsp
type            betrag          10.0
type            zinssatz        10.0
type            laufzeit        5.0
clickAndWait    submit
assertTextPrese 16.11 Euro
nt
Selenium Remote Control
• Selenium RC- Selenium Fixture für Fit
...
public void type(Argument selektor, Argument arg) throws
Exception {
    try
    {
      selenium.type(selektor.text(), arg.text());
    } catch(Exception e) {
      exception(selektor, e);
      return;
    }
    right(selektor); right(arg);
  }
...
Selenium Remote Control
• Selenium RC in Fit Fixture – Beispiel
  ColumnFixture

 onlinerechner.SeleniumZinsenFixtur
 e etrag Zinssatz Laufzeit Summe()
 B
 10       2,5      2       10,51
 10       10       3       25,94
 20       10       10      100000
 ...      ...      ...     ...
Selenium Remote Control
• Selenium RC- Fit Beispiel Zinsrechner
...
public String summe() {
        selenium.open("/JugsBase/zinsrechner.jsp");
        selenium.type("betrag", String.valueOf(betrag));
        selenium.type("zinssatz", String.valueOf(zinssatz));
        selenium.type("laufzeit", String.valueOf(laufzeit));
        selenium.click("submit");
        selenium.waitForPageToLoad("30000");
        String summe = selenium.getText(
               "//table[@id='zinsergebnis']//tr[4]/td[2]");
        return summe;
}
...
Agenda
• Teil I - Einführung FIT
  – Testen mit Fit Tabellen
  – Fit Tabellen und Applikation verknüpfen

• Teil II - Webapplikation testen Fit und
  Selenium
  – Einführung in Selenium
  – Selenium in Fit Tests nutzen (Selenium Fixture)

• Teil III - Einführung in XMLFit
  – Fitnesse – Testen mittels Wiki und Fit
  – XMLFit – Fit Tests mit XML DSL entwickeln
Einführung in XMLFit
Einführung in XMLFit
• Warum Fit als Framework für Systemtests?
Einführung in XMLFit
• Warum Fit als Framework für Systemtests?
  – Nachvollziehbarkeit: Testdaten und
    Testablauf sind nicht getrennt!
Einführung in XMLFit
• Warum Fit als Framework für Systemtests?
  – Nachvollziehbarkeit: Testdaten und
    Testablauf sind nicht getrennt!
  – Lesbarkeit: Tests können von der
    Fachabteilung verstanden werden und mit
    formuliert werden...
Einführung in XMLFit
• Warum Fit als Framework für Systemtests?
  – Nachvollziehbarkeit: Testdaten und
    Testablauf sind nicht getrennt!
  – Lesbarkeit: Tests können von der
    Fachabteilung verstanden werden und mit
    formuliert werden...
  – Tests können zur Kommunikation mit dem
    Kunden dienen
Einführung in XMLFit
• Warum Fit als Framework für Systemtests?
  – Nachvollziehbarkeit: Testdaten und
    Testablauf sind nicht getrennt!
  – Lesbarkeit: Tests können von der
    Fachabteilung verstanden werden und mit
    formuliert werden...
  – Tests können zur Kommunikation mit dem
    Kunden dienen
  – Plattformunabhängig: Testlogik
    (Implementierung) ist Plattformunabhängig
Einführung in XMLFit
• Warum Fit als Framework für Systemtests?
  – Nachvollziehbarkeit: Testdaten und
    Testablauf sind nicht getrennt!
  – Lesbarkeit: Tests können von der
    Fachabteilung verstanden werden und mit
    formuliert werden...
  – Tests können zur Kommunikation mit dem
    Kunden dienen
  – Plattformunabhängig: Testlogik
    (Implementierung) ist Plattformunabhängig
  – Testergebnis kann direkt als Testprotokoll
    genutzt werden
Einführung in XMLFit
Einführung in XMLFit
• Nachteile von Fit als Motivation
Einführung in XMLFit
• Nachteile von Fit als Motivation
  – Tests mittels HTML formulieren ist sehr
    umständlich und unübersichtlich
Einführung in XMLFit
• Nachteile von Fit als Motivation
  – Tests mittels HTML formulieren ist sehr
    umständlich und unübersichtlich
  – HTML mittels WYSIWYG schwierig
Einführung in XMLFit
• Nachteile von Fit als Motivation
  – Tests mittels HTML formulieren ist sehr
    umständlich und unübersichtlich
  – HTML mittels WYSIWYG schwierig
  – Wiederverwendbare Komponenten, z.B. Login,
    nicht einfach möglich
Einführung in XMLFit
• Nachteile von Fit als Motivation
  – Tests mittels HTML formulieren ist sehr
    umständlich und unübersichtlich
  – HTML mittels WYSIWYG schwierig
  – Wiederverwendbare Komponenten, z.B. Login,
    nicht einfach möglich
  – Testabläufe mit verschiedenen Testdaten nicht
    einfach modellierbar
Einschub – Überblick Fitnesse
• Fitnesse – Testen mittels Wiki und Fit


 |ZinsenTestFixture|
 |betrag|zinsatz|laufzeit|summe?|
 |10|2.5|2|10.50625|
 |10|2.5|2|10|
Einschub – Überblick Fitnesse
• Fitnesse – Testen mittels Wiki und Fit
 Column-Fixture-Tabelle

 |ZinsenTestFixture|
 |betrag|zinsatz|laufzeit|summe?|
 |10|2.5|2|10.50625|
 |10|2.5|2|10|
Einschub – Überblick Fitnesse
• Fitnesse – Testen mittels Wiki und Fit
 Column-Fixture-Tabelle

 |ZinsenTestFixture|
 |betrag|zinsatz|laufzeit|summe?|
 |10|2.5|2|10.50625|
 |10|2.5|2|10|

           ...Etwas unübersichtlich bei vielen Daten ...
Einschub – Überblick Fitnesse
Einschub – Überblick Fitnesse
Einschub – Überblick Fitnesse
• Vorteile von Fitnesse
Einschub – Überblick Fitnesse
• Vorteile von Fitnesse
  – DSL für HTML Tests einfacher klassische HTML
    Fit Tests
Einschub – Überblick Fitnesse
• Vorteile von Fitnesse
  – DSL für HTML Tests einfacher klassische HTML
    Fit Tests
  – WIKI, kann von verteilten Teams genutzt
    werden
Einschub – Überblick Fitnesse
• Vorteile von Fitnesse
  – DSL für HTML Tests einfacher klassische HTML
    Fit Tests
  – WIKI, kann von verteilten Teams genutzt
    werden
  – Test Komponenten durch Page include
Einschub – Überblick Fitnesse
Einschub – Überblick Fitnesse
• Nachteile von Fitnesse
Einschub – Überblick Fitnesse
• Nachteile von Fitnesse
  – Debugging der Fixture und der Tests nur remote
    möglich
Einschub – Überblick Fitnesse
• Nachteile von Fitnesse
  – Debugging der Fixture und der Tests nur remote
    möglich
  – Fixture bereitstellen
Einschub – Überblick Fitnesse
• Nachteile von Fitnesse
  – Debugging der Fixture und der Tests nur remote
    möglich
  – Fixture bereitstellen
  – Kein so einfacher Test Report der archiviert
    werden kann
Einschub – Überblick Fitnesse
• Nachteile von Fitnesse
  – Debugging der Fixture und der Tests nur remote
    möglich
  – Fixture bereitstellen
  – Kein so einfacher Test Report der archiviert
    werden kann
  – Hosting von Fitnesse
Einschub – Überblick Fitnesse
• Nachteile von Fitnesse
  – Debugging der Fixture und der Tests nur remote
    möglich
  – Fixture bereitstellen
  – Kein so einfacher Test Report der archiviert
    werden kann
  – Hosting von Fitnesse
  – Testabdeckung kann nur schwierig gemessen
    werden
Einschub – Überblick Fitnesse
• Nachteile von Fitnesse
  – Debugging der Fixture und der Tests nur remote
    möglich
  – Fixture bereitstellen
  – Kein so einfacher Test Report der archiviert
    werden kann
  – Hosting von Fitnesse
  – Testabdeckung kann nur schwierig gemessen
    werden
  – Für Daten getriebene Entwicklertests /
    Komponententests nicht geeignet
Einführung in XMLFit
• XMLFit einen XML basierte DSL für Fit
  Tests
Einführung in XMLFit
• XMLFit einen XML basierte DSL für Fit
  Tests




                     XML Model
Einführung in XMLFit
• XMLFit einen XML basierte DSL für Fit
  Tests                    FIT Tests




                     XML Model
Einführung in XMLFit
Einführung in XMLFit
• XMLFit einen XML basierte DSL für Fit
  Tests
Einführung in XMLFit
• XMLFit einen XML basierte DSL für Fit
  Tests
  – DSL aus der die HTML Tests generiert werden
Einführung in XMLFit
• XMLFit einen XML basierte DSL für Fit
  Tests
  – DSL aus der die HTML Tests generiert werden
  – XML da gute Tool-Unterstützung
Einführung in XMLFit
• XMLFit einen XML basierte DSL für Fit
  Tests
  – DSL aus der die HTML Tests generiert werden
  – XML da gute Tool-Unterstützung
  – Aus Testdaten mehre Fit Tests generieren über
    Variablen und DatenSets
Einführung in XMLFit
• XMLFit einen XML basierte DSL für Fit
  Tests
  – DSL aus der die HTML Tests generiert werden
  – XML da gute Tool-Unterstützung
  – Aus Testdaten mehre Fit Tests generieren über
    Variablen und DatenSets
  – Simpler Ansatz zur Testerzeugung
Einführung in XMLFit
• XMLFit einen XML basierte DSL für Fit
  Tests
  – DSL aus der die HTML Tests generiert werden
  – XML da gute Tool-Unterstützung
  – Aus Testdaten mehre Fit Tests generieren über
    Variablen und DatenSets
  – Simpler Ansatz zur Testerzeugung
  – Dateibasierter Ansatz - XMLFit Tests können
    mittel SVN oder CVS verwaltet werden...
XMLFit Design
• Version 0.0.1
   – XSLT basierende Transformation
• Version 0.0.2
   – OAW basierende Transformation

 XSL Meta
  Modell
                      XML FIT
                                      HTML
                       OAW

XML Modell
Einführung in XMLFit
• Einfaches Beispiel Zinsrechner:
Einführung in XMLFit
• Einfaches Beispiel Zinsrechner:
   <actionFixture type="fit.SeleniumFixture">
           <command name="open">
                   <target>/JugsBase/zinsrechner.jsp</target>
           </command>
           <command name="type">
                   <target>betrag</target>
                   <value>5.0</value>
           </command>
   ...
           <command name="assertTextPresent">
                   <target>25.94 Euro</target>
           </command>
   </actionFixture>
Einführung in XMLFit
• Einfaches Beispiel Zinsrechner:

...
<test id="001" name="Zinsen">
        <testStep file="example-zinsrechner.xml" />
</test>
...
Einführung in XMLFit
• Beispiel Zinsrechner mit getrennten
  Testdaten:
<actionFixture type="fit.SeleniumFixture">
...
        <command name="type">
                <target>betrag</target>
                <value>${betrag}</value>
        </command>
...
</actionFixture>
• Beispiel Zinsrechner mit getrennten
  Testdaten:
<test id="002" name="Zinsen">
         <testStep file="example-zinsrechner2.xml">
                 <property name="betrag" value="10"/>
                 <property name="zinssatz" value="5"/>
                 <property name="laufzeit" value="10"/>
                 <property name="summe" value="24"/>
         </testStep>
         <testStep file="example-zinsrechner2.xml">
                 <property name="betrag" value="20"/>
                 <property name="zinssatz" value="50"/>
                 <property name="laufzeit" value="110"/>
                 <property name="summe" value="241"/>
         </testStep>
</test>
Einführung in XMLFit
• Beispiel Zinsrechner mit getrennten
  Testdaten:
...
<test id="002" name="Zinsen">
         <testStep
                 file="example-zinsrechner2.xml"
                 data="example-data-zins.xml"
         />
</test>
...
Einführung in XMLFit
• Beispiel Zinsrechner mit getrennten
  Testdaten:
<data>
          <dataSet>
                 <betrag>10</betrag>
                 <laufzeit>10</laufzeit>
                 <zinssatz>11</zinssatz>
                 <summe>110</summe>
          </dataSet>
</data>
Einführung in XMLFit
• Mehre Tests als Tabellen Sequenzen aus
  Daten generieren
<test id="004" name="Zinsen">
         <testStep
                 file="example-zinsrechner2.xml"
                 data="example-data-zins.xml" />
         <testStep file="example-zinsrechner2.xml">
                 <property name="betrag" value="10"/>
                 <property name="zinssatz" value="5"/>
                 <property name="laufzeit" value="10"/>
                 <property name="summe" value="24"/>
         </testStep>
</test>
Agenda
• Teil I - Einführung FIT
  – Testen mit Fit Tabellen
  – Fit Tabellen und Applikation verknüpfen

• Teil II - Webapplikation testen Fit und
  Selenium
  – Einführung in Selenium
  – Selenium in Fit Tests nutzen (Selenium Fixture)

• Teil III - Einführung in XMLFit
  – Fitnesse – Testen mittels Wiki und Fit
  – XMLFit – Fit Tests mit XML DSL entwickeln

• Übungsaufgabe
Einführung in Übungsaufgabe
• Eclipse Projekt einrichten mit Maven
  „mvn eclipse:eclipse“
• XMLFit Tests oder Fit Tests ausführen mit
  „mvn test“
• Firefox Selenium IDE einrichten
• Selenium RC Server starten
• ...
Fragen & Diskussion




        ?
Referenzen

• Fit for Developing
  Software - Rick
  Mugridge und Ward
  Cunningham
Referenzen
• xUnit Test Patterns
  (Refactoring Test
  Code)- Gerard
  Meszaros
Referenzen

• Beautiful Code -
  Michael Feathers:
  Framework for
  Integrated Test: Beauty
  through Fragility, et al.
Werkzeuge
Links zu Werkzeugen:
  FIT - http://fit.c2.com/
  Selenium - http://seleniumhq.org/
  JUnit 4.X - http://www.junit.org/
  Fitnesse - http://fitnesse.org/
  OAW - http://www.openarchitectureware.org/
  NVU – WYSIWYG HTML Editor: http://net2.com/nvu/
     download.html
  XMLFIT - http://xmlfit.sourceforge.net/
  Apache Maven - http://maven.apache.org/
  Cobertura - http://cobertura.sourceforge.net/
  EclEmma - http://www.eclemma.org/
  Eclipse – http://www.eclipse.org

Contenu connexe

Plus de Christian Baranowski

Einführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software EntwicklungEinführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software EntwicklungChristian Baranowski
 
Software Testing und Qualitätssicherung
Software Testing und QualitätssicherungSoftware Testing und Qualitätssicherung
Software Testing und QualitätssicherungChristian Baranowski
 
Einführung Software Testing und Qualitätssicherung
Einführung Software Testing und QualitätssicherungEinführung Software Testing und Qualitätssicherung
Einführung Software Testing und QualitätssicherungChristian Baranowski
 
Datenbankzugriff mit der Java Persistence Api
Datenbankzugriff mit der Java Persistence ApiDatenbankzugriff mit der Java Persistence Api
Datenbankzugriff mit der Java Persistence ApiChristian Baranowski
 
HTTP und Java Servlets Programmierung
HTTP und Java Servlets ProgrammierungHTTP und Java Servlets Programmierung
HTTP und Java Servlets ProgrammierungChristian Baranowski
 
Build Prozesse und Configuration Management
Build Prozesse und Configuration ManagementBuild Prozesse und Configuration Management
Build Prozesse und Configuration ManagementChristian Baranowski
 

Plus de Christian Baranowski (20)

Spock and Geb in Action
Spock and Geb in ActionSpock and Geb in Action
Spock and Geb in Action
 
Continuous Delivery in Action
Continuous Delivery in ActionContinuous Delivery in Action
Continuous Delivery in Action
 
Gradle and Continuous Delivery
Gradle and Continuous DeliveryGradle and Continuous Delivery
Gradle and Continuous Delivery
 
Spock and Geb
Spock and GebSpock and Geb
Spock and Geb
 
Semantic Versioning
Semantic VersioningSemantic Versioning
Semantic Versioning
 
OSGi Community Updates 2012
OSGi Community Updates 2012OSGi Community Updates 2012
OSGi Community Updates 2012
 
OSGi Mars World in Action
OSGi Mars World in ActionOSGi Mars World in Action
OSGi Mars World in Action
 
Warum OSGi?
Warum OSGi?Warum OSGi?
Warum OSGi?
 
Top10- Software Engineering Books
Top10- Software Engineering BooksTop10- Software Engineering Books
Top10- Software Engineering Books
 
Domain Driven Design - 10min
Domain Driven Design - 10minDomain Driven Design - 10min
Domain Driven Design - 10min
 
SDC - Einführung in Scala
SDC - Einführung in ScalaSDC - Einführung in Scala
SDC - Einführung in Scala
 
Einführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software EntwicklungEinführung Vorgehensmodelle und Agile Software Entwicklung
Einführung Vorgehensmodelle und Agile Software Entwicklung
 
Software Testing und Qualitätssicherung
Software Testing und QualitätssicherungSoftware Testing und Qualitätssicherung
Software Testing und Qualitätssicherung
 
Einführung Software Testing und Qualitätssicherung
Einführung Software Testing und QualitätssicherungEinführung Software Testing und Qualitätssicherung
Einführung Software Testing und Qualitätssicherung
 
Datenbankzugriff mit der Java Persistence Api
Datenbankzugriff mit der Java Persistence ApiDatenbankzugriff mit der Java Persistence Api
Datenbankzugriff mit der Java Persistence Api
 
Java Servlets und AJAX
Java Servlets und AJAX Java Servlets und AJAX
Java Servlets und AJAX
 
HTTP und Java Servlets Programmierung
HTTP und Java Servlets ProgrammierungHTTP und Java Servlets Programmierung
HTTP und Java Servlets Programmierung
 
Continuous Delivery
Continuous DeliveryContinuous Delivery
Continuous Delivery
 
Build Prozesse und Java Servlets
Build Prozesse und Java ServletsBuild Prozesse und Java Servlets
Build Prozesse und Java Servlets
 
Build Prozesse und Configuration Management
Build Prozesse und Configuration ManagementBuild Prozesse und Configuration Management
Build Prozesse und Configuration Management
 

2009 - Modell getriebene fit tests

  • 1. Modellgetriebene FIT-Tests am Beispiel XMLFit Test Tage 2009 XMLFit FIT Selenium
  • 3. Agenda • Teil I - Einführung in FIT – Testen mit Fit Tabellen – Fit Tabellen und Applikation verknüpfen
  • 4. Agenda • Teil I - Einführung in FIT – Testen mit Fit Tabellen – Fit Tabellen und Applikation verknüpfen • Teil II - Webapplikation testen mit Fit und Selenium – Einführung in Selenium – Selenium in Fit Tests nutzen (Selenium Fixture)
  • 5. Agenda • Teil I - Einführung in FIT – Testen mit Fit Tabellen – Fit Tabellen und Applikation verknüpfen • Teil II - Webapplikation testen mit Fit und Selenium – Einführung in Selenium – Selenium in Fit Tests nutzen (Selenium Fixture) • Teil III - Einführung in XMLFit – Fitnesse – Testen mittels Wiki und Fit – XMLFit – Fit Tests mit XML DSL entwickeln
  • 6. Agenda • Teil I - Einführung in FIT – Testen mit Fit Tabellen – Fit Tabellen und Applikation verknüpfen • Teil II - Webapplikation testen mit Fit und Selenium – Einführung in Selenium – Selenium in Fit Tests nutzen (Selenium Fixture) • Teil III - Einführung in XMLFit – Fitnesse – Testen mittels Wiki und Fit – XMLFit – Fit Tests mit XML DSL entwickeln • Übungsaufgabe
  • 7. Überblick Fit - Framework for Integrated Tests
  • 8. Überblick Fit - Framework for Integrated Tests • FIT wurde entwickelt von Ward Cunningham WIKI-Erfinder...
  • 9. Überblick Fit - Framework for Integrated Tests • FIT wurde entwickelt von Ward Cunningham WIKI-Erfinder... • Motivation von Fit Tests – Automatisierung von Akzeptanztests mittels Tabellen – Framework für Datengetriebene Tests – Data-Driven-Test (xUnit Test Patterns - Gerard Meszaros)
  • 10. Überblick Fit - Framework for Integrated Tests • FIT wurde entwickelt von Ward Cunningham WIKI-Erfinder... • Motivation von Fit Tests – Automatisierung von Akzeptanztests mittels Tabellen – Framework für Datengetriebene Tests – Data-Driven-Test (xUnit Test Patterns - Gerard Meszaros) • Fit Design - Open Framework – Beautiful Code beschreibt in „Fit Tests- BEAUTY THROUGH FRAGILITY“ das Design von Fit als ein Open
  • 11. Testen mit Fit Tabellen • Fit Tests für den Beispiel Zinsrechner
  • 12. Testen mit Fit Tabellen • Fit Tests als ColumnFixture Tabelle Betrag 10
  • 13. Testen mit Fit Tabellen • Fit Tests als ColumnFixture Tabelle Betrag Zinssatz 10 2.5
  • 14. Testen mit Fit Tabellen • Fit Tests als ColumnFixture Tabelle Betrag Zinssatz Laufzeit 10 2.5 2
  • 15. Testen mit Fit Tabellen • Fit Tests als ColumnFixture Tabelle Betrag Zinssatz Laufzeit Summe 10 2.5 2 10.51
  • 16. Testen mit Fit Tabellen • Fit Tests als ColumnFixture Tabelle Betrag Zinssatz Laufzeit Summe() 10 2.5 2 10.51
  • 17. Testen mit Fit Tabellen • Fit Tests als ColumnFixture Tabelle Betrag Zinssatz Laufzeit Summe() Testfall 10 2.5 2 10.51
  • 18. Testen mit Fit Tabellen • Fit Tests als ColumnFixture Tabelle Eingehende - Werte Betrag Zinssatz Laufzeit Summe() Testfall 10 2.5 2 10.51
  • 19. Testen mit Fit Tabellen • Fit Tests als ColumnFixture Tabelle Prüfung eines Ergebnis Eingehende - Werte Betrag Zinssatz Laufzeit Summe() Testfall 10 2.5 2 10.51
  • 20. Testen mit Fit Tabellen • Fit Tests als ColumnFixture Tabelle Betrag Zinssatz Laufzeit Summe() 10 2.5 2 10.51 10 10 3 25.94 10 10 10 100000 ... ... ... ... Testfälle
  • 21. Testen mit Fit Tabellen • Fit Tests als ColumnFixture Tabelle Applikation Anbindung (Java Klasse) Prüfung des Ergebnis Eingehende - Werte onlinerechner.ZinsenFixture Betrag Zinssatz Laufzeit Summe() 10 2.5 2 10.51 10 10 3 25.94 10 10 10 100000 ... ... ... ... Testfälle
  • 22. Testen mit Fit Tabellen • Fit Tests als ColumnFixture Tabelle
  • 23. Testen mit Fit Tabellen • Fit Tests als ColumnFixture Tabelle Gelb =Ausnahme - Fehler im Test
  • 24. Testen mit Fit Tabellen • Fit Tests als ColumnFixture Tabelle Gelb =Ausnahme - Fehler im Test Grün = erfolgreicher Test
  • 25. Testen mit Fit Tabellen • Fit Tests als ColumnFixture Tabelle Rot = Fehler in der Anwendung Gelb =Ausnahme - Fehler im Test Grün = erfolgreicher Test
  • 26. Testen mit Fit Tabellen • Fit Test als ActionFixture Tabelle fit.ActionFixture start ZinsenActionFixture enter Betrag 10 enter Zinssatz 2,5 enter Laufzeit 2 press Submit check Summe 10,51
  • 27. Testen mit Fit Tabellen • Fit Test als ActionFixture Tabelle Befehle / Kommandos fit.ActionFixture start ZinsenActionFixture enter Betrag 10 enter Zinssatz 2,5 enter Laufzeit 2 press Submit check Summe 10,51
  • 28. Testen mit Fit Tabellen • Fit Test als ActionFixture Tabelle Befehle / Kommandos fit.ActionFixture start ZinsenActionFixture enter Betrag 10 Argumente enter Zinssatz 2,5 enter Laufzeit 2 press Submit check Summe 10,51
  • 29. Testen mit Fit Tabellen • Fit Test als ActionFixture Tabelle Befehle / Kommandos fit.ActionFixture start ZinsenActionFixture enter Betrag 10 Argumente enter Zinssatz 2,5 enter Laufzeit 2 press Submit check Summe 10,51 Objekt / Auswahl / Target
  • 30. Testen mit Fit Tabellen • Fit Test als ActionFixture Tabelle Befehle / Kommandos fit.ActionFixture start ZinsenActionFixture enter Betrag 10 Argumente enter Zinssatz 2,5 Testfall enter Laufzeit 2 press Submit check Summe 10,51 Objekt / Auswahl / Target
  • 31. Testen mit Fit Tabellen • Fit Test als ActionFixture Tabelle Befehle / Kommandos Anbindung an die Applikation (Java) fit.ActionFixture start ZinsenActionFixture enter Betrag 10 Argumente enter Zinssatz 2,5 Testfall enter Laufzeit 2 press Submit check Summe 10,51 Objekt / Auswahl / Target
  • 32. Testen mit Fit Tabellen • Fit Test als ActionFixture Tabelle
  • 33. Testen mit Fit Tabellen • Fit Test als ActionFixture Tabelle Prüfung
  • 34. Testen mit Fit Tabellen • Fit Test als ActionFixture Tabelle Eingaben Prüfung
  • 35. Testen mit Fit Tabellen • Fit Test als ActionFixture Tabelle Eingaben Aktion - Zinsen Berechnen Prüfung
  • 36. Testen mit Fit Tabellen • Fit Test als ActionFixture Tabelle Anwendung Starten Eingaben Aktion - Zinsen Berechnen Prüfung
  • 37. Testen mit Fit Tabellen • Weiteres Beispiel für eine ActionFixture Tabelle fit.ActionFixture start jugs.Zinsrechner enter Betrag 0 enter Zinssatz 2,5 enter Laufzeit 0 press Submit check Fehler Kein gültiger Betrag check Fehler Keine gültige Laufzeit
  • 38. Testen mit Fit Tabellen • Mengen testen mit RowFixture Tabellen Jugs.TeilnehmerListe Titel Author Keynote - Wie ich lernte, das Johannes Link Testen zu lieben Glass-Box-Test zur Testsuite- Rainer Schmidberger Optimierung Wertvolle Unittests durch DSL Ulf Müller orientiertes API Design ... ...
  • 39. Testen mit Fit Tabellen • Geordnete Listen testen mit RowFixture Tabellen Jugs.TeilnehmerListe Nr Titel Author 1 Keynote - Wie ich lernte, das Testen zu Johannes Link lieben 2 Glass-Box-Test zur Testsuite- Rainer Optimierung Schmidberger 3 Wertvolle Unittests durch DSL Ulf Müller orientiertes API Design ... ...
  • 40. Testen mit Fit Tabellen • Testen mit Sequenzen von Tabelle  Beispiel Fit Test ... fit.ActionFixture start jugs.TestTageAnmel enter den name Baranows enter Titel Fit ki Tests pressSubmit Submit chec einladung true k Jugs.TeilnehmerListe Titel Author Keynote - Wie ich lernte, Johannes Link das Testen zu lieben Glass-Box-Test zur Rainer Schmidberger Testsuite-Optimierung Ulf Müller Wertvolle Unittests durch DSL orientiertes API Design ... ...
  • 41. Fit Tabellen und Applikation verknüpfen • Fit Design – drei Klassen Framework ... ? ? ?
  • 42. • Fit Design – drei Klassen Framework
  • 43. Fit Tabellen und Applikation verknüpfen • Fit Design – Fixtures
  • 44. Fit Tabellen und Applikation verknüpfen • Beispiel - ColumnFixture entwickeln onlinerechner.ZinsenFixture Betrag Zinssatz Laufzeit Summe() 10 2,5 2 10,51 10 10 3 25,94 20 10 10 100000 ... ... ... ...
  • 45. Fit Tabellen und Applikation verknüpfen • Beispiel - ColumnFixture
  • 46. Fit Tabellen und Applikation verknüpfen • Beispiel - ColumnFixture SUT
  • 47. Fit Tabellen und Applikation verknüpfen • Beispiel - ColumnFixture SUT Anbindung an SUT
  • 48. • Beispiel Code - ColumnFixture public class ZinsenFixture extends ColumnFixture { private Zinsen zinsen = new Zinsen(); public double betrag; public double zinsatz; public double laufzeit; public double summe() { zinsen.setBetrag(betrag); zinsen.setLaufzeit(laufzeit); zinsen.setZinssatz(zinsatz); return zinsen.berechneZinsen(); } }
  • 49. • Beispiel Code - ColumnFixture public class ZinsenFixture extends ColumnFixture { Basis Klasse für private Zinsen zinsen = new Zinsen(); Fit Extension public double betrag; public double zinsatz; public double laufzeit; public double summe() { zinsen.setBetrag(betrag); zinsen.setLaufzeit(laufzeit); zinsen.setZinssatz(zinsatz); return zinsen.berechneZinsen(); } }
  • 50. • Beispiel Code - ColumnFixture public class ZinsenFixture extends ColumnFixture { Basis Klasse für private Zinsen zinsen = new Zinsen(); Fit Extension public double betrag; SUT public double zinsatz; public double laufzeit; public double summe() { zinsen.setBetrag(betrag); zinsen.setLaufzeit(laufzeit); zinsen.setZinssatz(zinsatz); return zinsen.berechneZinsen(); } }
  • 51. • Beispiel Code - ColumnFixture public class ZinsenFixture extends ColumnFixture { Basis Klasse für private Zinsen zinsen = new Zinsen(); Fit Extension public double betrag; SUT public double zinsatz; public double laufzeit; Eingehende - Werte public double summe() { zinsen.setBetrag(betrag); zinsen.setLaufzeit(laufzeit); zinsen.setZinssatz(zinsatz); return zinsen.berechneZinsen(); } }
  • 52. • Beispiel Code - ColumnFixture public class ZinsenFixture extends ColumnFixture { Basis Klasse für private Zinsen zinsen = new Zinsen(); Fit Extension public double betrag; SUT public double zinsatz; public double laufzeit; Eingehende - Werte public double summe() { Prüfung - Ausgabe zinsen.setBetrag(betrag); zinsen.setLaufzeit(laufzeit); zinsen.setZinssatz(zinsatz); return zinsen.berechneZinsen(); } }
  • 53. • Beispiel Code - ColumnFixture public class ZinsenFixture extends ColumnFixture { Basis Klasse für private Zinsen zinsen = new Zinsen(); Fit Extension public double betrag; SUT public double zinsatz; public double laufzeit; Eingehende - Werte public double summe() { Prüfung - Ausgabe zinsen.setBetrag(betrag); zinsen.setLaufzeit(laufzeit); zinsen.setZinssatz(zinsatz); Anbindung return zinsen.berechneZinsen(); an SUT } }
  • 54. Fit Tabellen und Applikation verknüpfen • Beispiel - ActionFixture entwickeln fit.ActionFixture start onlinerechner.ZinsenActionFixtu enter re Betrag 10 enter Zinssatz 2,5 enter Laufzeit 2 press berechneZinsen check Summe 10,51
  • 55. Fit Tabellen und Applikation verknüpfen • Beispiel - ActionFixture entwickeln fit.ActionFixture GOF - Dekorierer-Muster start onlinerechner.ZinsenActionFixtu enter re Betrag 10 enter Zinssatz 2,5 enter Laufzeit 2 press berechneZinsen check Summe 10,51
  • 56. Fit Tabellen und Applikation verknüpfen • Beispiel - ActionFixture entwickeln
  • 57. • Beispiel Code - ActionFixture public class ZinsenActionFixture extends Fixture { Zinsen zinsen = new Zinsen(); double summe; public void betrag(double betrag) { zinsen.setBetrag(betrag); } … public void berechneZinsen() { summe = zinsen.berechneZinsen(); } public double summe() { return summe; } }
  • 58. • Beispiel Code - ActionFixture public class ZinsenActionFixture extends Fixture { Zinsen zinsen = new Zinsen(); double summe; public void betrag(double betrag) { zinsen.setBetrag(betrag); Eingaben / Enter } … public void berechneZinsen() { summe = zinsen.berechneZinsen(); } public double summe() { return summe; } }
  • 59. • Beispiel Code - ActionFixture public class ZinsenActionFixture extends Fixture { Zinsen zinsen = new Zinsen(); double summe; public void betrag(double betrag) { zinsen.setBetrag(betrag); Eingaben / Enter } … public void berechneZinsen() { Aktion / Press summe = zinsen.berechneZinsen(); } public double summe() { return summe; } }
  • 60. • Beispiel Code - ActionFixture public class ZinsenActionFixture extends Fixture { Zinsen zinsen = new Zinsen(); double summe; public void betrag(double betrag) { zinsen.setBetrag(betrag); Eingaben / Enter } … public void berechneZinsen() { Aktion / Press summe = zinsen.berechneZinsen(); } public double summe() { return summe; Ausgabe Prüfung / Check } }
  • 61. Fit Tabellen und Applikation verknüpfen • Fixture dekorieren fit.AliasFixture mappin mappingAlias.xml start g fit.ActionFixture start Login enter username baranowski enter password test enter frageNochmal Nein press login check login sucessfull true
  • 62. Fit Tabellen und Applikation verknüpfen • Fixture dekorieren GOF - Dekorierer-Muster fit.AliasFixture mappin mappingAlias.xml start g fit.ActionFixture start Login enter username baranowski enter password test enter frageNochmal Nein press login check login sucessfull true
  • 63. Fit Tabellen und Applikation verknüpfen fit.AliasFixture • Fixture dekorieren mappin mappingAlias.xml g start fit.ActionFixture start Login enter username baranowski :AliasFixture enter password test enter frageNochmal Nein press login check login sucessfull true
  • 64. Fit Tabellen und Applikation verknüpfen fit.AliasFixture • Fixture dekorieren mappin mappingAlias.xml g start fit.ActionFixture Erster Start und mapping Methoden start Login enter username baranowski :AliasFixture enter password test enter frageNochmal Nein press login check login sucessfull true :ActionFixture
  • 65. Fit Tabellen und Applikation verknüpfen fit.AliasFixture • Fixture dekorieren mappin mappingAlias.xml g start fit.ActionFixture Erster Start und mapping Methoden start Login enter username baranowski :AliasFixture enter password test enter frageNochmal Nein press login check login sucessfull true :ActionFixture Zweiter Start :Login
  • 66. Fit Tabellen und Applikation verknüpfen fit.AliasFixture • Fixture dekorieren mappin mappingAlias.xml g start fit.ActionFixture Erster Start und mapping Methoden start Login enter username baranowski :AliasFixture enter password test enter frageNochmal Nein press login check login sucessfull true :ActionFixture Zweiter Start :Login Eigenes Fixture username, password...
  • 67. Fit Test Abdeckung • Statement Coverage • Branch Coverage • Werkzeuge – Emma – Cobertura
  • 69. Agenda • Teil I - Einführung FIT – Testen mit Fit Tabellen – Fit Tabellen und Applikation verknüpfen • Teil II - Webapplikation testen Fit und Selenium – Einführung in Selenium – Selenium in Fit Tests nutzen (Selenium Fixture) • Teil III - Einführung in XMLFit – Fitnesse – Testen mittels Wiki und Fit – XMLFit – Fit Tests mit XML DSL entwickeln
  • 70. Einführung in Selenium Selenium Core Selenium Selenium RC IDE
  • 71. Selenium Core • Selenium Core - Beispiel Zinsrechner open /JugsBase/zinsrechner.jsp type betrag 20.0 type zinsatz 22.0 type laufzeit 100.0 clickAndWait submit assertTextPrese 8649939365.27 Euro nt
  • 72. Selenium Core • Selenium Core - Beispiel Zinsrechner Action - Tabelle Selenium Befehl open /JugsBase/zinsrechner.jsp type betrag 20.0 type zinsatz 22.0 Argumente type laufzeit 100.0 clickAndWait submit Target assertTextPrese 8649939365.27 Euro nt
  • 73. Selenium IDE • Selenium IDE- Capture & Replay Tests Action Tabelle
  • 74. Selenium Remote Control Selenium Server Browser Firefox, IE Selenium Core JAVA, PHP... SUT HTTP Proxy Webapplikation
  • 75. Selenium Remote Control • Selenium RC- JUnit Beispiel Zinsrechner @Test public void testZinsenBerechnen() throws Exception { selenium.open("/JugsBase/zinsrechner.jsp"); selenium.type("betrag", "10.0"); selenium.type("zinssatz", "10.0"); selenium.type("laufzeit", "5.0"); selenium.click("submit"); selenium.waitForPageToLoad("30000"); assertTrue(selenium.isTextPresent("16.11 Euro")); }
  • 76. Selenium Remote Control • Fit und Selenium RC mittels allgemeinem Selenium Fixture fit. SeleniumFixture open /JugsBase/zinsrechner.jsp type betrag 10.0 type zinssatz 10.0 type laufzeit 5.0 clickAndWait submit assertTextPrese 16.11 Euro nt
  • 77. Selenium Remote Control • Selenium RC- Selenium Fixture für Fit ... public void type(Argument selektor, Argument arg) throws Exception { try { selenium.type(selektor.text(), arg.text()); } catch(Exception e) { exception(selektor, e); return; } right(selektor); right(arg); } ...
  • 78. Selenium Remote Control • Selenium RC in Fit Fixture – Beispiel ColumnFixture onlinerechner.SeleniumZinsenFixtur e etrag Zinssatz Laufzeit Summe() B 10 2,5 2 10,51 10 10 3 25,94 20 10 10 100000 ... ... ... ...
  • 79. Selenium Remote Control • Selenium RC- Fit Beispiel Zinsrechner ... public String summe() { selenium.open("/JugsBase/zinsrechner.jsp"); selenium.type("betrag", String.valueOf(betrag)); selenium.type("zinssatz", String.valueOf(zinssatz)); selenium.type("laufzeit", String.valueOf(laufzeit)); selenium.click("submit"); selenium.waitForPageToLoad("30000"); String summe = selenium.getText( "//table[@id='zinsergebnis']//tr[4]/td[2]"); return summe; } ...
  • 80. Agenda • Teil I - Einführung FIT – Testen mit Fit Tabellen – Fit Tabellen und Applikation verknüpfen • Teil II - Webapplikation testen Fit und Selenium – Einführung in Selenium – Selenium in Fit Tests nutzen (Selenium Fixture) • Teil III - Einführung in XMLFit – Fitnesse – Testen mittels Wiki und Fit – XMLFit – Fit Tests mit XML DSL entwickeln
  • 82. Einführung in XMLFit • Warum Fit als Framework für Systemtests?
  • 83. Einführung in XMLFit • Warum Fit als Framework für Systemtests? – Nachvollziehbarkeit: Testdaten und Testablauf sind nicht getrennt!
  • 84. Einführung in XMLFit • Warum Fit als Framework für Systemtests? – Nachvollziehbarkeit: Testdaten und Testablauf sind nicht getrennt! – Lesbarkeit: Tests können von der Fachabteilung verstanden werden und mit formuliert werden...
  • 85. Einführung in XMLFit • Warum Fit als Framework für Systemtests? – Nachvollziehbarkeit: Testdaten und Testablauf sind nicht getrennt! – Lesbarkeit: Tests können von der Fachabteilung verstanden werden und mit formuliert werden... – Tests können zur Kommunikation mit dem Kunden dienen
  • 86. Einführung in XMLFit • Warum Fit als Framework für Systemtests? – Nachvollziehbarkeit: Testdaten und Testablauf sind nicht getrennt! – Lesbarkeit: Tests können von der Fachabteilung verstanden werden und mit formuliert werden... – Tests können zur Kommunikation mit dem Kunden dienen – Plattformunabhängig: Testlogik (Implementierung) ist Plattformunabhängig
  • 87. Einführung in XMLFit • Warum Fit als Framework für Systemtests? – Nachvollziehbarkeit: Testdaten und Testablauf sind nicht getrennt! – Lesbarkeit: Tests können von der Fachabteilung verstanden werden und mit formuliert werden... – Tests können zur Kommunikation mit dem Kunden dienen – Plattformunabhängig: Testlogik (Implementierung) ist Plattformunabhängig – Testergebnis kann direkt als Testprotokoll genutzt werden
  • 89. Einführung in XMLFit • Nachteile von Fit als Motivation
  • 90. Einführung in XMLFit • Nachteile von Fit als Motivation – Tests mittels HTML formulieren ist sehr umständlich und unübersichtlich
  • 91. Einführung in XMLFit • Nachteile von Fit als Motivation – Tests mittels HTML formulieren ist sehr umständlich und unübersichtlich – HTML mittels WYSIWYG schwierig
  • 92. Einführung in XMLFit • Nachteile von Fit als Motivation – Tests mittels HTML formulieren ist sehr umständlich und unübersichtlich – HTML mittels WYSIWYG schwierig – Wiederverwendbare Komponenten, z.B. Login, nicht einfach möglich
  • 93. Einführung in XMLFit • Nachteile von Fit als Motivation – Tests mittels HTML formulieren ist sehr umständlich und unübersichtlich – HTML mittels WYSIWYG schwierig – Wiederverwendbare Komponenten, z.B. Login, nicht einfach möglich – Testabläufe mit verschiedenen Testdaten nicht einfach modellierbar
  • 94. Einschub – Überblick Fitnesse • Fitnesse – Testen mittels Wiki und Fit |ZinsenTestFixture| |betrag|zinsatz|laufzeit|summe?| |10|2.5|2|10.50625| |10|2.5|2|10|
  • 95. Einschub – Überblick Fitnesse • Fitnesse – Testen mittels Wiki und Fit Column-Fixture-Tabelle |ZinsenTestFixture| |betrag|zinsatz|laufzeit|summe?| |10|2.5|2|10.50625| |10|2.5|2|10|
  • 96. Einschub – Überblick Fitnesse • Fitnesse – Testen mittels Wiki und Fit Column-Fixture-Tabelle |ZinsenTestFixture| |betrag|zinsatz|laufzeit|summe?| |10|2.5|2|10.50625| |10|2.5|2|10| ...Etwas unübersichtlich bei vielen Daten ...
  • 99. Einschub – Überblick Fitnesse • Vorteile von Fitnesse
  • 100. Einschub – Überblick Fitnesse • Vorteile von Fitnesse – DSL für HTML Tests einfacher klassische HTML Fit Tests
  • 101. Einschub – Überblick Fitnesse • Vorteile von Fitnesse – DSL für HTML Tests einfacher klassische HTML Fit Tests – WIKI, kann von verteilten Teams genutzt werden
  • 102. Einschub – Überblick Fitnesse • Vorteile von Fitnesse – DSL für HTML Tests einfacher klassische HTML Fit Tests – WIKI, kann von verteilten Teams genutzt werden – Test Komponenten durch Page include
  • 104. Einschub – Überblick Fitnesse • Nachteile von Fitnesse
  • 105. Einschub – Überblick Fitnesse • Nachteile von Fitnesse – Debugging der Fixture und der Tests nur remote möglich
  • 106. Einschub – Überblick Fitnesse • Nachteile von Fitnesse – Debugging der Fixture und der Tests nur remote möglich – Fixture bereitstellen
  • 107. Einschub – Überblick Fitnesse • Nachteile von Fitnesse – Debugging der Fixture und der Tests nur remote möglich – Fixture bereitstellen – Kein so einfacher Test Report der archiviert werden kann
  • 108. Einschub – Überblick Fitnesse • Nachteile von Fitnesse – Debugging der Fixture und der Tests nur remote möglich – Fixture bereitstellen – Kein so einfacher Test Report der archiviert werden kann – Hosting von Fitnesse
  • 109. Einschub – Überblick Fitnesse • Nachteile von Fitnesse – Debugging der Fixture und der Tests nur remote möglich – Fixture bereitstellen – Kein so einfacher Test Report der archiviert werden kann – Hosting von Fitnesse – Testabdeckung kann nur schwierig gemessen werden
  • 110. Einschub – Überblick Fitnesse • Nachteile von Fitnesse – Debugging der Fixture und der Tests nur remote möglich – Fixture bereitstellen – Kein so einfacher Test Report der archiviert werden kann – Hosting von Fitnesse – Testabdeckung kann nur schwierig gemessen werden – Für Daten getriebene Entwicklertests / Komponententests nicht geeignet
  • 111. Einführung in XMLFit • XMLFit einen XML basierte DSL für Fit Tests
  • 112. Einführung in XMLFit • XMLFit einen XML basierte DSL für Fit Tests XML Model
  • 113. Einführung in XMLFit • XMLFit einen XML basierte DSL für Fit Tests FIT Tests XML Model
  • 115. Einführung in XMLFit • XMLFit einen XML basierte DSL für Fit Tests
  • 116. Einführung in XMLFit • XMLFit einen XML basierte DSL für Fit Tests – DSL aus der die HTML Tests generiert werden
  • 117. Einführung in XMLFit • XMLFit einen XML basierte DSL für Fit Tests – DSL aus der die HTML Tests generiert werden – XML da gute Tool-Unterstützung
  • 118. Einführung in XMLFit • XMLFit einen XML basierte DSL für Fit Tests – DSL aus der die HTML Tests generiert werden – XML da gute Tool-Unterstützung – Aus Testdaten mehre Fit Tests generieren über Variablen und DatenSets
  • 119. Einführung in XMLFit • XMLFit einen XML basierte DSL für Fit Tests – DSL aus der die HTML Tests generiert werden – XML da gute Tool-Unterstützung – Aus Testdaten mehre Fit Tests generieren über Variablen und DatenSets – Simpler Ansatz zur Testerzeugung
  • 120. Einführung in XMLFit • XMLFit einen XML basierte DSL für Fit Tests – DSL aus der die HTML Tests generiert werden – XML da gute Tool-Unterstützung – Aus Testdaten mehre Fit Tests generieren über Variablen und DatenSets – Simpler Ansatz zur Testerzeugung – Dateibasierter Ansatz - XMLFit Tests können mittel SVN oder CVS verwaltet werden...
  • 121. XMLFit Design • Version 0.0.1 – XSLT basierende Transformation • Version 0.0.2 – OAW basierende Transformation XSL Meta Modell XML FIT HTML OAW XML Modell
  • 122. Einführung in XMLFit • Einfaches Beispiel Zinsrechner:
  • 123. Einführung in XMLFit • Einfaches Beispiel Zinsrechner: <actionFixture type="fit.SeleniumFixture"> <command name="open"> <target>/JugsBase/zinsrechner.jsp</target> </command> <command name="type"> <target>betrag</target> <value>5.0</value> </command> ... <command name="assertTextPresent"> <target>25.94 Euro</target> </command> </actionFixture>
  • 124. Einführung in XMLFit • Einfaches Beispiel Zinsrechner: ... <test id="001" name="Zinsen"> <testStep file="example-zinsrechner.xml" /> </test> ...
  • 125. Einführung in XMLFit • Beispiel Zinsrechner mit getrennten Testdaten: <actionFixture type="fit.SeleniumFixture"> ... <command name="type"> <target>betrag</target> <value>${betrag}</value> </command> ... </actionFixture>
  • 126. • Beispiel Zinsrechner mit getrennten Testdaten: <test id="002" name="Zinsen"> <testStep file="example-zinsrechner2.xml"> <property name="betrag" value="10"/> <property name="zinssatz" value="5"/> <property name="laufzeit" value="10"/> <property name="summe" value="24"/> </testStep> <testStep file="example-zinsrechner2.xml"> <property name="betrag" value="20"/> <property name="zinssatz" value="50"/> <property name="laufzeit" value="110"/> <property name="summe" value="241"/> </testStep> </test>
  • 127. Einführung in XMLFit • Beispiel Zinsrechner mit getrennten Testdaten: ... <test id="002" name="Zinsen"> <testStep file="example-zinsrechner2.xml" data="example-data-zins.xml" /> </test> ...
  • 128. Einführung in XMLFit • Beispiel Zinsrechner mit getrennten Testdaten: <data> <dataSet> <betrag>10</betrag> <laufzeit>10</laufzeit> <zinssatz>11</zinssatz> <summe>110</summe> </dataSet> </data>
  • 129. Einführung in XMLFit • Mehre Tests als Tabellen Sequenzen aus Daten generieren <test id="004" name="Zinsen"> <testStep file="example-zinsrechner2.xml" data="example-data-zins.xml" /> <testStep file="example-zinsrechner2.xml"> <property name="betrag" value="10"/> <property name="zinssatz" value="5"/> <property name="laufzeit" value="10"/> <property name="summe" value="24"/> </testStep> </test>
  • 130. Agenda • Teil I - Einführung FIT – Testen mit Fit Tabellen – Fit Tabellen und Applikation verknüpfen • Teil II - Webapplikation testen Fit und Selenium – Einführung in Selenium – Selenium in Fit Tests nutzen (Selenium Fixture) • Teil III - Einführung in XMLFit – Fitnesse – Testen mittels Wiki und Fit – XMLFit – Fit Tests mit XML DSL entwickeln • Übungsaufgabe
  • 131. Einführung in Übungsaufgabe • Eclipse Projekt einrichten mit Maven „mvn eclipse:eclipse“ • XMLFit Tests oder Fit Tests ausführen mit „mvn test“ • Firefox Selenium IDE einrichten • Selenium RC Server starten • ...
  • 133. Referenzen • Fit for Developing Software - Rick Mugridge und Ward Cunningham
  • 134. Referenzen • xUnit Test Patterns (Refactoring Test Code)- Gerard Meszaros
  • 135. Referenzen • Beautiful Code - Michael Feathers: Framework for Integrated Test: Beauty through Fragility, et al.
  • 136. Werkzeuge Links zu Werkzeugen: FIT - http://fit.c2.com/ Selenium - http://seleniumhq.org/ JUnit 4.X - http://www.junit.org/ Fitnesse - http://fitnesse.org/ OAW - http://www.openarchitectureware.org/ NVU – WYSIWYG HTML Editor: http://net2.com/nvu/ download.html XMLFIT - http://xmlfit.sourceforge.net/ Apache Maven - http://maven.apache.org/ Cobertura - http://cobertura.sourceforge.net/ EclEmma - http://www.eclemma.org/ Eclipse – http://www.eclipse.org

Notes de l'éditeur