spock integration
Спок для інтеграційного тестування (наприклад, послуги відпочинку) та для функціонального тестування (із селеном):
Ми досліджували про Знущання, заколювання і шпигунство в Спок у нашому попередньому уроці.
У цьому Повна навчальна серія підручників на Spock , до цього часу ми висвітлювали написання модульних тестів із використанням фреймворка Spock. Модульні тести, як правило, тестують один клас з усіма точками інтеграції, або зовнішні виклики замінюються на фіктивні дзвінки або заглушки.
Навпаки, інтеграційні тести перевіряють точки інтеграції між 2 частинами. Наприклад, тестування контрактів між 2 сервісами, тестування інтеграції між сервісом та базою даних тощо.
У цьому уроці ми дізнаємося, як використовувати Spock для Інтеграційне тестування (як послуги відпочинку) та для функціональне тестування . Наприклад , Інтеграція Spock із селеном тощо.
Ось відеоурок:
Що ви дізнаєтесь:
Spring Spock Integration
Спробуємо зрозуміти це на прикладі того, як ми можемо інтегрувати Spock із програмами на основі Spring boot MVC.
найкращий мобільний шпигунський додаток для android
Хоча Spring має багатий набір анотацій та добре інтегрується з JUnit, Spock додає або допомагає додати легкий для читання підхід до тестування у стилі BDD, що робить специфікації тесту високочитабельними.
Про програму
Ми використовуватимемо програму весняного завантажувача на основі gradle з контролером на основі відпочинку, що реалізує кінцеву точку.
Необхідні залежності
На додаток до залежностей весняного завантаження, ми додамо звичайну залежність грувої компіляції, а також залежність ядра Spock. Ще одна залежність на основі Спока - Спок-весна , що дозволяє специфікаціям 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, тобто 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 Selenium
Ось відеоурок:
Тепер давайте подивимось приклад того, як ми можемо інтегрувати тести на основі селену за допомогою 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 та тестів інтеграції на основі селену. Подібно до цього, Spock також можна використовувати для написання тестів із клієнтами Rest для інтеграційного тестування API на основі REST.
Швидко підготуйтеся до інтерв’ю у Spock із вашим майбутнім підручником, який охоплює список найважливіших питань для інтерв’ю у Spock !!
НАЗАД Підручник | НАСТУПНИЙ підручник
Рекомендована література
- Написання одиничних тестів із Spock Framework
- Запитання для інтерв’ю у Spock (найпопулярніші)
- Спок знущання та придушення (приклади з відеоуроками)
- Тестування на основі даних або параметризоване за допомогою Spock Framework
- Підручник із Spock: Тестування за допомогою Spock and Groovy
- Інтеграція селену з JMeter
- Різниця між модульним тестуванням, інтеграційним тестуванням та функціональним тестуванням
- Функціональне тестування проти нефункціонального тестування