contato@qualister.com.br
(48) 3285-5615
twitter.com/qualister
facebook.com/qualister
linkedin.com/company/qualister
Testes em APIs
REST com
Rest-Assured
Slides disponíveis em:
http://bit.ly/1Hg4pUD
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
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
O que é REST?
O que é REST?
• É um estilo de arquitetura utilizado para
criação de APIs;
• Trabalha, geralmente, sobre o protocolo
HTTP/HTTPS usando verbos POST, GET, PUT,
DELETE, OPTIONS, PATCH e HEAD;
• Utiliza respostas no formato JSON ou XML.

[@fonte=http://rest.elkstein.org]
Como testar manualmente?
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]
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",
“mensagem”:”Julio, seja bem-vindo a API da Qualister",
“dados”:
{
"atuacao":["Treinamentos","Consultoria","Revenda de ferramentas"],
"consultores":
{
"quantidade":5,
"nomes":["Cristiano Caetano","Elias Nogueira","Julio de
Lima","Marcio Cunha","Roberto Ungarelli"]
}
}
}
Validando respostas
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",
"mensagem”:”Seja bem-vindo a API da Qualister",
“dados”:
{
"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
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",
"mensagem”:”Seja bem-vindo a API da Qualister",
“dados”:
{
"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"
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",
"mensagem”:”Seja bem-vindo a API da Qualister",
“dados”:
{
"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
Rest-Assured
• É uma biblioteca escrita em Java criada para simplificar
testes de serviços baseados em REST;
• Ele é compatível com os principais verbos, 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]
Rest-Assured
Exemplo de teste:
given()
.param(“nome", "Julio")
.when()
.get(“/")
.then()
.statusCode(200).
.body(“mensagem", containsString("Julio"));
Enviar o valor “Julio" pelo parâmetro
"nome"
Requisitar o path “/“ usando verbo GET
Validar que o Status Code
é 200 (Sucesso)
Validar que a propriedade
“mensagem" contem a string
"Julio"
Componentes auxiliares
Componentes auxiliares
• Utilizaremos o Maven para tornar mais simples a
estruturação do projeto, dependências e execução dos
testes.



[@fonte=https://maven.apache.org]
• O JUnit é um framework open-source utilizado para
facilitar a criação dos testes automatizados. 



[@fonte=http://junit.org]
Hands-on!
Vídeo disponível em:
http://bit.ly/1QMZ3od
Workshop
Rest-Assured
Inscreva-se em
http://bit.ly/1EIMuSr
contato@qualister.com.br
(48) 3285-5615
twitter.com/qualister
facebook.com/qualister
linkedin.com/company/qualister

Palestra sobre automação de testes em APIs Rest com Rest-Assured

  • 1.
  • 2.
    Palestrante Júlio de Lima Especialistaem 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
  • 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.
    O que éREST?
  • 5.
    O que éREST? • É um estilo de arquitetura utilizado para criação de APIs; • Trabalha, geralmente, sobre o protocolo HTTP/HTTPS usando verbos POST, GET, PUT, DELETE, OPTIONS, PATCH e HEAD; • Utiliza respostas no formato JSON ou XML.
 [@fonte=http://rest.elkstein.org]
  • 6.
  • 7.
    Como testar manualmente? UtilizandocURL, 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.
    Como testar manualmente? Entãoreceberemos 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", “mensagem”:”Julio, seja bem-vindo a API da Qualister", “dados”: { "atuacao":["Treinamentos","Consultoria","Revenda de ferramentas"], "consultores": { "quantidade":5, "nomes":["Cristiano Caetano","Elias Nogueira","Julio de Lima","Marcio Cunha","Roberto Ungarelli"] } } }
  • 9.
  • 10.
    Validando resposta: Esquema HTTP/1.1200 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", "mensagem”:”Seja bem-vindo a API da Qualister", “dados”: { "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.
    Validando resposta: Corpo HTTP/1.1200 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", "mensagem”:”Seja bem-vindo a API da Qualister", “dados”: { "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.
    Validando resposta: Cabeçalho HTTP/1.1200 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", "mensagem”:”Seja bem-vindo a API da Qualister", “dados”: { "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
  • 14.
    Rest-Assured • É umabiblioteca escrita em Java criada para simplificar testes de serviços baseados em REST; • Ele é compatível com os principais verbos, 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]
  • 15.
    Rest-Assured Exemplo de teste: given() .param(“nome","Julio") .when() .get(“/") .then() .statusCode(200). .body(“mensagem", containsString("Julio")); Enviar o valor “Julio" pelo parâmetro "nome" Requisitar o path “/“ usando verbo GET Validar que o Status Code é 200 (Sucesso) Validar que a propriedade “mensagem" contem a string "Julio"
  • 16.
  • 17.
    Componentes auxiliares • Utilizaremoso Maven para tornar mais simples a estruturação do projeto, dependências e execução dos testes.
 
 [@fonte=https://maven.apache.org] • O JUnit é um framework open-source utilizado para facilitar a criação dos testes automatizados. 
 
 [@fonte=http://junit.org]
  • 18.
  • 19.
  • 20.