Ved brug af SoapUI med Selenium til webservicetest

โšก Smart opsummering

SoapUI med Selenium lader รฉn suite tjekke en webtjeneste og den browser, der forbruger den. Groovy er broen, fordi SoapUI lรธber Groovy indfรธdt og Groovy nรฅr hver Java bibliotek Selenium skibe.

  • ๐Ÿ”˜ To vรฆrktรธjer, to lag: SoapUI udรธver SOAP- eller REST-slutpunktet, mens Selenium WebDriver styrer den browser, der kalder den.
  • โ˜‘๏ธ Groovy er limen: SoapUI understรธtninger Groovy i vid udstrรฆkning, og Groovy bรฆrer det hele Java bibliotekssรฆt, sรฅ Selenium koden kรธrer uรฆndret.
  • โœ… Lรธberklasse: SoapUITestCaseRunner รฅbner en projektfil, vรฆlger en testsuite og testcase og udfรธrer den fra Java.
  • ๐Ÿงช Dynamiske data: setProjectProperties() sender vรฆrdier som by og postnummer under kรธrsel i stedet for fra en statisk egenskabsfil.
  • ๐Ÿ› ๏ธ Forudsรฆtninger: Groovy SDK, et JDK, Selenium og SoapUI skal alle installeres inden fรธrste kรธrsel.
  • ๐Ÿ“Š Bevisspor: Hver handling skrives til soapui.log i bin-mappen i installationsmappen.

Ved brug af SoapUI med Selenium til test af webtjenester via Groovy

SoapUI er den mest populรฆre open source funktionstest vรฆrktรธj til API-test. Det giver komplet test dรฆkning og understรธtter alle standardprotokoller og teknologier.

Hvad er SOAP?

SOAP er en simpel XML-baseret protokol. Den tillader applikationer at udveksle information via HTTP. Den bruger webtjenester Description Language (WSDL) til kommunikation, og andre applikationer kan interagere med webservices gennem den WSDL-grรฆnseflade.

SOAP vs. REST webtjenester i SoapUI

SoapUI startede som en SOAP-klient, og navnet siger det stadig, men den tester ogsรฅ REST-slutpunkter. At vide, hvilken stil man peger pรฅ, afgรธr, hvordan testen er bygget op.

Aspect SOAP REST
medtract En WSDL-fil beskriver alle operationer, sรฅ SoapUI kan generere anmodninger automatisk. Normalt en OpenAPI- eller Swagger-definition, eller ingen formel tilladelsetracslet ikke.
Beskedformat Kun XML-konvolut. Normalt JSON, selvom XML og andre formater er tilladt.
Transport Oftest HTTP, men SOAP er transportuafhรฆngig. HTTP, med metoden og URL bรฆrer intentionen.
Pรฅstande i SoapUI XPath og XQuery matcher svarkuverten. JSONPath- og script-pรฅstande matcher nyttelasten.
Typisk brug Bankvirksomhed, telekommunikation og andre handlertract-tunge virksomhedsintegrationer. Offentlige og mobilrettede tjenester, hvor nyttelasten forbliver let.

Gennemgangen nedenfor bruger en SOAP-vejrtjeneste, men den samme runnerklasse kรธrer en REST-testcase uden nogen รฆndringer af Java kode.

Hvad er SOAPUI?

SOAPUI er et open source-vรฆrktรธj til test af webtjenester pรฅ tvรฆrs af platforme. SOAPUI-Pro-udgaven har ekstra funktionalitet til virksomheder, der beskรฆftiger sig med kritiske webtjenester. Webtjenester spiller en betydelig rolle i internetapplikationer.

โš ๏ธ Bemรฆrkning om produktnavn: SmartBear udgรฅet SoapUI om som et selvstรฆndigt produkt og fusionerede det, sammen med LoadUI Pro og ServiceV Pro, ind i ReadyAPIDen gratis udgave holder SoapUI navn og udgives stadig aktivt. Trinene nedenfor fungerer i begge, og eksisterende SoapUI projekter รฅbne i ReadyAPI.

