SlideShare uma empresa Scribd logo
Globalcode – Open4education
Ruby in Tests
Júlio de Lima
Especialista em Testes na RSI
@juliodelimas
Globalcode – Open4education
Objetivo
Ao fim da palestra, você saiba como preparar o
ambiente e escrever scripts de teste automatizados de
unidade, API e GUI (Web) usando frameworks open-
source em Ruby.
Globalcode – Open4education
"RubyInTests"
O nome da palestra baseia-se em uma série de artigos
de minha autoria originados de um
#desafioAgileTesters feito pelo amigo Diego Blond
(@PerdidoNoTeste).
Conheçam mais sobre o desafio e a comunidade Agile
Testers:
bit.ly/desafioAgileTesters2016
Globalcode – Open4education
O conceito
Unidade API GUI
Métodos de uma classe
que serão testados de
forma isolada
Métodos que utilizam
as unidades de forma
conjunta para receber,
processar e devolver
informações do sistema
Interface gráfica, que
consome as APIs,
apresentando suas
informações de
forma amigável
Application Programming Interface Graphical user interface
Globalcode – Open4education
Frameworks
RSpec Rest-Client WebDriver
Documentação:
relishapp.com/rspec
Documentação:
github.com/rest-client/rest-client
Documentação:
bit.ly/WebDriverRuby
Unidade API GUI
Globalcode – Open4education
Preparando o ambiente
1. Instale o Ruby 2.0
rubyinstaller.org

