spock integration
Spock för integrationstestning (som Rest Services) och för funktionstestning (med selen):
Vi utforskade Hån, stubbing och spionering i Spock i vår tidigare handledning.
I denna Fullständig utbildningsserie på Spock , hittills täckte vi och skrev enhetstester med Spock-ramverket. Enhetstester, testar vanligtvis en enskild klass med alla integrationspunkter eller externa samtal ersätts av mock-samtal eller stubbar.
Integrationstest, däremot, testa integrationspunkterna mellan två delar. Till exempel, testa kontrakten mellan två tjänster, testa integrationen mellan tjänst och databas etc.
I den här handledningen lär vi oss hur man använder Spock för Integrationstestning (som vilotjänster) och för funktionstestning . Till exempel , Integrera Spock med Selen, etc.
Här är en videohandledning:
Vad du kommer att lära dig:
Spring Spock Integration
Låt oss försöka förstå detta med ett exempel på hur vi kan integrera Spock med Spring boot MVC-baserade appar.
oracle pl sql intervju frågor och svar
Även om Spring har en rik uppsättning kommentarer och integreras bra med JUnit, lägger Spock till eller hjälper till att lägga till en lättläst BDD-utformad testmetod som gör testspecifikationer mycket läsbara.
Om ansökan
Vi kommer att använda en stegbaserad startstartapplikation för våren, med en vilobaserad kontroller som implementerar en slutpunkt.
Obligationer som krävs
Förutom fjäderstartberoenden kommer vi att lägga till det vanliga groovy kompileringsberoendet samt ett Spock-kärnberoende. Ett annat Spock-baserat beroende är Spock-vår , vilket gör det möjligt för Spock-specifikationer att använda vårbaserade anteckningar.
Nedan listas listan över nödvändiga beroenden:
- implementering 'org.springframework.boot: spring-boot-starter'
- testImplementation 'org.springframework.boot: spring-boot-starter-test'
- kompilera “org.codehaus.groovy: groovy-all: 2.4.8”
- testCompile “org.spockframework: spock-core: 1.2-groovy-2.4”
- testCompile-grupp: 'org.spockframework', namn: 'spock-spring', version: '1.2-groovy-2.4'
Komma igång
Låt oss komma igång med testet.
I det första testet kommer vi att kontrollera om bönan skapas för den kontrollerklass som vi har lagt till. För detta bör applikationen komma igång när testet körs.
För att uppnå detta kommer vi att lägga till @ SpringBootTest anteckning som säkerställer att applikationskontext körs innan testet körs.
Nedan är testkoden:
@SpringBootTest class SampleSpringSpec extends Specification { @Autowired private WebController webController def 'when context is loaded then controller bean is created'() { expect: 'the WebController is created' webController != null } }
I ovanstående kod kan du se att vi har använt @SpringBootTest kommentar som säkerställer att ApplicationContext startas innan testet körs och vi har också automatiskt kopplat WebController-bönan enligt våranteckningarna.
Testet validerar att webbkontrollerbönan blir instantierad som en del av applikationens sammanhang.
Låt oss se ett annat test, där vi kommer att träffa den exponerade slutpunkten av webbkontrollen och validera svarkoden såväl som svartexten genom Spring-ramverkstestklasserna, dvs. MockMvc och MockMvcRequestBuilders.
Se testkoden nedan:
@AutoConfigureMockMvc(secure=false) @WebMvcTest() class SampleMvcSpec extends Specification{ @Autowired private MockMvc mvc def 'assert response and status code for /greeting'() { expect: 'status code as 200 and response string as Hello world!' mvc.perform(MockMvcRequestBuilders.get('/hello')) .andExpect(MockMvcResultMatchers.status().isOk()) .andReturn().response.contentAsString == 'Hello world!' } }
Spock Selen Integration
Här är en videohandledning:
Låt oss nu se ett exempel på hur vi kan integrera Selen-baserade tester med Spock. Dessa kräver inget annat specifikt beroende, men i allmänhet kan du använda de befintliga sätten att organisera selenprov med BDD mer effektivt.
I denna Exempel, vi kommer att se ett enkelt selen test genom ChromeWebDriver som försöker söka efter ett nyckelord på google-sökning och verifiera titeln på sökresultatsidan.
class SeleniumSpec extends Specification { private static def WebDriver driver = new ChromeDriver() def 'cleanupSpec'() { if(driver != null) { driver.close() } } def 'selenium integration with spock'() { given: driver.navigate().to('https://www.google.co.in') WebElement searchBox = driver.findElement(By.cssSelector('input[name=q]')); WebElement submitSearchButton = driver.findElement(By.cssSelector('input[name=btnK]')); when: searchBox.sendKeys('India') Thread.sleep(5000) submitSearchButton.click() def title = driver.getTitle() then: title.toLowerCase()contains('india') } }
Lägg märke till hur vi har deklarerat webbdrivarinstansen för ChromeDriver och använt inom specifikationen.
I ett givet steg har vi också deklarerat / definierat alla webbelement som vi skulle behöva för testkörning.
Spock-ramverket kan också integreras och användas med det befintliga Automationsramverket och vi kan bara ersätta Java / JUnit-baserade tester med Spock för att utnyttja kraften i deklarativ programmering i Groovy.
Slutsats
I denna handledning undersökte vi de olika sätten att integrera Spock-baserade tester med andra ramar och testtyper som Integrationstest och End-2-End-tester.
Vi såg exempel på Spock-integration med Spring Framework och Selen-baserade integrationstester. I likhet med dessa kan Spock också användas för att skriva tester med Rest-klienter för integrationstestning av REST-baserade API: er.
Förbered dig snabbt för en Spock-intervju med din kommande handledning, som täcker en lista med de viktigaste Spock-intervjufrågorna !!
PREV-handledning | NÄSTA självstudie
Rekommenderad läsning
- Skrivenhetstester med Spock Framework
- Spock intervjufrågor med svar (mest populära)
- Spock Mocking and Stubbing (Exempel med videotutorials)
- Datadriven eller parametrerad testning med Spock Framework
- Spock Tutorial: Testing With Spock And Groovy
- Integration av selen med JMeter
- Skillnaderna mellan enhetstestning, integrationstestning och funktionstestning
- Funktionell testning mot icke-funktionell testning