Använda SoapUI med Selenium för webbtjänsttestning

⚡ Smart sammanfattning

SoapUI med Selenium låter en svit kontrollera en webbtjänst och webbläsaren som konsumerar den. Groovy är bron, eftersom SoapUI kör Groovy inbyggt och Groovy når varje Java Selenium fartyg.

  • 🔘 Två verktyg, två lager: SoapUI utövar SOAP- eller REST-slutpunkten, medan Selenium WebDriver styr webbläsaren som anropar den.
  • ☑️ Groovy är limmet: SoapUI stöder Groovy i stor utsträckning, och Groovy bär hela Java biblioteksuppsättning, så Selenium koden körs oförändrad.
  • Löparklass: SoapUITestCaseRunner öppnar en projektfil, väljer en testsvit och ett testfall och kör det från Java.
  • 🧪 Dynamiska data: setProjectProperties() skickar värden som stad och postnummer vid körning istället för från en statisk egenskapsfil.
  • 🛠️ Förkunskaper: Ocuco-landskapet Groovy SDK, ett JDK, Selenium och SoapUI måste alla installeras före första körningen.
  • 📊 Bevisspår: Varje åtgärd skrivs till soapui.log i bin-mappen i installationskatalogen.

Använda SoapUI med Selenium för testning av webbtjänster via Groovy

SoapUI är den mest populära öppna källkoden funktionstestning verktyg för API-testning. Det ger komplett testtäckning och stöder alla standardprotokoll och teknologier.

Vad är SOAP?

TVÅL är ett enkelt XML-baserat protokoll. Det tillåter applikationer att utbyta information via HTTP. Det använder webbtjänster Description Language (WSDL) för kommunikation, och andra applikationer kan interagera med webbservice genom det WSDL-gränssnittet.

SOAP vs REST webbtjänster i SoapUI

SoapUI började som en SOAP-klient, och namnet säger det fortfarande, men den testar även REST-slutpunkter. Att veta vilken stil man pekar på avgör hur testet byggs upp.

Aspect TVÅL REST
medtract En WSDL-fil beskriver varje operation, så SoapUI kan generera förfrågningar automatiskt. Vanligtvis en OpenAPI- eller Swagger-definition, eller ingen formell kontract alls.
Meddelandeformat Endast XML-kuvert. Vanligtvis JSON, även om XML och andra format är tillåtna.
Johtin Oftast HTTP, men SOAP är transportoberoende. HTTP, med metoden och URL bär avsikten.
Påståenden i SoapUI XPath och XQuery matchar mot svarskuvertet. JSONPath- och skriptintyg matchar nyttolasten.
Typisk användning Bank, telekom och andra affärertract-tunga företagsintegrationer. Offentliga och mobilanpassade tjänster där nyttolasten förblir lätt.

Genomgången nedan använder en SOAP-vädertjänst, men samma runnerklass kör ett REST-testfall utan någon ändring av Java koda.

Vad är SOAPUI?

SOAPUI är ett verktyg för testning av webbtjänster med öppen källkod och plattformsoberoende funktioner. SOAPUI-Pro-utgåvan har extra funktioner för företag som arbetar med kritiska webbtjänster. Webbtjänster spelar en viktig roll i internetapplikationer.

⚠️ Produktnamnsinformation: SmartBear har upphört SoapUI Pro som en fristående produkt och sammanfogade den, tillsammans med LoadUI Pro och ServiceV Pro, till ReadyAPIGratisutgåvan behåller SoapUI namn och släpps fortfarande aktivt. Stegen nedan fungerar i båda, och befintliga SoapUI projekt öppna i ReadyAPI.

Vad är Selenium?

Selenium är inte ett enda program utan en familj av verktyg för att styra en webbläsare på samma sätt som en person skulle göra. Två medlemmar är viktiga här:

  • Selenium — ett testverktyg som automatiserar webbläsare på många plattformar.
  • Selenium webbdrivrutin — den gör direkta anrop till webbläsarna och använder varje webbläsares inbyggda stöd för automatisering.

Varför kombinera SoapUI och Selenium i ett test

