spock integration
Spock за интеграционно тестване (като услуги за почивка) и за функционално тестване (със селен):
Проучихме за Подигравки, стърчане и шпиониране в Spock в предишния ни урок.
В това Пълна серия учебни уроци по Spock , досега покривахме, пишейки модулни тестове, използвайки рамката на Spock. Единични тестове, обикновено тестват един клас с всички точки на интеграция или външните повиквания се заменят с фалшиви повиквания или заглушки.
Интеграционните тестове, за разлика от тях, тестват точките за интегриране между 2 парчета. Например, тестване на договорите между 2 услуги, тестване на интеграция между услуга и база данни и др.
В този урок ще научим как да използваме Spock за Интеграционно тестване (като услуги за почивка) и за функционално тестване . Например , Интегриране на Spock със селен и др.
Ето видео урок:
Какво ще научите:
Пролетна Spock интеграция
Нека се опитаме да разберем това с пример, как можем да интегрираме Spock с приложения, базирани на Spring boot MVC.
как да инсталирате subversion в eclipse -
Въпреки че Spring има богат набор от анотации и се интегрира добре с JUnit, Spock добавя или помага да се добави лесен за четене BDD стил на тестване, което по този начин прави спецификациите на теста много четими.
Относно приложението
Ще използваме базирано на gradle приложение за пролетно стартиране, с контролер, базиран на почивка, реализиращ крайна точка.
Необходими зависимости
В допълнение към пролетните зависимости за зареждане, ние ще добавим обичайната зависимост от компилиране, както и зависимост от ядрото на Spock. Друга зависимост, базирана на Spock, е Spock-spring , което позволява на спецификациите на Spock да използват анотации, базирани на Spring.
По-долу е включен списъкът на необходимите зависимости:
- изпълнение ‘org.springframework.boot: spring-boot-starter’
- testImplementation ‘org.springframework.boot: spring-boot-starter-test’
- компилирайте “org.codehaus.groovy: groovy-all: 2.4.8”
- testCompile “org.spockframework: spock-core: 1.2-groovy-2.4”
- testCompile group: ‘org.spockframework’, name: ‘spock-spring’, версия: ‘1.2-groovy-2.4’
Приготвяме се да започнем
Нека започнем с действителния тест.
В първия тест ще проверим дали бобът се създава за класа на контролера, който сме добавили. За това приложението трябва да започне, когато тестът се изпълни.
За да постигнем това, ще добавим @ SpringBootTest анотация, която осигурява стартиране на контекста на приложението преди изпълнението на теста.
По-долу е тестовият код:
@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 } }
В горния код можете да видите, че сме използвали @SpringBootTest анотация, която гарантира стартиране на ApplicationContext, преди тестът да бъде изпълнен, а също така сме свързали автоматично компонента на WebController според анотациите Spring.
Тестът потвърждава, че компонентът на Webcontroller се създава като част от контекста на приложението.
Нека да видим друг тест, където ще ударим изложената крайна точка от уеб контролера и ще проверим кода на отговора, както и текста на отговора чрез тестовите класове Spring Spring, т.е. MockMvc и MockMvcRequestBuilders.
Моля, обърнете се към тестовия код по-долу:
@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 селен интеграция
Ето видео урок:
Сега нека видим пример за това как можем да интегрираме базирани на селен тестове, използвайки Spock. Те не изискват друга специфична зависимост, но като цяло можете да използвате съществуващите начини за по-ефективно организиране на тестове за селен, като използвате BDD.
В това Пример, ще видим прост тест за селен чрез ChromeWebDriver, който се опитва да търси ключова дума при търсене в Google и да провери заглавието на страницата с резултати от търсенето.
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') } }
Забележете как декларирахме екземпляра на webdriver за ChromeDriver и използвахме в спецификацията.
Също така в дадена стъпка декларирахме / дефинирахме всички уеб елементи, които бихме изисквали за изпълнение на теста.
Рамката Spock също може да бъде интегрирана и използвана със съществуващата рамка за автоматизация и можем просто да заменим тестовете, базирани на Java / JUnit, със Spock, за да използваме силата на декларативното програмиране в Groovy.
Заключение
В този урок разгледахме различните начини за интегриране на базирани на Spock тестове с други рамки и типове тестове като тестове за интеграция и тестове End-2-End.
Видяхме примери за Spock интеграция с Spring framework и тестове за интеграция, базирани на Selenium. Подобно на тези, Spock може да се използва и за писане на тестове с клиенти за почивка за интеграционно тестване на REST-базирани API.
Бързо се подгответе за Spock Interview с предстоящия урок, който обхваща списък с най-важните Spock Interview Въпроси !!
Препоръчително четене
- Писане на единични тестове със Spock Framework
- Спок интервю въпроси с отговори (Най-популярни)
- Спок подигравки и сбиване (Примери с видео уроци)
- Управлявано от данни или параметризирано тестване със Spock Framework
- Урок за Spock: Тестване със Spock и Groovy
- Интеграция на селен с JMeter
- Разликите между модулното тестване, интегрираното тестване и функционалното тестване
- Функционално тестване срещу нефункционално тестване