Hvad er Selenium?

Selenium er ikke รฉt program, men en familie af vรฆrktรธjer til at styre en browser, som en person ville gรธre. To medlemmer er vigtige her:

  • Selenium โ€” et testvรฆrktรธj, der automatiserer browsere pรฅ tvรฆrs af mange platforme.
  • Selenium webdriver โ€” den foretager direkte kald til browserne ved hjรฆlp af hver browsers native understรธttelse af automatisering.

Hvorfor kombinere SoapUI og Selenium i รฉn test

Kontrol af tjenesten og kontrol af skรฆrmen er normalt to separate opgaver, der hรฅndteres af to separate suiter, hvilket er grunden til, at en defekt i samlingen mellem dem har tendens til at overleve begge. At kรธre dem sammen lukker dette hul.

  • Bevis rundrejsen. En booking, der er indsendt i browseren, bรธr vises i servicesvaret. Kun en kombineret test kan bekrรฆfte begge halvdele.
  • Opsรฆt tilstand hurtigt. Det tager et sekund at oprette en kunde via API'en; det tager et minut at oprette et til tolv formularfelter og mislykkes oftere.
  • Lokaliser en fejl. Nรฅr brugergrรฆnsefladen viser den forkerte total, fortรฆller API-pรฅstanden dig i samme kรธrsel med det samme, om det er tjenesten eller siden, der er skyld i problemet.
  • Genbrug รฉt datasรฆt. Postnummer- og byparrene i eksemplet nedenfor fรธder servicekaldet og kan ligeledes fรธde browserens assertions.
  • Skรฆr ned pรฅ duplikatdรฆkning. Valideringsregler, der allerede er bevist pรฅ servicelaget, behรธver ikke en test af en langsom browser hver isรฆr.

Afvejningen er en tungere test: to vรฆrktรธjer, to sรฆt afhรฆngigheder og en lรฆngere periode. Behold kombinerede tests for de fรฅ rejser, der virkelig krydser grรฆnsen, og lad resten vรฆre rene. API eller rene browsertjek.

Selenium med SoapUI

Den enkleste og nemmeste mรฅde at integrere pรฅ Selenium med SoapUI er at bruge Groovy, Hvilket SoapUI stรธtter i vid udstrรฆkning.

Groovy er et objektorienteret scriptsprog, der inkluderer alle Java biblioteker, sรฅ alle Java nรธgleord og funktion kan bruges i en Groovy scriptet direkte. Det kรธrer pรฅ JVM'en (Java virtuel maskine), hvilket er det, der tillader en Groovy trรฆde ind SoapUI og en Java Selenium test for at dele de samme klasser.

Forudsรฆtninger for brug Selenium med SoapUI

Installer fรธlgende, fรธr du skriver kode:

โš ๏ธ Versionsnotat: Groovy 5.0 er den nuvรฆrende stabile udgivelse og krรฆver JDK 11 eller nyere, sรฅ installer JDK fรธrst og lad Groovy version fรธlg den. Selenium er tilfรธjet til en Java projekt som en Maven eller Gradle afhรฆngighed snarere end som en downloadet mappe, og SoapUI jar skal sidde pรฅ samme klassesti som din test โ€” det er pรฅ det ene punkt, hvor de fleste fรธrste forsรธg mislykkes.

Ring til SoapUI Testcase-lรธber i Selenium

Koden nedenfor kalder en SoapUI testcase. Den angiver egenskaberne for en by og dens tilsvarende postnummer, og nรฅr den udfรธres, henter den vรฆrdien af โ€‹โ€‹hver by og postnummer og rapporterer derefter antallet af fejl for hvert par, der ikke matcher. Denne kode kรธrer i Selenium.

Bemรฆrk: usePropertyFileFlag=true bruges her i stedet for en statisk egenskabsfil til lagring af postnummer og by. Postnummer og by sendes dynamisk under kรธrsel af setProjectProperties()-metoden.

