SlideShare une entreprise Scribd logo
1  sur  23
Télécharger pour lire hors ligne
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!

Contenu connexe

Tendances

Test Automation and Selenium
Test Automation and SeleniumTest Automation and Selenium
Test Automation and SeleniumKarapet Sarkisyan
 
[오픈소스컨설팅] EFK Stack 소개와 설치 방법
[오픈소스컨설팅] EFK Stack 소개와 설치 방법[오픈소스컨설팅] EFK Stack 소개와 설치 방법
[오픈소스컨설팅] EFK Stack 소개와 설치 방법Open Source Consulting
 
Automation test framework with cucumber – BDD
Automation test framework with cucumber – BDDAutomation test framework with cucumber – BDD
Automation test framework with cucumber – BDD123abcda
 
Web automation using selenium.ppt
Web automation using selenium.pptWeb automation using selenium.ppt
Web automation using selenium.pptAna Sarbescu
 
Test automation
Test automationTest automation
Test automationXavier Yin
 
Selenium WebDriver Tutorial | Selenium WebDriver Tutorial For Beginner | Sele...
Selenium WebDriver Tutorial | Selenium WebDriver Tutorial For Beginner | Sele...Selenium WebDriver Tutorial | Selenium WebDriver Tutorial For Beginner | Sele...
Selenium WebDriver Tutorial | Selenium WebDriver Tutorial For Beginner | Sele...Simplilearn
 
Test Automation Using Selenium
Test Automation Using SeleniumTest Automation Using Selenium
Test Automation Using SeleniumNikhil Kapoor
 
SpringBoot with MyBatis, Flyway, QueryDSL
SpringBoot with MyBatis, Flyway, QueryDSLSpringBoot with MyBatis, Flyway, QueryDSL
SpringBoot with MyBatis, Flyway, QueryDSLSunghyouk Bae
 
Testando API REST - Parte 1
Testando API REST - Parte 1Testando API REST - Parte 1
Testando API REST - Parte 1alinebiath
 
MySQL Document Store를 활용한 NoSQL 개발
MySQL Document Store를 활용한 NoSQL 개발MySQL Document Store를 활용한 NoSQL 개발
MySQL Document Store를 활용한 NoSQL 개발Oracle Korea
 
Introdução a testes de software utilizando selenium
Introdução a testes de software utilizando seleniumIntrodução a testes de software utilizando selenium
Introdução a testes de software utilizando seleniumSandy Maciel
 
What's new in selenium 4
What's new in selenium 4What's new in selenium 4
What's new in selenium 4Knoldus Inc.
 
Framework For Automation Testing Practice Sharing
Framework For Automation Testing Practice SharingFramework For Automation Testing Practice Sharing
Framework For Automation Testing Practice SharingKMS Technology
 

Tendances (20)

Test Automation and Selenium
Test Automation and SeleniumTest Automation and Selenium
Test Automation and Selenium
 
[오픈소스컨설팅] EFK Stack 소개와 설치 방법
[오픈소스컨설팅] EFK Stack 소개와 설치 방법[오픈소스컨설팅] EFK Stack 소개와 설치 방법
[오픈소스컨설팅] EFK Stack 소개와 설치 방법
 
Automation test framework with cucumber – BDD
Automation test framework with cucumber – BDDAutomation test framework with cucumber – BDD
Automation test framework with cucumber – BDD
 
Web automation using selenium.ppt
Web automation using selenium.pptWeb automation using selenium.ppt
Web automation using selenium.ppt
 
Test automation
Test automationTest automation
Test automation
 
Tomcat
TomcatTomcat
Tomcat
 
Spring boot
Spring bootSpring boot
Spring boot
 
Automation Testing by Selenium Web Driver
Automation Testing by Selenium Web DriverAutomation Testing by Selenium Web Driver
Automation Testing by Selenium Web Driver
 
Selenium Demo
Selenium DemoSelenium Demo
Selenium Demo
 
Selenium WebDriver Tutorial | Selenium WebDriver Tutorial For Beginner | Sele...
Selenium WebDriver Tutorial | Selenium WebDriver Tutorial For Beginner | Sele...Selenium WebDriver Tutorial | Selenium WebDriver Tutorial For Beginner | Sele...
Selenium WebDriver Tutorial | Selenium WebDriver Tutorial For Beginner | Sele...
 
Selenium
SeleniumSelenium
Selenium
 
Nuxt.js - Introduction
Nuxt.js - IntroductionNuxt.js - Introduction
Nuxt.js - Introduction
 
Test Automation Using Selenium
Test Automation Using SeleniumTest Automation Using Selenium
Test Automation Using Selenium
 
Appium
AppiumAppium
Appium
 
SpringBoot with MyBatis, Flyway, QueryDSL
SpringBoot with MyBatis, Flyway, QueryDSLSpringBoot with MyBatis, Flyway, QueryDSL
SpringBoot with MyBatis, Flyway, QueryDSL
 
Testando API REST - Parte 1
Testando API REST - Parte 1Testando API REST - Parte 1
Testando API REST - Parte 1
 
MySQL Document Store를 활용한 NoSQL 개발
MySQL Document Store를 활용한 NoSQL 개발MySQL Document Store를 활용한 NoSQL 개발
MySQL Document Store를 활용한 NoSQL 개발
 
Introdução a testes de software utilizando selenium
Introdução a testes de software utilizando seleniumIntrodução a testes de software utilizando selenium
Introdução a testes de software utilizando selenium
 
What's new in selenium 4
What's new in selenium 4What's new in selenium 4
What's new in selenium 4
 
Framework For Automation Testing Practice Sharing
Framework For Automation Testing Practice SharingFramework For Automation Testing Practice Sharing
Framework For Automation Testing Practice Sharing
 