* Adicione o diretório do Ruby às variáveis de ambiente
2. Baixe o DevKit na mesma URL e extraia-o em C:Ruby200dk
3. Instale o DevKit executando as linhas abaixo no prompt
ruby C:Ruby200dkdk.rb init
ruby C:Ruby200dkdk.rb install
4. Instale a Gem do Bundler
Digite gem install bundler no prompt de comando
Globalcode – Open4education
Preparando o projeto
1. Crie o diretório “RubyInTestTDC” e acesse-o via prompt
2. Execute o comando bundle init
3. Agora o arquivo Gemfile foi criado
Adicionaremos a ele todas os frameworks que utilizaremos
4. Abra o Gemfile e substitua seu conteúdo pelas linhas abaixo:
source "http://rubygems.org"
gem 'rspec', '~> 3.3.0'
gem 'rest-client', '~> 1.8'
gem 'selenium-webdriver', '2.48.1'
gem 'sinatra' # Para o app de teste
5. Execute o comando bundle install
Globalcode – Open4education
Você pode assistir esse passo a passo
no YouTube através do link abaixo:
bit.ly/RubyInTestInstalacao
Globalcode – Open4education
Automatizando testes de
unidade
# C:RubyInTestTDCavaliacao_class.rb
class Avaliacao
def avaliar(notaprova, notatrabalho)
if (notaprova >= 7)
if (notatrabalho >= 7)
return "Aprovado"
else
return "Exame"
end
else
return "DP"
end
end
end
Para demonstrar este tipo de teste, usaremos a class Avaliação, que
possui um método chamado “avaliar”, que recebe dois parâmetros:
notaprova e notatrabalho.
Globalcode – Open4education
Automatizando testes de
unidade
# C:RubyInTestTDCspecunitavaliacao_spec.rb
require_relative "../../avaliacao_class"
describe Avaliacao do
it "alunos com notas maiores ou iguais a 7 são aprovados" do
# Arrange
avaliacao = Avaliacao.new()
# Act
resultado = avaliacao.avaliar(7, 7)
# Assert
expect(resultado).to eq("Aprovado")
end
end
Teríamos que desenvolver três testes de unidade para testar o método
avaliar, eles seguem a mesma estrutura do método abaixo:
Globalcode – Open4education
Automatizando testes de
unidade
A execução dos testes de unidade se dá através do comando:
rspec C:RubyInTestTDCspecunitavaliacao_spec.rb --color
Veremos o resultado semelhante ao abaixo:
.
Finished in 0 seconds (files took 0.1716 seconds to load)
1 example, 0 failures
Digamos que tenhamos esquecido que a nota de corte era 7 e então
mudamos no código para 8. Ao rodar, veremos o erro abaixo:
Failure/Error: expect(resultado).to eq("Aprovado")
expected: "Aprovado"
got: "DP"
Globalcode – Open4education
Automatizando testes de API
Para demonstrar este tipo de teste, usaremos uma API REST chamada “escola”,
que consome a classe e método que testamos anteriormente.
Ela está disponível no endereço:
http://localhost:4567/escola/api/
Essa API possui apenas um recurso e um método:
POST avaliar
@notaprova (String)
@notatrabalho (String)
Resposta:
@status (String) [fail/success]
@message (String)[Aprovado/Exame/DP]
Globalcode – Open4education
Automatizando testes de API
O RSpec fornece suporte a todos os métodos utilizados em API Rest, dentre
eles: GET, POST, PUT, DELETE.
Veremos aqui um exemplo utilizando o método POST, para avaliar o aluno
A resposta proveniente da API, obtido através da propriedade “body" do objeto
"resposta", geralmente vem em formato JSON, semelhante à que temos abaixo:
{"status":"success","message":"Aprovado"}
# Executando a requisição
resposta = RestClient.post(
'http://localhost:4567/escola/api/avaliar',
:notaprova => '7',
:notatrabalho => '7'
)
# Chamando o framework Rest-Client
require 'rest-client'
Globalcode – Open4education
Automatizando testes de API
Então é necessário converte-la em objeto estruturado para que possamos ter
acesso à resposta como um objeto, veja:
E, por fim, executamos as validações:
# Executando a requisição
resposta = RestClient.post(
'http://localhost:4567/escola/api/avaliar',
:notaprova => '7',
:notatrabalho => '7'
)
# Convertendo o resultado de JSON para Object
corpo = JSON.parse(resposta.body, object_class: OpenStruct)
# Validando resultados
expect(corpo.status).to eq("success")
expect(corpo.message).to eq("Aprovado")
Globalcode – Open4education
Automatizando testes de API
Agora já sabemos como interagir com a API e validar os resultados. O próximo
passo é criar a estrutura do teste usando RSpec, já sabemos como fazer isso:
Observações:
• O require é necessário para podermos utilizar o framework Rest-Client;
• Os contextos facilitam a visualização dos resultados;
require 'rest-client'
describe "Gerenciar API Escola" do
context "/avaliar" do
context "GET" do
it "alunos com notas maiores ou iguais a 7 são aprovados" do
# Interações com a API e validações
end
end
end
end
Globalcode – Open4education
Automatizando testes de API
# C:RubyInTestTDCspecapiescola_spec.rb
require 'rest-client'
describe "Gerenciar API Escola" do
context "/avaliar" do
context "GET" do
it "alunos com notas maiores ou iguais a 7 são aprovados" do
# Executando a requisição
resposta = RestClient.post(
'http://localhost:4567/escola/api/avaliar',
:notaprova => '7',
:notatrabalho => '7'
)
# Convertendo o resultado de JSON para Object
corpo = JSON.parse(resposta.body, object_class: OpenStruct
# Validando resultados
expect(corpo.status).to eq("success")
expect(corpo.message).to eq("Aprovado")
end
end
end
end
Código completo:
Globalcode – Open4education
Automatizando testes de API
A execução dos testes de API também podem ser executado com o mesmo comando
que usamos para executar os testes de unidade:
rspec C:RubyInTestTDCspecapiescola_spec.rb --color
Mas, como usamos contextos, podemos usar o parâmetro --format documentation,
após o parâmetro --color para que vejamos os resultados no formato de
documentação:
rspec C:RubyInTestTDCspecapiescola_spec.rb --color --format
documentation
E então os resultados aparecerão da seguinte forma:
Gerenciar API Escola
/avaliar
GET
alunos com notas maiores ou iguais a 7 sao aprovados
Finished in 0.0468 seconds (files took 0.5148 seconds to load)
1 example, 0 failures
Globalcode – Open4education
Automatizando testes de GUI
Para demonstrar este tipo de teste, usaremos uma aplicação web chamada
“escola”, que consome a API que testamos anteriormente.
Ela está disponível no endereço:
http://localhost:4567/escola/web/
Esta aplicação permite que informemos duas notas e, após clicar no botão
“Avaliar”, nos devolve o status atual do aluno.
Iremos automatizar o seguinte cenário:
1. Abrir e maximizar o browser Firefox;
2. Acessar a aplicação web;
3. Preencher o formulário;
4. Clicar no botão “Avaliar”;
5. Validar que a mensagem “Aprovado" foi apresentada.
Globalcode – Open4education
Automatizando testes de GUI
1. Abrir e maximizar o browser Firefox
navegador = Selenium::WebDriver.for :firefox
navegador.manage.window.maximize()
2. Acessar a aplicação web
navegador.get('http://localhost:4567/escola/web/')
3. Preencher o formulário
navegador.find_element(:name, 'notaprova').send_keys("7")
navegador[:name => 'notatrabalho'].send_keys("7")
4. Clicar no botão “Avaliar”;
navegador.find_element(:id, 'avaliar').click()
Outra forma de fazer
find_element
Globalcode – Open4education
Automatizando testes de GUI
5. Validar que a mensagem “Aprovado" foi apresentada
expect(navegador.find_element(:id, 'message').text).to
eq("Aprovado")
# Fechar o browser
navegador.close()
Observação:
Não esqueça de adicionar o require ‘selenium-webdriver’ no topo do arquivo
para que seja usado o valor transporte.
require 'selenium-webdriver'
Globalcode – Open4education
Automatizando testes de GUI
Código completo:
# C:RubyInTestTDCspecguiescola_spec.rb
require 'selenium-webdriver'
describe "Gerenciar Site Escola" do
context "Avaliar" do
it "alunos com notas maiores ou iguais a 7 são aprovados" do
navegador = Selenium::WebDriver.for :firefox
navegador.manage.window.maximize()
# Acessando a página inicial do QuickLoja
navegador.get('http://localhost:4567/escola/web/')
# Preenchendo o formulário
navegador.find_element(:name, 'notaprova').send_keys("7")
navegador[:name => 'notatrabalho'].send_keys("7")
navegador.find_element(:id, 'avaliar').click()
# Validando que entrou
expect(navegador.find_element(:id, 'message').text).to eq("Aprovado")
# Fechar o browser
navegador.close()
end
end
end
Globalcode – Open4education
Relatório em HTML
Uma vez que já automatizamos os testes em todas as camadas, podemos
rodar os testes e obter os resultados em formato HTML. Para isso,
executaremos o comando abaixo:
O resultado será semelhante ao apresentado abaixo:
rspec C:RubyInTestTDCspec --format html --out
C:RubyInTestTDCrelatorio.html
Globalcode – Open4education
@juliodelimas
slideshare.net/juliodelimas
github.com/juliodelimas/rubyintests
medium.com/@juliodelimas
iam@juliodelima.com.br
Obrigado!

Mais conteúdo relacionado

PDF
Hpr Aplgo
PDF
Bty Aplgo
PDF
Catalogo De Productos Aplgo
PDF
PresentacionAPLGO│Constructores de Exito - Equipo aplgo hispano
PDF
Mls Aplgo
PDF
地藏菩薩本願經(The Sutra of the Past Original Vows Of Earth Treasury Bodhisattva)
PDF
Pwr Albaricoque Aplgo
PPTX
Cara menjalankan bisnis
Hpr Aplgo
Bty Aplgo
Catalogo De Productos Aplgo
PresentacionAPLGO│Constructores de Exito - Equipo aplgo hispano
Mls Aplgo
地藏菩薩本願經(The Sutra of the Past Original Vows Of Earth Treasury Bodhisattva)
Pwr Albaricoque Aplgo
Cara menjalankan bisnis

Mais procurados (9)

PPTX
Herbalife Business Oportunity (Marketing Plan)
PDF
Herbalife: Who Wants To Be A Millionaire
PDF
Forever Living Business Presentation
PPTX
Learn About the APLGO Compensation Plan
PDF
Nrm Aplgo
PPTX
materi penyuluhan kespro remaja.pptx
PDF
Hrt Aplgo
PDF
Gts Aplgo
PDF
Herbalife Skin Product usage Detail
Herbalife Business Oportunity (Marketing Plan)
Herbalife: Who Wants To Be A Millionaire
Forever Living Business Presentation
Learn About the APLGO Compensation Plan
Nrm Aplgo
materi penyuluhan kespro remaja.pptx
Hrt Aplgo
Gts Aplgo
Herbalife Skin Product usage Detail
Anúncio

Semelhante a [TDC2016] Ruby in Tests: Automatizando testes de Unidade, API e GUI (Web) (20)

PDF
Desafio Rest API
PDF
[TDC2015] De unitário a aceitação: Automação de testes com Codeception
PDF
Criar e consumir uma API RESTful no PHP Laravel.pdf
PDF
JavaEE 7, na era do cloud computing
DOCX
Nao sensivel
DOCX
Gsp313 desafio selo_01
PPTX
PDC - Engenharia - Plataforma Microsoft .NET
PDF
Paralelize seus testes web e mobile para ter feedbacks mais rápidos
PDF
Testes Funcionais com Selenium
PDF
Introdução À Automação de Testes com Selenium
PDF
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
PDF
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
PDF
Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...
PDF
Testes automatizados end-to-end com WordPress por Fabio Nas
PDF
TDC2015: Testes em APIs REST com Rest-Assured
PDF
Palestra sobre Automação de Testes com Rest-Assured
PDF
TDC 2016 Trilha Testes - Floripa
PPTX
Como melhoramos a performance dos testes automatizados com py.test e factoryboy
PPTX
Testando sua aplicação asp.net mvc de forma automatizada de ponta a ponta
PPTX
Automação de Teste para REST, Web e Mobile
Desafio Rest API
[TDC2015] De unitário a aceitação: Automação de testes com Codeception
Criar e consumir uma API RESTful no PHP Laravel.pdf
JavaEE 7, na era do cloud computing
Nao sensivel
Gsp313 desafio selo_01
PDC - Engenharia - Plataforma Microsoft .NET
Paralelize seus testes web e mobile para ter feedbacks mais rápidos
Testes Funcionais com Selenium
Introdução À Automação de Testes com Selenium
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...
Testes automatizados end-to-end com WordPress por Fabio Nas
TDC2015: Testes em APIs REST com Rest-Assured
Palestra sobre Automação de Testes com Rest-Assured
TDC 2016 Trilha Testes - Floripa
Como melhoramos a performance dos testes automatizados com py.test e factoryboy
Testando sua aplicação asp.net mvc de forma automatizada de ponta a ponta
Automação de Teste para REST, Web e Mobile
Anúncio

Mais de Júlio de Lima (20)

PDF
[ATC2021] Distribuição de Testes em Diferentes Camadas
PDF
ALTER FACE Test Heuristic
PDF
[ScrumDay2020] A evolução da responsabilidade em testes
PDF
Reducing the scope of load test analysis (STAREast 2020)
PDF
[TDC2019] Inteligência Artificial e Testes in a Nutshell
PDF
[GaragemTalks2019] Cultura de Testes e Qualidade de Software
PDF
[MoT SP #1] PRISMA para Testes Baseados em Risco
PDF
Mindset de QA em Diferentes Contextos
PDF
[DevelopersBR-2018] Testes de performance usando a nuvem
PPTX
[7Masters Aug, 2018] Escolhas durante automação de testes de API
PDF
[Front in Sampa 2018] Desenvolvendo como QAs
PDF
Mindset do QA em diferentes contextos
PDF
[QANinjaConf2017] Testes de Regressão Visual com Galen Framework
PDF
[PHPConference 2016] Criando Mocks com Prophecy
PDF
[QANinjaConference] Carreira em Testes: Ainda vale a pena?
PDF
[QANinjaConference] Automação de Testes com Codeception
PDF
[PHPConferenceBR] Automação de testes com Codeception
PDF
[38º GURU SP] Automação de Testes Web em Ruby com Cucumber e Webdriver
PDF
[UNIP2015] Testando a Performance de Aplicações Web com JMeter
PDF
Palestra DevOps para Teste de Software
[ATC2021] Distribuição de Testes em Diferentes Camadas
ALTER FACE Test Heuristic
[ScrumDay2020] A evolução da responsabilidade em testes
Reducing the scope of load test analysis (STAREast 2020)
[TDC2019] Inteligência Artificial e Testes in a Nutshell
[GaragemTalks2019] Cultura de Testes e Qualidade de Software
[MoT SP #1] PRISMA para Testes Baseados em Risco
Mindset de QA em Diferentes Contextos
[DevelopersBR-2018] Testes de performance usando a nuvem
[7Masters Aug, 2018] Escolhas durante automação de testes de API
[Front in Sampa 2018] Desenvolvendo como QAs
Mindset do QA em diferentes contextos
[QANinjaConf2017] Testes de Regressão Visual com Galen Framework
[PHPConference 2016] Criando Mocks com Prophecy
[QANinjaConference] Carreira em Testes: Ainda vale a pena?
[QANinjaConference] Automação de Testes com Codeception
[PHPConferenceBR] Automação de testes com Codeception
[38º GURU SP] Automação de Testes Web em Ruby com Cucumber e Webdriver
[UNIP2015] Testando a Performance de Aplicações Web com JMeter
Palestra DevOps para Teste de Software

Último (19)

PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PPTX
Aula 18 - Manipulacao De Arquivos python
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PPTX
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PDF
Apple Pippin Uma breve introdução. - David Glotz
PDF
Processos na gestão de transportes, TM100 Col18
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PDF
Aula04-Academia Heri- Tecnologia Geral 2025
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Aula 18 - Manipulacao De Arquivos python
COBITxITIL-Entenda as diferença em uso governança TI
Custos e liquidação no SAP Transportation Management, TM130 Col18
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Apple Pippin Uma breve introdução. - David Glotz
Processos na gestão de transportes, TM100 Col18
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Aula04-Academia Heri- Tecnologia Geral 2025

[TDC2016] Ruby in Tests: Automatizando testes de Unidade, API e GUI (Web)

  • 1. Globalcode – Open4education Ruby in Tests Júlio de Lima Especialista em Testes na RSI @juliodelimas
  • 2. Globalcode – Open4education Objetivo Ao fim da palestra, você saiba como preparar o ambiente e escrever scripts de teste automatizados de unidade, API e GUI (Web) usando frameworks open- source em Ruby.
  • 3. Globalcode – Open4education "RubyInTests" O nome da palestra baseia-se em uma série de artigos de minha autoria originados de um #desafioAgileTesters feito pelo amigo Diego Blond (@PerdidoNoTeste). Conheçam mais sobre o desafio e a comunidade Agile Testers: bit.ly/desafioAgileTesters2016
  • 4. Globalcode – Open4education O conceito Unidade API GUI Métodos de uma classe que serão testados de forma isolada Métodos que utilizam as unidades de forma conjunta para receber, processar e devolver informações do sistema Interface gráfica, que consome as APIs, apresentando suas informações de forma amigável Application Programming Interface Graphical user interface
  • 5. Globalcode – Open4education Frameworks RSpec Rest-Client WebDriver Documentação: relishapp.com/rspec Documentação: github.com/rest-client/rest-client Documentação: bit.ly/WebDriverRuby Unidade API GUI
  • 6. Globalcode – Open4education Preparando o ambiente 1. Instale o Ruby 2.0 rubyinstaller.org
 * Adicione o diretório do Ruby às variáveis de ambiente 2. Baixe o DevKit na mesma URL e extraia-o em C:Ruby200dk 3. Instale o DevKit executando as linhas abaixo no prompt ruby C:Ruby200dkdk.rb init ruby C:Ruby200dkdk.rb install 4. Instale a Gem do Bundler Digite gem install bundler no prompt de comando
  • 7. Globalcode – Open4education Preparando o projeto 1. Crie o diretório “RubyInTestTDC” e acesse-o via prompt 2. Execute o comando bundle init 3. Agora o arquivo Gemfile foi criado Adicionaremos a ele todas os frameworks que utilizaremos 4. Abra o Gemfile e substitua seu conteúdo pelas linhas abaixo: source "http://rubygems.org" gem 'rspec', '~> 3.3.0' gem 'rest-client', '~> 1.8' gem 'selenium-webdriver', '2.48.1' gem 'sinatra' # Para o app de teste 5. Execute o comando bundle install
  • 8. Globalcode – Open4education Você pode assistir esse passo a passo no YouTube através do link abaixo: bit.ly/RubyInTestInstalacao
  • 9. Globalcode – Open4education Automatizando testes de unidade # C:RubyInTestTDCavaliacao_class.rb class Avaliacao def avaliar(notaprova, notatrabalho) if (notaprova >= 7) if (notatrabalho >= 7) return "Aprovado" else return "Exame" end else return "DP" end end end Para demonstrar este tipo de teste, usaremos a class Avaliação, que possui um método chamado “avaliar”, que recebe dois parâmetros: notaprova e notatrabalho.
  • 10. Globalcode – Open4education Automatizando testes de unidade # C:RubyInTestTDCspecunitavaliacao_spec.rb require_relative "../../avaliacao_class" describe Avaliacao do it "alunos com notas maiores ou iguais a 7 são aprovados" do # Arrange avaliacao = Avaliacao.new() # Act resultado = avaliacao.avaliar(7, 7) # Assert expect(resultado).to eq("Aprovado") end end Teríamos que desenvolver três testes de unidade para testar o método avaliar, eles seguem a mesma estrutura do método abaixo:
  • 11. Globalcode – Open4education Automatizando testes de unidade A execução dos testes de unidade se dá através do comando: rspec C:RubyInTestTDCspecunitavaliacao_spec.rb --color Veremos o resultado semelhante ao abaixo: . Finished in 0 seconds (files took 0.1716 seconds to load) 1 example, 0 failures Digamos que tenhamos esquecido que a nota de corte era 7 e então mudamos no código para 8. Ao rodar, veremos o erro abaixo: Failure/Error: expect(resultado).to eq("Aprovado") expected: "Aprovado" got: "DP"
  • 12. Globalcode – Open4education Automatizando testes de API Para demonstrar este tipo de teste, usaremos uma API REST chamada “escola”, que consome a classe e método que testamos anteriormente. Ela está disponível no endereço: http://localhost:4567/escola/api/ Essa API possui apenas um recurso e um método: POST avaliar @notaprova (String) @notatrabalho (String) Resposta: @status (String) [fail/success] @message (String)[Aprovado/Exame/DP]
  • 13. Globalcode – Open4education Automatizando testes de API O RSpec fornece suporte a todos os métodos utilizados em API Rest, dentre eles: GET, POST, PUT, DELETE. Veremos aqui um exemplo utilizando o método POST, para avaliar o aluno A resposta proveniente da API, obtido através da propriedade “body" do objeto "resposta", geralmente vem em formato JSON, semelhante à que temos abaixo: {"status":"success","message":"Aprovado"} # Executando a requisição resposta = RestClient.post( 'http://localhost:4567/escola/api/avaliar', :notaprova => '7', :notatrabalho => '7' ) # Chamando o framework Rest-Client require 'rest-client'
  • 14. Globalcode – Open4education Automatizando testes de API Então é necessário converte-la em objeto estruturado para que possamos ter acesso à resposta como um objeto, veja: E, por fim, executamos as validações: # Executando a requisição resposta = RestClient.post( 'http://localhost:4567/escola/api/avaliar', :notaprova => '7', :notatrabalho => '7' ) # Convertendo o resultado de JSON para Object corpo = JSON.parse(resposta.body, object_class: OpenStruct) # Validando resultados expect(corpo.status).to eq("success") expect(corpo.message).to eq("Aprovado")
  • 15. Globalcode – Open4education Automatizando testes de API Agora já sabemos como interagir com a API e validar os resultados. O próximo passo é criar a estrutura do teste usando RSpec, já sabemos como fazer isso: Observações: • O require é necessário para podermos utilizar o framework Rest-Client; • Os contextos facilitam a visualização dos resultados; require 'rest-client' describe "Gerenciar API Escola" do context "/avaliar" do context "GET" do it "alunos com notas maiores ou iguais a 7 são aprovados" do # Interações com a API e validações end end end end
  • 16. Globalcode – Open4education Automatizando testes de API # C:RubyInTestTDCspecapiescola_spec.rb require 'rest-client' describe "Gerenciar API Escola" do context "/avaliar" do context "GET" do it "alunos com notas maiores ou iguais a 7 são aprovados" do # Executando a requisição resposta = RestClient.post( 'http://localhost:4567/escola/api/avaliar', :notaprova => '7', :notatrabalho => '7' ) # Convertendo o resultado de JSON para Object corpo = JSON.parse(resposta.body, object_class: OpenStruct # Validando resultados expect(corpo.status).to eq("success") expect(corpo.message).to eq("Aprovado") end end end end Código completo:
  • 17. Globalcode – Open4education Automatizando testes de API A execução dos testes de API também podem ser executado com o mesmo comando que usamos para executar os testes de unidade: rspec C:RubyInTestTDCspecapiescola_spec.rb --color Mas, como usamos contextos, podemos usar o parâmetro --format documentation, após o parâmetro --color para que vejamos os resultados no formato de documentação: rspec C:RubyInTestTDCspecapiescola_spec.rb --color --format documentation E então os resultados aparecerão da seguinte forma: Gerenciar API Escola /avaliar GET alunos com notas maiores ou iguais a 7 sao aprovados Finished in 0.0468 seconds (files took 0.5148 seconds to load) 1 example, 0 failures
  • 18. Globalcode – Open4education Automatizando testes de GUI Para demonstrar este tipo de teste, usaremos uma aplicação web chamada “escola”, que consome a API que testamos anteriormente. Ela está disponível no endereço: http://localhost:4567/escola/web/ Esta aplicação permite que informemos duas notas e, após clicar no botão “Avaliar”, nos devolve o status atual do aluno. Iremos automatizar o seguinte cenário: 1. Abrir e maximizar o browser Firefox; 2. Acessar a aplicação web; 3. Preencher o formulário; 4. Clicar no botão “Avaliar”; 5. Validar que a mensagem “Aprovado" foi apresentada.
  • 19. Globalcode – Open4education Automatizando testes de GUI 1. Abrir e maximizar o browser Firefox navegador = Selenium::WebDriver.for :firefox navegador.manage.window.maximize() 2. Acessar a aplicação web navegador.get('http://localhost:4567/escola/web/') 3. Preencher o formulário navegador.find_element(:name, 'notaprova').send_keys("7") navegador[:name => 'notatrabalho'].send_keys("7") 4. Clicar no botão “Avaliar”; navegador.find_element(:id, 'avaliar').click() Outra forma de fazer find_element
  • 20. Globalcode – Open4education Automatizando testes de GUI 5. Validar que a mensagem “Aprovado" foi apresentada expect(navegador.find_element(:id, 'message').text).to eq("Aprovado") # Fechar o browser navegador.close() Observação: Não esqueça de adicionar o require ‘selenium-webdriver’ no topo do arquivo para que seja usado o valor transporte. require 'selenium-webdriver'
  • 21. Globalcode – Open4education Automatizando testes de GUI Código completo: # C:RubyInTestTDCspecguiescola_spec.rb require 'selenium-webdriver' describe "Gerenciar Site Escola" do context "Avaliar" do it "alunos com notas maiores ou iguais a 7 são aprovados" do navegador = Selenium::WebDriver.for :firefox navegador.manage.window.maximize() # Acessando a página inicial do QuickLoja navegador.get('http://localhost:4567/escola/web/') # Preenchendo o formulário navegador.find_element(:name, 'notaprova').send_keys("7") navegador[:name => 'notatrabalho'].send_keys("7") navegador.find_element(:id, 'avaliar').click() # Validando que entrou expect(navegador.find_element(:id, 'message').text).to eq("Aprovado") # Fechar o browser navegador.close() end end end
  • 22. Globalcode – Open4education Relatório em HTML Uma vez que já automatizamos os testes em todas as camadas, podemos rodar os testes e obter os resultados em formato HTML. Para isso, executaremos o comando abaixo: O resultado será semelhante ao apresentado abaixo: rspec C:RubyInTestTDCspec --format html --out C:RubyInTestTDCrelatorio.html