Instruktioner til at kรธre koden:

  1. Start op SoapUI.
  2. Start en ny testcase.
  3. Tilfรธj en ny Groovy trin.
  4. Kopier og indsรฆt eksempelkoden i trinnet.
  5. Klik pรฅ Spil.
  6. Du kan se Firefox opstart og navigation til GoogleDerefter kan du se SoapUI logposter.
  7. Koden kรธrer ved hjรฆlp af JUnit.

Code Eksempel

@when("<I use the weather service to get the weather information")						
    public void i_use_the_weather_service_to_get_the_information() {
        Set<Entry<String, string>> set = zipAndCities.entrySet();
        while (iterator,hasNext)) {
            Entry<String, String> entry = iterator.next();
            String zipCode = entry.getkey();
            String city = entry.getValue();
            String[] prop = {"usePropertyFileFlag=true","zipCode=" +zipCode, "city=" +city};									
            
            try{
                SoapUITestCaseRunner soapUITestCaseRunner = new	SoapUITestCaseRunner();
                soapUITestCaseRunner.setProjectFile("src/test/resources/WeatherSoapTest-soapui-project.xml");					
                soapUITestCaseRunner.setProjectProperties(prop);
                soapUITestCaseRunner.setTestSuite("TestSuite1");
                soapUITestCaseRunner.setTestCase("TestCase1");
                soapUITestCaseRunner.run();
                
            } catch (Exception e) {
                System.err.println("checking" + zipCode + " failed!");
                failureCount++;
                zipCodes.append(zipCode + " [" + city +"] ");
                e.printStackTrace();
            }finally{					
                totalCount++;
            }
}
}
}

โš ๏ธ Code noter: Dette kodestykke er gengivet prรฆcis som det er udgivet og er et fragment snarere end en kompilerbar klasse. Fรธr det kan bygges, skal du deklarere den iterator, der er hentet fra sรฆt.iterator(), korrekt mens (iterator,harNรฆste)) til mens (iterator.hasNext()) og entry.getkey() til entry.getKey(), skriv annotationen med stort begyndelsestegn som @Hvornรฅr, fjern det vildfarne tegn i starten af โ€‹โ€‹trinteksten, og brug String snarere end streng i Set-deklarationen. Den originale tekst bevares, sรฅ det publicerede eksempel forbliver intakt.

Konsolvisningen giver dig mulighed for at se alle test sags udfรธrt. Du finder en liste over de postnumre og byer, der er hentet og sendt til SoapUI Testtilfรฆlde 1.

Se SoapUI Logfil

Logfiler registrerer alle handlinger, der sker i et operativsystem eller softwareapplikation. For at se SoapUI logfilen, gรฅ til hovedmappen, hvor du vil se en fil med navnet soapui.log.

SoapUI installationsmappeoversigt med soapui.log-filen synlig

In SoapUI, logfilen er placeret i bin-mappen i installationsmappen, for eksempel C:\Program Files\SmartBear\soapUI-Pro-4.0.1\bin. Pรฅ en aktuel installation er versionsmappen anderledes, og en ReadyAPI installationen skriver i stedet til sin egen bin-mappe.

bin-mappen tilhรธrende SoapUI installationsmappen hvor logfilen er gemt

Nรฅr du รฅbner denne logfil ved at klikke pรฅ den, vil den ligne skรฆrmbilledet nedenfor.

Indholdet af soapui.log-filen, der viser de loggede testkรธrselsposter

Hvor SoapUI og Selenium Integration bryder ofte sammen

Nรฆsten alle fejl pรฅ dette tidspunkt er et ledningsproblem snarere end et testproblem. Det er disse, der skal kontrolleres fรธrst.