Similaire à RubyTestsGUIAPIUnit

[TDC2015] De unitário a aceitação: Automação de testes com Codeception
[TDC2015] De unitário a aceitação: Automação de testes com Codeception[TDC2015] De unitário a aceitação: Automação de testes com Codeception
[TDC2015] De unitário a aceitação: Automação de testes com CodeceptionQualister
 
JavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingJavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingEder Magalhães
 
PDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NETPDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NETslides_teltools
 
Paralelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidosParalelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidosElias Nogueira
 
Testes Funcionais com Selenium
Testes Funcionais com Selenium Testes Funcionais com Selenium
Testes Funcionais com Selenium Mayron Cachina
 
Introdução À Automação de Testes com Selenium
Introdução À Automação de Testes com SeleniumIntrodução À Automação de Testes com Selenium
Introdução À Automação de Testes com Seleniumrodrigogouveia
 
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.Sergio Lima
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...tdc-globalcode
 
Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...
Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...
Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...Edlaine Zamora
 
Testes automatizados end-to-end com WordPress por Fabio Nas
Testes automatizados end-to-end com WordPress por Fabio NasTestes automatizados end-to-end com WordPress por Fabio Nas
Testes automatizados end-to-end com WordPress por Fabio NasWordCamp Floripa
 
Palestra sobre Automação de Testes com Rest-Assured
Palestra sobre Automação de Testes com Rest-AssuredPalestra sobre Automação de Testes com Rest-Assured
Palestra sobre Automação de Testes com Rest-AssuredQualister
 
TDC2015: Testes em APIs REST com Rest-Assured
TDC2015: Testes em APIs REST com Rest-AssuredTDC2015: Testes em APIs REST com Rest-Assured
TDC2015: Testes em APIs REST com Rest-AssuredJúlio de Lima
 
Como melhoramos a performance dos testes automatizados com py.test e factoryboy
Como melhoramos a performance dos testes automatizados com py.test e factoryboyComo melhoramos a performance dos testes automatizados com py.test e factoryboy
Como melhoramos a performance dos testes automatizados com py.test e factoryboyLeonardo Galani
 
Testando sua aplicação asp.net mvc de forma automatizada de ponta a ponta
Testando sua aplicação asp.net mvc de forma automatizada de ponta a pontaTestando sua aplicação asp.net mvc de forma automatizada de ponta a ponta
Testando sua aplicação asp.net mvc de forma automatizada de ponta a pontatdc-globalcode
 
Todas as abordagens de testes dentro do ágil
Todas as abordagens de testes dentro do ágilTodas as abordagens de testes dentro do ágil
Todas as abordagens de testes dentro do ágilElias Nogueira
 

Similaire à RubyTestsGUIAPIUnit (20)

Desafio Rest API
Desafio Rest APIDesafio Rest API
Desafio Rest API
 
[TDC2015] De unitário a aceitação: Automação de testes com Codeception
[TDC2015] De unitário a aceitação: Automação de testes com Codeception[TDC2015] De unitário a aceitação: Automação de testes com Codeception
[TDC2015] De unitário a aceitação: Automação de testes com Codeception
 
JavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingJavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computing
 
Gsp313 desafio selo_01
Gsp313 desafio selo_01Gsp313 desafio selo_01
Gsp313 desafio selo_01
 
Nao sensivel
Nao sensivelNao sensivel
Nao sensivel
 
PDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NETPDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NET
 
Paralelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidosParalelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidos
 
Testes Funcionais com Selenium
Testes Funcionais com Selenium Testes Funcionais com Selenium
Testes Funcionais com Selenium
 
Introdução À Automação de Testes com Selenium
Introdução À Automação de Testes com SeleniumIntrodução À Automação de Testes com Selenium
Introdução À Automação de Testes com Selenium
 
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
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...
Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...
Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...
 
Testes automatizados end-to-end com WordPress por Fabio Nas
Testes automatizados end-to-end com WordPress por Fabio NasTestes automatizados end-to-end com WordPress por Fabio Nas
Testes automatizados end-to-end com WordPress por Fabio Nas
 
Palestra sobre Automação de Testes com Rest-Assured
Palestra sobre Automação de Testes com Rest-AssuredPalestra sobre Automação de Testes com Rest-Assured
Palestra sobre Automação de Testes com Rest-Assured
 
TDC2015: Testes em APIs REST com Rest-Assured
TDC2015: Testes em APIs REST com Rest-AssuredTDC2015: Testes em APIs REST com Rest-Assured
TDC2015: Testes em APIs REST com Rest-Assured
 
TDC 2016 Trilha Testes - Floripa
TDC 2016 Trilha Testes - FloripaTDC 2016 Trilha Testes - Floripa
TDC 2016 Trilha Testes - Floripa
 
Como melhoramos a performance dos testes automatizados com py.test e factoryboy
Como melhoramos a performance dos testes automatizados com py.test e factoryboyComo melhoramos a performance dos testes automatizados com py.test e factoryboy
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
Testando sua aplicação asp.net mvc de forma automatizada de ponta a pontaTestando sua aplicação asp.net mvc de forma automatizada de ponta a ponta
Testando sua aplicação asp.net mvc de forma automatizada de ponta a ponta
 
cypress.pdf
cypress.pdfcypress.pdf
cypress.pdf
 
Todas as abordagens de testes dentro do ágil
Todas as abordagens de testes dentro do ágilTodas as abordagens de testes dentro do ágil
Todas as abordagens de testes dentro do ágil
 

Plus de Júlio de Lima

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

Plus de Júlio de Lima (20)

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

RubyTestsGUIAPIUnit

  • 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