Palestra sobre Automação de Testes com Rest-Assured

1.206 visualizações

Publicada em

Palestra ministrada na trilha de Testes do TDC2015 SP

Publicada em: Tecnologia
2 comentários
6 gostaram
Estatísticas
Notas
  • Esse teu exemplo esses valores fixos no código não recomendo fazer assim, outra não acha melhor separar esse código em classes, acho que ficaria melhor! Ótima apresentação gostei da API, a mesma tem para python???
       Responder 
    Tem certeza que deseja  Sim  Não
    Insira sua mensagem aqui
  • Muito boa palestra Julio! Obrigada!
       Responder 
    Tem certeza que deseja  Sim  Não
    Insira sua mensagem aqui
Sem downloads
Visualizações
Visualizações totais
1.206
No SlideShare
0
A partir de incorporações
0
Número de incorporações
15
Ações
Compartilhamentos
0
Downloads
38
Comentários
2
Gostaram
6
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Palestra sobre Automação de Testes com Rest-Assured

  1. 1. contato@qualister.com.br (48) 3285-5615 twitter.com/qualister facebook.com/qualister linkedin.com/company/qualister Testes em APIs REST com Rest-Assured São Paulo | 22/07/2015
  2. 2. Palestrante Júlio de Lima Especialista em teste de software com ênfase em automação de testes de software, possui formação em Tecnologia da Informação e certificações internacionais (CTFL e CTAL-TM pelo ISTQB) e nacional (CBTS pela ALATS) julio.lima@qualister.com.br twitter.com/juliodelimas br.linkedin.com/in/juliodelimas goldtips.by/juliodelimas
  3. 3. Sobre a Qualister • Fundada em 2007 • Mais de 1.000 clientes em todo o Brasil • Mais de 50 cursos sobre teste de software • Mais de 3.000 alunos formados • Áreas de atuação: • Consultoria na área de teste qualidade de software • Cursos • Revenda de ferramentas
  4. 4. O que é REST?
  5. 5. O que é REST? • É um estilo de arquitetura utilizado para criação de APIs; • Trabalha, geralmente, sobre o protocolo HTTP/HTTPS usando métodos POST, GET, PUT, DELETE, OPTIONS, PATCH e HEAD; • Utiliza respostas no formato JSON ou XML.
 [@fonte=http://rest.elkstein.org]
  6. 6. Como testar manualmente?
  7. 7. Como testar manualmente? Utilizando cURL, um recurso disponível em sistemas operacionais Unix através de linha de comando, podemos fazer uma requisição através do comando: curl -i -X GET “http://localhost: 8888/qualister-api/?nome=Julio" --user qualister:qualister [@fonte=http://curl.haxx.se/docs/httpscripting.html]
  8. 8. Como testar manualmente? Então receberemos a seguinte resposta: HTTP/1.1 200 OK Date: Sun, 10 May 2015 02:03:04 GMT Server: Apache/2.2.29 (Unix) mod_fastcgi/2.4.6 mod_wsgi/3.4 Python/2.7.8 PHP/5.6.2 mod_ssl/2.2.29 OpenSSL/0.9.8zd DAV/2 mod_perl/2.0.8 Perl/ v5.20.0 X-Powered-By: PHP/5.6.2 Content-Length: 280 Content-Type: application/json { "status":"success", "message":”Julio, seja bem-vindo a API da Qualister", "data": { "atuacao":["Treinamentos","Consultoria","Revenda de ferramentas"], "consultores": { "quantidade":5, "nomes":["Cristiano Caetano","Elias Nogueira","Julio de Lima","Marcio Cunha","Roberto Ungarelli"] } } }
  9. 9. Validando respostas
  10. 10. Validando resposta: Esquema HTTP/1.1 200 OK Date: Sun, 10 May 2015 02:03:04 GMT Server: Apache/2.2.29 (Unix) mod_fastcgi/2.4.6 mod_wsgi/3.4 Python/2.7.8 PHP/5.6.2 mod_ssl/2.2.29 OpenSSL/0.9.8zd DAV/2 mod_perl/2.0.8 Perl/ v5.20.0 X-Powered-By: PHP/5.6.2 Content-Length: 280 Content-Type: application/json { "status":"success", "message":”Julio, seja bem-vindo a API da Qualister", "data": { "atuacao":["Treinamentos","Consultoria","Revenda de ferramentas"], "consultores": { "quantidade":5, "nomes":["Cristiano Caetano","Elias Nogueira","Julio de Lima","Marcio Cunha","Roberto Ungarelli"] } } } A resposta terá a propriedade “status" e o valor será do tipo string Essa propriedade deverá ser um Array! A resposta terá a propriedade “dados.atuacao” e não deverá ter itens duplicados
  11. 11. Validando resposta: Corpo HTTP/1.1 200 OK Date: Sun, 10 May 2015 02:03:04 GMT Server: Apache/2.2.29 (Unix) mod_fastcgi/2.4.6 mod_wsgi/3.4 Python/2.7.8 PHP/5.6.2 mod_ssl/2.2.29 OpenSSL/0.9.8zd DAV/2 mod_perl/2.0.8 Perl/ v5.20.0 X-Powered-By: PHP/5.6.2 Content-Length: 280 Content-Type: application/json { "status":"success", "message":”Julio, seja bem-vindo a API da Qualister", "data": { "atuacao":["Treinamentos","Consultoria","Revenda de ferramentas"], "consultores": { "quantidade":5, "nomes":["Cristiano Caetano","Elias Nogueira","Julio de Lima","Marcio Cunha","Roberto Ungarelli"] } } } “status" deverá ser igual a "success" “dados.consultores.quantidade” deverá ser igual a 5 “dados.atuacao” deverá ter um item "Consultoria"
  12. 12. Validando resposta: Cabeçalho HTTP/1.1 200 OK Date: Sun, 10 May 2015 02:03:04 GMT Server: Apache/2.2.29 (Unix) mod_fastcgi/2.4.6 mod_wsgi/3.4 Python/2.7.8 PHP/5.6.2 mod_ssl/2.2.29 OpenSSL/0.9.8zd DAV/2 mod_perl/2.0.8 Perl/ v5.20.0 X-Powered-By: PHP/5.6.2 Content-Length: 280 Content-Type: application/json { "status":"success", "message":”Julio, seja bem-vindo a API da Qualister", "data": { "atuacao":["Treinamentos","Consultoria","Revenda de ferramentas"], "consultores": { "quantidade":5, "nomes":["Cristiano Caetano","Elias Nogueira","Julio de Lima","Marcio Cunha","Roberto Ungarelli"] } } } “Status Code" deverá ser igual a 200
  13. 13. Rest-Assured • É uma biblioteca escrita em Java criada para simplificar testes de serviços baseados em REST; • Ele é compatível com os principais métodos, podendo simular requisições: POST, GET, PUT, DELETE, OPTIONS, PATCH e HEAD; • Possui mecanismos para validação do esquema, corpo e cabeçalho das requisições; • Utiliza a sintaxe de especificação por exemplos, o Given- When-Then, muito conhecida em testes dirigidos por comportamento (BDD). [@fonte=https://code.google.com/p/rest-assured/wiki/Usage]
  14. 14. Rest-Assured Exemplo de teste: given() .param(“nome", "Julio") .when() .get(“/") .then() .assertThat() .statusCode(200) .body(“mensagem", containsString("Julio")); Enviar o valor “Julio" pelo parâmetro "nome" Requisitar o path “/“ usando metodo GET Validar que o Status Code é 200 (Sucesso) Validar que a propriedade “mensagem" contem a string "Julio"
  15. 15. Componentes auxiliares
  16. 16. Componentes auxiliares • Utilizaremos o Maven para tornar mais simples a estruturação do projeto, dependências e execução dos testes. O diretório bin do Maven deve ser setado nas variáveis globais do sistema operacional.
 
 [@fonte=https://maven.apache.org] • O JUnit é um framework open-source utilizado para facilitar a criação dos testes automatizados. 
 
 [@fonte=http://junit.org]
  17. 17. Hands-on!
  18. 18. Hands-on 1. Criar um novo projeto Maven no Eclipse 2. Criar adicionar as dependências ao pom.xml
 
 
 
 
 
 
 
 
 
 
 
 3. Criar o package br.com.qualister.Testes em src/test/java <dependencies> <dependency> <groupId>com.jayway.restassured</groupId> <artifactId>rest-assured</artifactId> <version>2.4.1</version> <scope>test</scope> </dependency> <dependency> <groupId>com.jayway.restassured</groupId> <artifactId>json-schema-validator</artifactId> <version>2.4.1</version> <scope>test</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> </dependencies>
  19. 19. Hands-on 4. Criar uma classe de teste do JUnit e nomea-la como "QualisterAPITests" 5. Adicionar a ela as importações para utilização do RestAssured:
 
 
 6. Configurar a conexão com a API Rest dentro do construtor da classe de testes
 
 
 
 
 
 
 import static com.jayway.restassured.RestAssured.*; import static org.hamcrest.Matchers.*; import static com.jayway.restassured.module.jsv.JsonSchemaValidator.*; public QualisterAPITests() { baseURI = "http://localhost/qualister-api/"; port = 8888; authentication = basic("qualister", "qualister"); }
  20. 20. Hands-on 7. Escrever um teste chamado testMostrarDadosQualister, que basicamente apresenta a resposta à requisição GET ao path “/“:
 
 
 
 
 
 
 8. Ao executar o teste, teremos o status passed no JUnit e no console será apresentada a resposta, similar à que vimos anteriormente.
 
 
 @Test public void testMostrarDadosQualister() { given() .param("nome", "Julio") .when() .get("/") .then() .log() .body(); }
  21. 21. Hands-on 9. Capture o valor da propriedade “status" e valide se é igual a "success":
 
 
 
 
 
 
 
 
 
 
 String status = given() .param("nome", "Julio") .when() .get("/") .then() .log() .body() .extract() .body() .path("status"); Assert.assertEquals("success", status);
  22. 22. Hands-on 10.Neste caso, poderíamos usar asserções do próprio RestAssured usando matchers do Hamcrest:
 
 
 
 
 
 
 
 11.Uma asserção quem é muito poderosa também é a que valida o esquema da resposta obtida. Veja como usar:
 
 .body(matchesJsonSchemaInClasspath("meu-esquema.json"))
 
 
 given() .param("nome", "Julio") .when() .get("/") .then() .log() .body() .assertThat() .body("status", equalTo("success")) .body("message", containsString("Julio")) .statusCode(200);
  23. 23. Hands-on { "$schema": "http://json-schema.org/draft-04/schema#", "title": "Dados da Qualister", "type": "object", "properties": { "data": { "type": "object", "properties": { "atuacao": { "type": "array" }, "consultores": { "type": "object", "properties": { "quantidade": { "type": "integer", "minimum": 0 }, "nomes": { "type": "array", "uniqueItems": true } } } } } }, "required": ["status", "message", "data"] }
  24. 24. Hands-on 12.Para executar os testes via linha de comando, acesse o diretório onde está o arquivo pom.xml do projeto e execute o comando abaixo: mvn test -Dtest=QualisterAPITests
  25. 25. Links interessantes Categorizando testes em Unit Elias Nogueira / @eliasnogueira http://bit.ly/1Jxnb8w Rest-Assured escrevendo em Groovy (GitHub) Maurício Silva / @silvamauriciob http://bit.ly/1G3yhzC Status Codes HTTP Frederico Moreira / @fredaomoreira http://bit.ly/1GC2vKw
  26. 26. contato@qualister.com.br (48) 3285-5615 twitter.com/qualister facebook.com/qualister linkedin.com/company/qualister

×