Symptom Sandsynlig รฅrsag Hvad skal man kontrollere
NoClassDefFoundError eller ClassNotFoundException pรฅ SoapUITestCaseRunner SoapUI jar er ikke pรฅ testklassestien. Tilsรฆt SoapUI afhรฆngighed til byggefilen, eller peg klassestien pรฅ jar-filen i SoapUI lib-mappen. En manglende jar dukker op som en almindelig Selenium undtagelse i konsollen.
Projektfilen kan ikke findes setProjectFile() lรธser en relativ sti i forhold til arbejdsmappen, hvilket er forskelligt mellem et IDE og et byggevรฆrktรธj. Kรธr fra projektroden, eller send en absolut sti.
Testsuite eller testcase ikke fundet Navnene i setTestSuite() og setTestCase() skal stemme nรธjagtigt overens med projektet. Kopier navnene direkte fra SoapUI projekttrรฆ; de skelner mellem store og smรฅ bogstaver.
Ejendommen nรฅr aldrig frem til anmodningen setProjectProperties() kรธrte efter run(), eller anmodningen refererer ikke til egenskaben. Angiv alle egenskaber fรธr run(), og brug egenskabens pladsholdersyntaks i anmodningen.
Browseren starter ikke Driveren og den installerede browser er forskellige stรธrre versioner. Lade Selenium Manager lรธser driveren, eller matcher driveren med browser-buildet.
En funktion virker i IDE'en, men ikke fra runneren Trinnet er afhรฆngig af en Pro-kun-funktion, sรฅsom en datakilde. Bekrรฆft licensen, eller genopbyg trinnet med tilsvarende open source-versioner.

Nรฅr runneren afsluttes uden problemer, og soapui.log viser de forventede poster, fungerer integrationen og kan foldes ind i en bredere automatiseringstest pรฅ.

Ofte Stillede Spรธrgsmรฅl

Open source-udgaven kรธrer Groovy trinvis eksponerer og eksponerer testcase-lรธberen, sรฅ selve integrationen behรธver ingen licens. Pro eller ReadyAPI Funktioner som datakilder og den datadrevne guide er de dele, der vil fejle uden en.

Ja, og det er spejlbilledet af denne gennemgang. Groovy trin kan instantiere en WebDriver direkte, forudsat at Selenium krukker placeres i SoapUI lib-mappen, sรฅ scriptet kan lรธse dem.

SoapUI henretter Groovy indbygget i et scripttrin, uden kompileringscyklus, og Groovy nรฅr hver Java klassen er allerede pรฅ klassestien. Almindelig Java krรฆver et byggetrin, hvilket er grunden Groovy vinder for kort integrationskode.

Pak det ind som en JUnit or TestNG test og lad Maven eller Gradle aktivere den, prรฆcis som eksemplet gรธr. Pรฅ agenten skal browseren kรธre headless, og SoapUI Projektfilen skal committes sammen med testkoden.

Assistenter er nyttige til at udvide et lille sรฆt af by- og postnummerpar til en bredere dรฆkning og til at finde svarfelter, der ikke berรธrer nogen pรฅstand. Genererede vรฆrdier krรฆver stadig en reel kontrol, fordi et plausibelt postnummer ikke er et gyldigt.

Det er det, inden for grรฆnserne. Copilot hรฅndterer Groovy syntaks og almindelig Java ringer godt, men har kun lidt viden om SoapUI scriptingobjekter som testRunner, kontekst og log, sรฅ disse forslag skal gennemgรฅs nรธje.

Gem dem som miljรธvariabler eller i en "secrets manager" og lรฆs dem ind i projektegenskaber under kรธrsel โ€“ den samme mekanisme som setProjectProperties() bruger her. En committed projektfil med en adgangskode i almindelig tekst er en lรฆkage, der bare venter pรฅ at ske.

Behold protokolniveaukontroller โ€” status, skema, XPath pรฅ konvolutten โ€” indeni SoapUI, hvor vรฆrktรธjet er bygget til dem. Hรฆvd i Selenium tester kun hvad browseren selv skal vise, sรฅ en fejl peger pรฅ รฉt lag.

Opsummer dette indlรฆg med: