spock integration
Spock für Integrationstests (wie Rest Services) und für Funktionstests (mit Selen):
Wir haben ungefähr erkundet Verspotten, Stubben und Spionieren in Spock in unserem vorherigen Tutorial.
In diesem Vollständige Trainings-Tutorial-Serie zu Spock , Bisher haben wir Unit-Tests mit dem Spock-Framework geschrieben. Unit-Tests, in der Regel eine einzelne Klasse mit allen Integrationspunkten testen oder externe Aufrufe werden durch Scheinaufrufe oder Stubs ersetzt.
Im Gegensatz dazu testen Integrationstests die Integrationspunkte zwischen zwei Teilen. Zum Beispiel, Testen der Verträge zwischen zwei Diensten, Testen der Integration zwischen Dienst und Datenbank usw.
In diesem Tutorial lernen wir, wie man Spock für verwendet Integrationstests (wie Restleistungen) und für Funktionsprüfung . Zum Beispiel , Integration von Spock mit Selen usw.
Hier ist ein Video-Tutorial:
Was du lernen wirst:
Spring Spock Integration
Versuchen wir dies anhand eines Beispiels zu verstehen, wie wir Spock in Spring Boot MVC-basierte Apps integrieren können.
Testzusammenfassungsbericht Vorlage in Excel
Obwohl Spring über eine Vielzahl von Anmerkungen verfügt und sich gut in JUnit integrieren lässt, fügt Spock einen einfach zu lesenden Testansatz im BDD-Stil hinzu oder hilft dabei, die Testspezifikationen gut lesbar zu machen.
Über die Anwendung
Wir werden eine Gradle-basierte Spring-Boot-Starter-Anwendung verwenden, wobei ein Rest-basierter Controller einen Endpunkt implementiert.
Erforderliche Abhängigkeiten
Zusätzlich zu den Spring-Boot-Abhängigkeiten werden wir die übliche Groovy-Compile-Abhängigkeit sowie eine Spock-Core-Abhängigkeit hinzufügen. Eine weitere Spock-basierte Abhängigkeit ist Spock-Feder Dadurch können Spock-Spezifikationen federbasierte Anmerkungen verwenden.
Nachfolgend finden Sie eine Liste der erforderlichen Abhängigkeiten:
- Implementierung 'org.springframework.boot: spring-boot-Starter'
- testImplementation ‘org.springframework.boot: Spring-Boot-Starter-Test’
- kompiliere “org.codehaus.groovy: groovy-all: 2.4.8”
- testCompile “org.spockframework: spock-core: 1.2-groovy-2.4”
- testCompile-Gruppe: 'org.spockframework', Name: 'spock-spring', Version: '1.2-groovy-2.4'
Einstieg
Beginnen wir mit dem eigentlichen Test.
Im ersten Test prüfen wir, ob die Bean für die von uns hinzugefügte Controller-Klasse erstellt wird. Zu diesem Zweck sollte die Anwendung gestartet werden, wenn der Test ausgeführt wird.
Um dies zu erreichen, werden wir @ hinzufügen SpringBootTest Anmerkung, die sicherstellt, dass der Anwendungskontext ausgeführt wird, bevor der Test ausgeführt wird.
Unten ist der Testcode:
@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 } }
Im obigen Code können Sie sehen, dass wir verwendet haben @SpringBootTest Annotation, die sicherstellt, dass der ApplicationContext gestartet wird, bevor der Test ausgeführt wird, und wir haben auch die WebController-Bean gemäß den Spring-Annotationen automatisch verkabelt.
Der Test überprüft, ob die Webcontroller-Bean als Teil des Anwendungskontexts instanziiert wird.
Sehen wir uns einen weiteren Test an, bei dem der Webcontroller den exponierten Endpunkt erreicht und den Antwortcode sowie den Antworttext anhand der Spring Framework-Testklassen, d. H. MockMvc und MockMvcRequestBuilders, überprüft.
Bitte beachten Sie den folgenden Testcode:
@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
Hier ist ein Video-Tutorial:
Lassen Sie uns nun ein Beispiel sehen, wie wir Selen-basierte Tests mit Spock integrieren können. Diese erfordern keine andere spezifische Abhängigkeit, aber im Allgemeinen können Sie die vorhandenen Methoden verwenden, um Selentests mit BDD effektiver zu organisieren.
In diesem Beispiel, Wir werden einen einfachen Selentest über ChromeWebDriver sehen, der versucht, in der Google-Suche nach einem Schlüsselwort zu suchen und den Titel der Suchergebnisseite zu überprüfen.
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') } }
Beachten Sie, wie wir die Webdriver-Instanz für ChromeDriver deklariert und innerhalb der Spezifikation verwendet haben.
Außerdem haben wir in einem bestimmten Schritt alle Webelemente deklariert / definiert, die wir für die Testausführung benötigen würden.
Das Spock-Framework kann auch in das vorhandene Automation-Framework integriert und verwendet werden. Wir können Java / JUnit-basierte Tests einfach durch Spock ersetzen, um die Möglichkeiten der deklarativen Programmierung in Groovy zu nutzen.
Fazit
In diesem Tutorial haben wir die verschiedenen Möglichkeiten zur Integration von Spock-basierten Tests in andere Frameworks und Testtypen wie Integrationstests und End-2-End-Tests untersucht.
Wir haben Beispiele für die Spock-Integration mit Spring Framework und Selen-basierte Integrationstests gesehen. Ähnlich wie diese kann Spock auch zum Schreiben von Tests mit Rest-Clients zum Integrationstest von REST-basierten APIs verwendet werden.
Bereiten Sie sich mit Ihrem nächsten Tutorial, das eine Liste der wichtigsten Fragen zum Spock-Interview enthält, schnell auf ein Spock-Interview vor!
PREV Tutorial | NÄCHSTES Tutorial
Literatur-Empfehlungen
- Unit-Tests mit Spock Framework schreiben
- Spock Interview Fragen mit Antworten (am beliebtesten)
- Spock Mocking and Stubbing (Beispiele mit Video-Tutorials)
- Datengesteuertes oder parametrisiertes Testen mit Spock Framework
- Spock Tutorial: Testen mit Spock und Groovy
- Integration von Selen mit JMeter
- Die Unterschiede zwischen Unit Testing, Integration Testing und Functional Testing
- Funktionstests gegen nichtfunktionale Tests