spock integration
Spock til integrationstest (som hviletjenester) og til funktionstest (med selen):
Vi udforskede Spottende, stubbing og spionage i Spock i vores tidligere tutorial.
I denne Fuld træningsvejledningsserie på Spock , indtil videre har vi dækket ved at skrive enhedstest ved hjælp af Spock-rammen. Enhedstest, typisk test en enkelt klasse med alle integrationspunkter eller eksterne opkald erstattes af mock-opkald eller stubs.
Integrationstest, derimod, test integrationspunkterne mellem 2 stykker. For eksempel, test af kontrakterne mellem 2 tjenester, test af integration mellem service og database osv.
I denne vejledning lærer vi, hvordan du bruger Spock til Integrationstest (som hviletjenester) og til funktionstest . For eksempel , Integrering af Spock med selen osv.
Her er en videotutorial:
Hvad du lærer:
Spring Spock Integration
Lad os prøve at forstå dette med et eksempel på, hvordan vi kan integrere Spock med Spring boot MVC-baserede apps.
download lyd i høj kvalitet fra youtube
Selvom Spring har et rigt sæt kommentarer og integreres godt med JUnit, tilføjer eller hjælper Spock med at tilføje en letlæselig BDD-stylet testtilgang, der gør testspecifikationer meget læselige.
Om applikationen
Vi bruger en gradlebaseret fjederstarter-applikation med en hvilebaseret controller, der implementerer et slutpunkt.
Nødvendige afhængigheder
Ud over fjederstartsafhængighederne tilføjer vi den sædvanlige groovy kompileringsafhængighed samt en Spock-kerneafhængighed. En anden Spock-baseret afhængighed er Spock-fjeder , som gør det muligt for Spock-specifikationer at bruge forårsbaserede kommentarer.
Nedenfor er listen over krævede afhængigheder:
- implementering 'org.springframework.boot: spring-boot-starter'
- testImplementation 'org.springframework.boot: spring-boot-starter-test'
- kompiler 'org.codehaus.groovy: groovy-all: 2.4.8'
- testCompile “org.spockframework: spock-core: 1.2-groovy-2.4”
- testCompile gruppe: 'org.spockframework', navn: 'spock-spring', version: '1.2-groovy-2.4'
Kom godt i gang
Lad os komme i gang med den aktuelle test.
I den første test vil vi kontrollere, om bønnen bliver oprettet til den controller-klasse, som vi har tilføjet. Til dette skal applikationen komme i gang, når testen køres.
For at opnå dette tilføjer vi @ SpringBootTest kommentar, der sikrer, at applikationens kontekst køres, før testen udføres.
Nedenfor er 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 ovenstående kode kan du se, at vi har brugt @SpringBootTest kommentar, som sikrer, at ApplicationContext startes, før testen udføres, og vi har også automatisk kablet WebController-bønnen i henhold til foråret-kommentarerne.
Testen validerer, at Webcontroller-bønnen bliver instantieret som en del af applikationens kontekst.
Lad os se en anden test, hvor vi vil ramme det eksponerede slutpunkt af webcontrolleren og validere svarkoden såvel som svarsteksten gennem Spring framework testklasser, dvs. MockMvc og MockMvcRequestBuilders.
Se testkoden nedenfor:
@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
Her er en videotutorial:
Lad os nu se et eksempel på, hvordan vi kan integrere Selen-baserede tests ved hjælp af Spock. Disse kræver ingen anden specifik afhængighed, men generelt kan du bruge de eksisterende måder til at organisere selenprøver ved hjælp af BDD mere effektivt.
I denne Eksempel, vi vil se en simpel selen-test gennem ChromeWebDriver, der forsøger at søge efter et nøgleord i google-søgning og kontrollere titlen på søgeresultatsiden.
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æg mærke til, hvordan vi har erklæret webdriverinstansen for ChromeDriver og brugt inden for specifikationen.
I et givet trin har vi også deklareret / defineret alle de webelementer, som vi har brug for til testudførelse.
Spock-rammen kan også integreres og bruges med den eksisterende automatiseringsramme, og vi kan bare erstatte Java / JUnit-baserede tests med Spock for at udnytte kraften til deklarativ programmering i Groovy.
Konklusion
I denne vejledning undersøgte vi de forskellige måder at integrere Spock-baserede tests med andre rammer og testtyper som Integrationstests og End-2-End-tests.
Vi så eksempler på Spock-integration med Spring Framework og Selen-baserede integrationstests. I lighed med disse kan Spock også bruges til at skrive tests med Rest-klienter til integrationstest af REST-baserede API'er.
Forbered dig hurtigt på et Spock Interview med din kommende tutorial, der dækker en liste over de vigtigste Spock Interview spørgsmål !!
PREV-vejledning | NÆSTE vejledning
Anbefalet læsning
- Skriveenhedstest med Spock Framework
- Spock Interview-spørgsmål med svar (mest populære)
- Spock Mocking og Stubbing (Eksempler med videotutorials)
- Datadrevet eller parametreret test med Spock Framework
- Spock Tutorial: Test med Spock og Groovy
- Integration af selen med JMeter
- Forskellene mellem enhedstest, integrationstest og funktionstest
- Funktionel testning mod ikke-funktionel testning