Testramverk och Model based testing med java i praktiken



Relevanta dokument
ID1020 Introduktion av Maven. Dr. Jim Dowling

FRÅN MAVEN TILL GRADLE

Versionshantering. Jan Erik Moström

Vad kännetecknar en god klass. Vad kännetecknar en god klass. F12 Nested & Inner Classes

LUNDS TEKNISKA HÖGSKOLA EDAA01 Programmeringsteknik fördjupningskurs Institutionen för datavetenskap HT 2015

JUnit 4 - användning. Grunderna. org.junit. org.junit.test. Henrik Bergström DSV SU/KTH. Innehåller bland annat:

JUnit. Junit Unit Testing. JUnit 3. JUnit 3 forts. Villkorskontroller i test. Exempel JUnit3

Tentamen FYTA11 Javaprogrammering

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

F6 Objektorienterad design. ID1004 Objektorienterad programmering Fredrik Kilander

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Elisabet Stöök Konsult SAS Institute AB Copyright 2003, SAS Institute Inc. All rights reserved.

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

Labb 1: Vad, hur, och varför?

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

QC i en organisation SAST

l uppgiftsformulering l algoritmkonstruktion l verifikation l kodning l testning och avlusning l validering l dokumentering l underhœll Kapitel 2

Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

SOA One Year Later and With a Business Perspective. BEA Education VNUG 2006

Swedish framework for qualification

Lösningsförslag till tentamen FYTA11 Javaprogrammering

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Automatiserad GUI-testning för Java EDA270 - Djupstudie. J. Assarsson D08, Lunds Tekniska Högskola dt08ja2@student.lth.se

Att skriva till och läsa från terminalfönstret

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

F4. programmeringsteknik och Matlab

Reguljära uttryck. Reguljära uttryck. Nu kommer en siffra78 och en till SIFFRA(78) men utan 7kstuga SIFFRA(89)

Övning vecka 6. public void method2() { //code block C method3(); //code block D }//method2

Utveckla samarbete inom avdelningen. Utveckla samarbetet. mini workshop! i butikens ledningsgrupp. Grid International AB. Grid International AB

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

Swedbank Mobile Loadtesting. LoadRunner Mobile App protocol

Schenker Privpak AB Telefon VAT Nr. SE Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr Säte: Borås

Laboration 10 - NetBeans

Grundläggande programmering DVG A08 & ISG A04. Allmän information. Å vem är jag då. Karlstads Universitet, Johan Öfverberg 1

Skapa din E-post lista med. Lotta Carlberg. Lotta Carlberg

Schenker Privpak AB Telefon VAT Nr. SE Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr Säte: Borås

Lösningar till tentamen i EDAF25

Föreläsning 3. Stack

Föreläsning 3. Stack

Denna vecka. Idag. Grafiskt användarsnitt. Vi kommer att se

SI-pass 4. Johan Brook och Jesper Persson. 25 september Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner.

Institutionen för datavetenskap HT /2008. Testning med JUnit

Rosetta. Ido Peled. A Digital Preservation System. December Rosetta Product Manager

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Objektorienterad Programmering (TDDC77)

Health café. Self help groups. Learning café. Focus on support to people with chronic diseases and their families

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Jörgen Damberg, Claremont, SAST Örebro Testautomation. När, var, hur?

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 5

SharePoint 2010 licensiering Wictor Wilén

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

Laboration 10 - Eclipse

Stackar, köer, iteratorer och paket

Dugga i Grundläggande programmering STS, åk

Implementering av Model- Based Testing i LoadRunner

ISO STATUS. Prof. dr Vidosav D. MAJSTOROVIĆ 1/14. Mašinski fakultet u Beogradu - PM. Tuesday, December 09,

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

Biblioteket.se. A library project, not a web project. Daniel Andersson. Biblioteket.se. New Communication Channels in Libraries Budapest Nov 19, 2007

Dagens program. Objektorienterad modellering och diskreta strukturer / design. Model/View/Control-implementering. Model/View/Control-arkitektur

Flytta din affär till molnet

Concurrency Saker händer samtidigt. Process En instans av ett program

Recitation 4. 2-D arrays. Exceptions

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 1 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.

Lösningsförslag till tentamen i OOP, HI1027 Fredag 21 oktober 2011

OOP Omtenta

Examination i. PROGRAMMERINGSTEKNIK F1/TM1 TIN212 (Dugga) Dag: Onsdag Datum: Tid: (OBS 3 tim) Rum: V

Outline. Objektorienterad Programmering (TDDC77) Laborationsserie del två. Vad händer under HT2. Introduktion HT2 UML.

Modelsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

TENTAMEN: Objektorienterad programmering. Läs detta! Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem).

Övning vecka 5. Denna vecka ska vi titta pa samlingar, generics och designmönstren Decorator, Singleton och Iterator.

