spock integration
Spock para teste de integração (como Rest Services) e para teste funcional (com Selenium):
Nós exploramos sobre Zombando, stubbing e espionagem em Spock em nosso tutorial anterior.
Nisso Série de tutoriais de treinamento completo sobre Spock , até agora nós cobrimos, escrevendo testes de unidade usando a estrutura de Spock. Os testes de unidade normalmente testam uma única classe com todos os pontos de integração ou chamadas externas sendo substituídas por chamadas simuladas ou stubs.
Os testes de integração, ao contrário, testam os pontos de integração entre 2 peças. Por exemplo, testar os contratos entre 2 serviços, testar a integração entre o serviço e o banco de dados, etc.
Neste tutorial, aprenderemos como usar Spock para Teste de integração (como serviços de descanso) e para teste funcional . Por exemplo , Integrando Spock com Selênio, etc.
Aqui está um tutorial em vídeo:
O que você aprenderá:
Integração Spring Spock
Vamos tentar entender isso com um exemplo de como podemos integrar Spock com aplicativos baseados em MVC de boot Spring.
junção esquerda vs junção externa esquerda
Embora o Spring tenha um conjunto rico de anotações e se integre bem ao JUnit, Spock adiciona ou ajuda a adicionar uma abordagem de teste estilo BDD fácil de ler que torna as especificações de teste altamente legíveis.
Sobre o aplicativo
Usaremos um aplicativo inicializador de inicialização com mola baseado em gradle, com um controlador baseado em descanso implementando um endpoint.
Dependências necessárias
Além das dependências do spring boot, adicionaremos a dependência de compilação groovy usual, bem como uma dependência do núcleo do Spock. Outra dependência baseada em Spock é Spock-Spring , que permite às especificações do Spock usar anotações baseadas em Spring.
A seguir está a lista de dependências necessárias:
- implementação ‘org.springframework.boot: spring-boot-starter’
- testImplementation ‘org.springframework.boot: spring-boot-starter-test’
- compilar “org.codehaus.groovy: groovy-all: 2.4.8”
- testCompile “org.spockframework: spock-core: 1.2-groovy-2.4”
- grupo testCompile: ‘org.spockframework’, nome: ‘spock-spring’, versão: ‘1.2-groovy-2.4’
Começando
Vamos começar com o teste real.
No primeiro teste, verificaremos se o bean foi criado para a classe do controlador que adicionamos. Para isso, o aplicativo deve ser iniciado quando o teste for executado.
Para conseguir isso, vamos adicionar @ SpringBootTest anotação que garante a execução do Contexto do aplicativo antes que o teste seja executado.
Abaixo está o código de teste:
@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 } }
No código acima, você pode ver que usamos @SpringBootTest anotação que garante o início do ApplicationContext, antes que o teste seja executado e também conectamos automaticamente o bean WebController de acordo com as anotações do Spring.
O teste valida se o bean Webcontroller é instanciado como parte do contexto do aplicativo.
Vamos ver outro teste, onde atingiremos o endpoint exposto pelo controlador da Web e validaremos o código de resposta, bem como o texto de resposta por meio das classes de teste da estrutura Spring, ou seja, MockMvc e MockMvcRequestBuilders.
Consulte o código de teste abaixo:
@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!' } }
Integração Spock Selenium
Aqui está um tutorial em vídeo:
Agora vamos ver um exemplo de como podemos integrar testes baseados em Selenium usando Spock. Eles não requerem nenhuma outra dependência específica, mas, em geral, você pode usar as maneiras existentes para organizar os testes de selênio usando o BDD com mais eficácia.
Nisso Exemplo, veremos um teste simples de selênio por meio do ChromeWebDriver que tenta pesquisar uma palavra-chave na pesquisa do google e verificar o título da página de resultados da pesquisa.
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') } }
Observe como declaramos a instância do webdriver para ChromeDriver e usamos dentro da especificação.
Além disso, em uma determinada etapa, declaramos / definimos todos os elementos da web que precisaríamos para a execução do teste.
A estrutura Spock também pode ser integrada e usada com a estrutura de automação existente e podemos simplesmente substituir os testes baseados em Java / JUnit por Spock para utilizar o poder da programação declarativa no Groovy.
Conclusão
Neste tutorial, exploramos as diferentes maneiras de integrar testes baseados em Spock com outras estruturas e tipos de teste, como testes de integração e testes End-2-End.
Vimos exemplos de integração do Spock com o framework Spring e testes de integração baseados no Selenium. Semelhante a estes, Spock também pode ser usado para escrever testes com clientes Rest para teste de integração de APIs baseadas em REST.
Prepare-se rapidamente para uma entrevista de Spock com seu próximo tutorial, que cobre uma lista das perguntas mais importantes da entrevista de Spock !!
PREV Tutorial | PRÓXIMO Tutorial
Leitura recomendada
- Escrevendo testes de unidade com o Spock Framework
- Perguntas da entrevista de Spock com respostas (mais populares)
- Spock Mocking e Stubbing (exemplos com tutoriais em vídeo)
- Teste baseado em dados ou parametrizado com Spock Framework
- Tutorial do Spock: Testando com Spock e Groovy
- Integração de Selenium com JMeter
- As diferenças entre teste de unidade, teste de integração e teste funcional
- Teste Funcional Vs Teste Não Funcional