Att kontrollera tjänsten och att kontrollera skärmen är vanligtvis två separata jobb som hanteras av två separata sviter, vilket är anledningen till att en defekt i skarven mellan dem tenderar att överleva båda. Att köra dem tillsammans stänger den luckan.

  • Bevisa tur- och returresan. En bokning som skickats i webbläsaren ska visas i servicesvaret. Endast ett kombinerat test kan bekräfta båda halvorna.
  • Ställ in tillstånd snabbt. Att skapa en kund via API:et tar en sekund; att skapa ett till tolv formulärfält tar en minut och misslyckas oftare.
  • Lokalisera ett fel. När användargränssnittet visar fel totalsumma, meddelar API-kontrollen i samma körning omedelbart om det är tjänsten eller sidan som är felet.
  • Återanvänd en datamängd. Postnummer- och stadsparen i exemplet nedan matar tjänsteanropet och kan lika gärna mata webbläsarens assertioner.
  • Skär bort dubbletterad täckning. Valideringsregler som redan har bevisats på servicelagret behöver inte ett test av långsam webbläsare vardera.

Avvägningen är ett tyngre test: två verktyg, två uppsättningar beroenden och en längre period. Behåll kombinerade tester för de få resor som verkligen korsar gränsen, och låt resten vara rena. API eller rena webbläsarkontroller.

Selenium med SoapUI

Det enklaste och enklaste sättet att integrera Selenium med SoapUI är att använda Groovy, Vilket SoapUI stöder i stor utsträckning.

Groovy är ett objektorienterat skriptspråk som inkluderar alla Java bibliotek, så alla Java nyckelord och funktion kan användas i en Groovy skriptet direkt. Det körs på JVM (Java virtuell maskin), vilket är det som möjliggör en Groovy kliva in SoapUI och en Java Selenium test för att dela samma klasser.

Förutsättningar för användning Selenium med SoapUI

Installera följande innan du skriver någon kod:

⚠️ Versionsnotering: Groovy 5.0 är den nuvarande stabila utgåvan och kräver JDK 11 eller senare, så installera JDK först och låt Groovy versionen följer den. Selenium läggs till en Java projekt som en Maven eller Gradle beroende snarare än som en nedladdad mapp, och SoapUI jar måste sitta på samma klassväg som ditt test — det är den enda punkten där de flesta första försöken misslyckas.

Ring SoapUI Testfallslöpare i Selenium

Koden nedan anropar en SoapUI testfall. Den anger egenskaperna för en stad och motsvarande postnummer, och när den körs hämtar den värdet för varje stad och postnummer, och rapporterar sedan antalet fel för varje par som inte matchar. Denna kod körs i Selenium.

Obs: usePropertyFileFlag=true används här istället för en statisk egenskapsfil för att lagra postnummer och stad. Postnummer och stad skickas dynamiskt vid körning av metoden setProjectProperties().

Instruktioner för att köra koden:

  1. Börja SoapUI.
  2. Starta ett nytt testfall.
  3. Lägg till en ny Groovy steg.
  4. Kopiera och klistra in exempelkoden i steget.
  5. Klicka på Spela.
  6. Du kan se Firefox uppstart och navigering till GoogleEfter det kan du se SoapUI loggposter.
  7. Koden körs med hjälp av JUnit.

Code Exempelvis

@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 anteckningar: Detta kodavsnitt återges exakt som det publicerades och är ett fragment snarare än en kompilerbar klass. Innan det byggs måste du deklarera iteratorn som erhållits från set.iterator(), korrekt medan (iterator,harNästa)) till medan (iterator.hasNext()) och entry.getkey() till entry.getKey(), skriv annoteringen med stor bokstav som @När, ta bort det bortfallande tecknet i början av stegtexten och använd Sträng snarare än sträng i Set-deklarationen. Originaltexten behålls så att det publicerade exemplet förblir intakt.

Konsolvyn låter dig titta på alla testfalls körs. Du hittar en lista över postnummer och städer som hämtats och skickats till SoapUI Testfall 1.

Visa SoapUI Loggfil

Loggfiler registrerar varje åtgärd som sker i ett operativsystem eller program. För att visa SoapUI loggfilen, gå till huvudkatalogen där du hittar en fil med namnet soapui.log.

SoapUI installationskataloglista med soapui.log-filen synlig