Lösningar för tenta 2 DAT043,

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

Tentamen. Grundläggande programmering i Java A 5p, DTAA

Tentamen. Lösningsförslag

Kort om klasser och objekt En introduktion till GUI-programmering i Java

Objektorienterad Programmering (TDDC77)

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser

Alla rättigheter till materialet reserverade Easec

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2

Modeller, Objekt och Klasser

PAINTFEUD. Erfarenheter

EVALUATION OF ADVANCED BIOSTATISTICS COURSE, part I

Upplägg. Introduktion. Examination. Mål. Konsekvenser. Java. Kursen heter konstruktion, ej design eller formgivning.

State Examinations Commission

3rd September 2014 Sonali Raut, CA, CISA DGM-Internal Audit, Voltas Ltd.

SAS USER FORUM SWEDEN 2017 USER FORUM. SAS Viya och öppenhet en gemomgång av LUA-, Java-, Python- och REST-gränssnitten mot SAS Viya

Programmeringsteknik II - HT18. Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt

INSTALLATIONSGUIDE TILL ANDROID UTVECKLINGSMILJÖ

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Outline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine

Tung bakgrundsaktivitet t.ex. Aktiva objekt t.ex. Animering, simulering. DD2385 Programutvecklingsteknik Några bilder till föreläsning 9 6/5 2013

GUI-programmering. Gustav Taxén Martin Berglund DH2640 Grafik och Interaktionsprogrammering VT 2008

Javas Exceptions. DD2385 Programutvecklingsteknik Fler bilder till föreläsning 7 23/ Kort om Javas Exceptions Trådar i Java

Objektorienterad Programkonstruktion. Föreläsning 3 7 nov 2016

CIO MÖTE OSLO 17/11 INFORMATION // INTELLIGENCE // ADVICE. Radar Ecosystem Specialists

Transkript:

WHITE PAPER MODEL BASED TESTING Testramverk och Model based testing med java i praktiken Prolore AB Page 1 (6) Web: www.prolore.se

Målet med artikeln Den här artikeln syftar till att praktiskt visa hur man med ett antal enkla steg kan komma igång med ett ramverk i java för model-based testing. Här kommer jag att exemplifiera med ett antal verktyg för att interagera med applikationen under test men det är så klart möjligt att använda andra verktyg. Dina kunskaper som läsare Jag förutsätter att du som läsare är insatt i utveckling i Java samt att du är bekant med modellbaserad test, om du saknar denna grund kan du gärna läsa vidare här. För att sätta igång behövs ett antal verktyg: Eclipse (eller NetBeans/ IntelliJ ) Graphwalker (model based testing tool) Selenium Maven Projekt uppsättning För att enkelt komma igång med ramverket använder vi Maven för att paketera ramverket. Först av allt behöver vi sätta upp en konfigurationsmodell, Project Object Model (POM), som beskriver hur projektet ska byggas och dess externa beroenden. Här behöver vi sätta upp de olika ingående modulerna, Graphwalker och Selenium. Generellt så lägger jag inte in specifika versionsnummer då dessa förändras relativt ofta. Värt att notera är att mina exempel bygger på graphwalker 2.5.9 och senare. Exempel på POM.xml: <project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelversion>4.0.0</modelversion> <groupid>testautomation</groupid> <artifactid>regressiontest</artifactid> <version>1.0-snapshot</version> <repositories> <repository> <id>maven repo</id> <url>http://repo1.maven.org/maven2/</url> </repository> </repositories> <dependencies> <groupid>org.graphwalker</groupid> <artifactid>graphwalker</artifactid> <groupid>org.seleniumhq.selenium</groupid> <artifactid>selenium</artifactid> Prolore AB Page 2 (6) Web: www.prolore.se

<groupid>org.seleniumhq.selenium</groupid> <artifactid>selenium-common</artifactid> <groupid>org.seleniumhq.selenium</groupid> <artifactid>selenium-firefox-driver</artifactid> <groupid>log4j</groupid> <artifactid>log4j</artifactid> <groupid>junit</groupid> <artifactid>junit</artifactid> <scope>test</scope> </dependencies> </project> pom.xml Skapa testimplementation Nu har vi ett skal för att börja skapa våra tester. Nästa steg blir att utifrån pom-filen skapa ett nytt projekt i vald utvecklingsmiljö. Här förutsätter jag att du som läser vet hur man skapar ett maven/java projekt. Efter att vi skapat vårt projekt är det nu tid för att börja skapa en testimplementation. Vi börjar med att skapa en ny klass och för att kunna använda den enkelt i vårt ramverk ska den utöka (extends) en klass ifrån Graphwalker. package se.prolore; import org.graphwalker.generators.pathgenerator; import org.graphwalker.multiplemodels.modelapi; public class ProloreTestImpl extends ModelAPI{ public ProloreTestImpl(String model, boolean efsm, PathGenerator generator, boolean weight) { super(model, efsm, generator, weight); ProloreTestImpl.java När vi kommit så här långt behöver vi lägga till ett verktyg för interaktion med testapplikationen. I det här fallet selenium. Här väljer jag att skapa möjlighet att köra med API er för både Selenium1 och Selenium2. private WebDriver masterdriver; //Selenium2 private DefaultSelenium driver; //Selenium1 Prolore AB Page 3 (6) Web: www.prolore.se

public void e_startbrowser(){ FirefoxProfile profile = new FirefoxProfile(); masterdriver = new FirefoxDriver(profile); String startpage = "about:blank"; masterdriver.get(startpage); driver = new WebDriverBackedSelenium(masterdriver,startpage); ProloreTestImpl.java Nu är det ganska rakt på sak att skapa ytterligare implementation av olika teststeg utifrån den test- modell som ska automatiseras. Använda ett unit test ramverk för exkvering När vi nu skapat en testimplementation som korresponderar mot våran testmodell så är det nu hög tid att titta på hur exekverar vi egentligen? Jag väljer här att använda ett unittest-ramverk, i mitt fall Junit4 (det går lika bra med testng). package IntegrationTest; import static org.junit.assert.*; import org.junit.test; import org.graphwalker.conditions.edgecoverage; import org.graphwalker.generators.randompathgenerator; import org.graphwalker.multiplemodels.modelapi; import org.graphwalker.multiplemodels.modelhandler; import org.apache.log4j.logger; import org.graphwalker.util; import se.prolore.proloretestimpl; public class ProloreWebIT { private static final Logger logger = Util.setupLogger(ProloreWebIT.class); @Test public void proloreweb() throws Exception { ModelHandler modelhandler = new ModelHandler(); ModelAPI model = new ProloreTestImpl("graphml/proloreweb.graphml", true, new RandomPathGenerator(new EdgeCoverage(1.0)),false); modelhandler.add("startmodel", model); modelhandler.execute("startmodel"); logger.info(modelhandler.getstatistics()); asserttrue(modelhandler.isallmodelsdone()); ProloreWebIT.java På detta sätt kan vi nu enkelt starta och exekvera tester med hjälp av Junit4. Men i många projekt vill man ofta lägga End2End tester efter exempelvis en deploy av sin site eller applikation. Prolore AB Page 4 (6) Web: www.prolore.se

Lägga regressionstester/integrationstester i en egen fas Nu kan vi bygga vårt projekt med hjälp av Maven men det sker kanske vid fel tidpunkt... Då kan vi gå in i vår POM och lägga till en ny bygg-fas där vi bryter ut våra regressions/integrationstester. Här exkluderar vi även testerna som slutar med *IT.java och *IntegrationTest.java ifrån att exekveras under unittest-fasen i maven bygget. <build> <plugins> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-surefire-plugin</artifactid> <configuration> <excludes> <exclude>**/*it.java,**/*integrationtest.java</exclude> </excludes> </configuration> <executions> <execution> <id>integration-tests</id> <phase>integration-test</phase> <goals> <goal>test</goal> </goals> <configuration> <skip>false</skip> <excludes> <exclude>none</exclude> </excludes> <includes> <include>**/*it.java,**/*integrationtest.java</include> </includes> </configuration> </execution> </executions> </plugin> </plugins> </build> pom.xml Prolore AB Page 5 (6) Web: www.prolore.se

Utöka med flera testverktyg för interaktion med applikationer Som avslutning vill jag bara snabbt lista några ytterligare verktyg som kan vara intressanta att lägga till för att öka möjligheterna att testa olika applikationer. Sikuli Automation med bildigenkänning. Ett enkelt verktyg med ett IDE skrivet i python men själva script motorn har ett java api gränssnitt som enkelt pluggas in i det ovan beskrivna ramverket. UISpec4J Ett ramverk för automation av Java/Swing Gui-automation. Även det enkelt att plugga in i ramverket. Onestonesoup Ett ramverk som jag använt för att skapa screen recording som helt enkelt spelar in vad som sker på skärmen under ett test. Prolore has quality assurance in focus and testing tools as a speciality. We employ the best and brightest consultants in the testing and quality assurance field with the highest level of seniority and a wide range of industry experience. So when you require our expert resources to carry out testing services on your mission-critical projects, you can be assured that we will deploy the highest-calibre people who will hit the ground running and add value quickly. Key service areas are mentoring, training, outsourcing, organization and processes within test management, test automation, performance test, monitoring and metrics. Prolore AB Page 6 (6) Web: www.prolore.se