In SoapUI, loggfilen finns i bin-mappen i installationskatalogen, till exempel C:\Program Files\SmartBear\soapUI-Pro-4.0.1\bin. På en aktuell installation skiljer sig versionsmappen, och en ReadyAPI installationen skriver till sin egen bin-mapp istället.

bin-mappen för SoapUI installationskatalogen där loggfilen lagras

När du öppnar den här loggfilen genom att klicka på den kommer den att se ut som på skärmdumpen nedan.

Innehållet i soapui.log-filen som visar de loggade testkörningsposterna

Var SoapUI och Selenium Integrationen bryts ofta

Nästan alla fel vid denna tidpunkt är ett ledningsproblem snarare än ett testproblem. Det är dessa som ska kontrolleras först.

Symptom Trolig orsak Vad man ska kontrollera
NoClassDefFoundError eller ClassNotFoundException på SoapUITestCaseRunner Ocuco-landskapet SoapUI jar finns inte på testklassvägen. Lägg till SoapUI beroende till byggfilen, eller peka klassvägen mot burken i SoapUI lib-mappen. En saknad burk dyker upp som en vanlig Selenium undantag i konsolen.
Projektfilen kan inte hittas setProjectFile() matchar en relativ sökväg mot arbetskatalogen, vilket skiljer sig mellan en IDE och ett byggverktyg. Kör från projektroten, eller skicka en absolut sökväg.
Testsvit eller testfall hittades inte Namnen i setTestSuite() och setTestCase() måste matcha projektet exakt. Kopiera namnen direkt från SoapUI projektträd; de är skiftlägeskänsliga.
Fastigheten når aldrig fram till begäran setProjectProperties() kördes efter run(), eller så refererar inte begäran till egenskapen. Ställ in varje egenskap före run() och använd egenskapens platshållarsyntax i begäran.
Webbläsaren startar inte Drivrutinen och den installerade webbläsaren är olika huvudversioner. Låt Selenium Manager löser drivrutinen eller matchar drivrutinen med webbläsarversionen.
En funktion fungerar i IDE:n men inte från löparen Steget är beroende av en Pro-funktion, till exempel en datakälla. Bekräfta licensen eller återskapa steget med motsvarigheter med öppen källkod.

När löparen avslutas utan problem och soapui.log visar de förväntade posterna, fungerar integrationen och kan vikas in i en bredare version. automatiseringstestning på.

Vanliga frågor

Öppen källkodsversionen körs Groovy steg och exponerar testfallsköraren, så själva integrationen behöver ingen licens. Pro eller ReadyAPI Funktioner som datakällor och den datadrivna guiden är de delar som kommer att misslyckas utan en.

Ja, och det är spegelbilden av den här genomgången. Groovy steget kan instansiera en WebDriver direkt, förutsatt att Selenium burkar placeras i SoapUI lib-mappen så att skriptet kan lösa dem.

SoapUI exekveras Groovy direkt i ett skriptsteg, utan kompileringscykel, och Groovy når varje Java klassen är redan på kursvägen. Vanlig Java behöver ett byggsteg, vilket är anledningen Groovy vinner för kort integrationskod.

Slå in den som en JUnit or TestNG testa och låt Maven eller Gradle anropa den, precis som exemplet gör. På agenten måste webbläsaren köras headless, och SoapUI projektfilen måste committas tillsammans med testkoden.

Assistenter är användbara för att utöka en liten uppsättning stads- och postnummerpar till bredare täckning, och för att upptäcka svarsfält som ingen påståenden berör. Genererade värden behöver fortfarande en riktig kontroll, eftersom ett rimligt postnummer inte är ett giltigt.

Det är det, inom gränserna. Copilot hanterar Groovy syntax och vanlig Java ringer bra, men har liten kunskap om SoapUI skriptobjekt som testRunner, context och log, så dessa förslag behöver granskas noggrant.

Lagra dem som miljövariabler eller i en hemlighetshanterare och läs in dem i projektegenskaper vid körning, samma mekanism som setProjectProperties() använder här. En allokerad projektfil med ett lösenord i klartext är en läcka som bara väntar på att hända.

Förvara kontroller på protokollnivå – status, schema, XPath på kuvertet – inuti SoapUI, där verktygen byggs för dem. Hävda i Selenium testa bara vad webbläsaren själv måste visa, så ett fel pekar på ett lager.

Sammanfatta detta inlägg med: