Você está na página 1de 35

_____Robot

Framework_____

Automação de Testes
Índice
Fases da construção do teste automatizado....................................................................................................4
Projeto base....................................................................................................................................................4
Estrutura diretórios:...................................................................................................................................4
Prompt.......................................................................................................................................................5
TestSitePractice.robot................................................................................................................................6
TestSitePracticeBDD.robot.......................................................................................................................7
Resource.robot...........................................................................................................................................9
results/log.html........................................................................................................................................12
results/report.html...................................................................................................................................13
Locators...................................................................................................................................................14
Trabalhando com variáveis:.........................................................................................................................15
BuiltIn......................................................................................................................................................15
Configuração de variáveis.......................................................................................................................15
Set Global Variable.............................................................................................................................15
Set Suite Variable................................................................................................................................15
Set Test Variable.................................................................................................................................15
Set Variable.........................................................................................................................................15
ExemplosEscoposVariaveis.robot...........................................................................................................16
Tipos de variáveis – Listas e dicionários.....................................................................................................17
Variáveis simples, lista e dicionários.......................................................................................................17
Utilização das variáveis...........................................................................................................................17
ExemplosTiposVariaveis.........................................................................................................................17
Variáveis como argumentos de keywords....................................................................................................18
ExemplosArgumentos.............................................................................................................................18
Estruturas do Robot Framework..................................................................................................................19
Logs.........................................................................................................................................................19
BuiltIn - Log.......................................................................................................................................19
UsandoLogs.robot..............................................................................................................................19
IF.............................................................................................................................................................20
BuiltIn - If...........................................................................................................................................20
UsandoIFs.robot.................................................................................................................................20
Loop For..................................................................................................................................................21
UsandoLoopsFor.robot.......................................................................................................................21
API testing com Robot Framework.............................................................................................................22
RequestsLibrary......................................................................................................................................22
Collections...............................................................................................................................................22
Automação de Testes com Robot Framework Básico de APIs...............................................................23
Anexo: Acessando o conteúdo do Response......................................................................................23
API..........................................................................................................................................................23
Código Exemplo......................................................................................................................................24
TestCasesAPIBooks.robot..................................................................................................................24
ResourceAPI.robot.............................................................................................................................24
BuiltIn Avançado..........................................................................................................................................26
Loops: Nova sintaxe do FOR e outras variações do FOR.......................................................................26
Controles: Teardowns Avançados............................................................................................................28
Controles: Lidando com falhas previstas................................................................................................29
Controles: Esperas e Timeout do teste....................................................................................................30
Argumentos: Argumentos avançados em keywords...............................................................................31
Evaluate...................................................................................................................................................32
Libraries Auxiliares......................................................................................................................................32
Library DateTime....................................................................................................................................32
Library OperatingSystem........................................................................................................................32
Library String..........................................................................................................................................32
Library Process........................................................................................................................................32
Pré-Requisito: Instalando um cliente de Banco de Dados......................................................................33
Library DatabaseLibrary.........................................................................................................................33
Conclusão: Libraries Auxiliares..............................................................................................................33
Menções Honrosas..................................................................................................................................33
Libraries Customizadas................................................................................................................................33
Estrutura dos diretórios...........................................................................................................................33
GeradorHash.py.......................................................................................................................................33
myLibrary.robot.......................................................................................................................................34
Robot Framework Básico
Fases da construção do teste automatizado

Projeto base
O projeto de teste, foi realizado a partir de 2 casos:
• TestSitePradtice.robot
Desenvolvimento baseado em casos de uso

• TestSitePracticeBDD.robot
Desenvolvimento baseado em BDD

Estrutura diretórios:
Prompt

Z:\workspacePython\cursoRobotFramework\SuiteSiteTestePractice>robot -d ./result tests/TestSitePractice.robot


==============================================================================
TestSitePractice
==============================================================================
Caso de Teste 01: Pesquisar produto existente
DevTools listening on ws://127.0.0.1:56440/devtools/browser/3ae8306f-e203-44f8-924e-6e4272bb6978
.[6168:3960:1218/124743.371:ERROR:device_event_log_impl.cc(211)] [12:47:43.371] Bluetooth:
bluetooth_adapter_winrt.cc:1073
Getting Default Adapter failed.
Caso de Teste 01: Pesquisar produto existente | PASS |
------------------------------------------------------------------------------
Caso de Teste 02: Pesquisar produto não existente
DevTools listening on ws://127.0.0.1:56472/devtools/browser/874ad8c6-b446-42f6-96f8-53409859a08c
...[392:3148:1218/124800.280:ERROR:device_event_log_impl.cc(211)] [12:48:00.280] Bluetooth:
bluetooth_adapter_winrt.cc:1073
Getting Default Adapter failed.
Caso de Teste 02: Pesquisar produto não existente | PASS |
------------------------------------------------------------------------------
Caso de Teste 03: Listar Produtos
DevTools listening on ws://127.0.0.1:56502/devtools/browser/ed4629fa-fdc4-4623-a10c-a176ed7b9311
.[1112:4852:1218/124810.507:ERROR:device_event_log_impl.cc(211)] [12:48:10.507] Bluetooth:
bluetooth_adapter_winrt.cc:1073
Getting Default Adapter failed.
Caso de Teste 03: Listar Produtos | PASS |
------------------------------------------------------------------------------
Caso de Teste 04: Adicionar Produtos no Carrinho
DevTools listening on ws://127.0.0.1:56535/devtools/browser/2f4ed6d7-7ecc-4808-b961-f4e389dd3744
[3580:4112:1218/124817.728:ERROR:device_event_log_impl.cc(211)] [12:48:17.728] Bluetooth:
bluetooth_adapter_winrt.cc:1073 G
etting Default Adapter failed.
Caso de Teste 04: Adicionar Produtos no Carrinho | PASS |
------------------------------------------------------------------------------
Caso de Teste 05: Remover Produtos
DevTools listening on ws://127.0.0.1:56567/devtools/browser/02e673c7-9806-4981-ba5b-499c763f8b2e
.[764:4548:1218/124840.039:ERROR:device_event_log_impl.cc(211)] [12:48:40.039] Bluetooth:
bluetooth_adapter_winrt.cc:1073 G
etting Default Adapter failed.
Caso de Teste 05: Remover Produtos | PASS |
------------------------------------------------------------------------------
Caso de Teste 06: Adicionar Cliente
DevTools listening on ws://127.0.0.1:53115/devtools/browser/6bf4313b-b89f-4dcb-90d4-e23552e7a6dc
.[6584:8308:1218/124912.503:ERROR:device_event_log_impl.cc(211)] [12:49:12.503] Bluetooth:
bluetooth_adapter_winrt.cc:1073
Getting Default Adapter failed.
Caso de Teste 06: Adicionar Cliente | PASS |
------------------------------------------------------------------------------
TestSitePractice | PASS |
6 critical tests, 6 passed, 0 failed
6 tests total, 6 passed, 0 failed
==============================================================================
Output: Z:\workspacePython\cursoRobotFramework\SuiteSiteTestePractice\result\output.xml
Log: Z:\workspacePython\cursoRobotFramework\SuiteSiteTestePractice\result\log.html
Report: Z:\workspacePython\cursoRobotFramework\SuiteSiteTestePractice\result\report.html
TestSitePractice.robot
*** Settings ***
Resource ../resource/Resource.robot
Test Setup Abrir navegador
Test Teardown Fechar navegador

### SETUP: ele roda keyword antes da suite ou antes de um teste


### TEARDOWN: ele roda keyword depois de uma suite ou um teste

*** Test Case ***


Caso de Teste 01: Pesquisar produto existente
Acessar a página home do site
Digitar o nome do produto "Blouse" no campo de pesquisa
Clicar no botão pesquisar
Conferir se o produto "Blouse" foi listado no site

Caso de Teste 02: Pesquisar produto não existente


Acessar a página home do site
Digitar o nome do produto "itemNãoExistente" no campo de pesquisa
Clicar no botão pesquisar
Conferir mensagem "No results were found for your search "itemNãoExistente""

Caso de Teste 03: Listar Produtos


Acessar a página home do site
Passar o mouse por cima da categoria "Women" no menu principal superior de categorias
Clicar na sub categoria "Summer Dresses"
Conferir se os produtos da sub-categoria "Summer Dresses" foram mostrados na página

Caso de Teste 04: Adicionar Produtos no Carrinho


Acessar a página home do site
Digitar o nome do produto "t-shirt" no campo de pesquisa
Clicar no botão pesquisar
Clicar no botão "Add to Cart" do produto
Clicar no botão "Proceed to checkout"
Conferir se o produto "t-shirt" foi adicionado no carrinho com seus devidos dados e valores

Caso de Teste 05: Remover Produtos


Acessar a página home do site
Adicionar o produto "t-shirt" no carrinho
Excluir o produto do carrinho
Conferir se o carrinho fica vazio

Caso de Teste 06: Adicionar Cliente


Acessar a página home do site
Clicar em "Sign in"
Informar um e-mail válido
Clicar em "Create an account"
Preencher os dados obrigatórios
Submeter cadastro
Conferir se o cadastro foi efetuado com sucesso

TestSitePracticeBDD.robot
*** Settings ***
Resource ../resource/Resource.robot
Test Setup Abrir navegador
Test Teardown Fechar navegador

*** Variables ***


${URL} http://automationpractice.com
${BROWSER} chrome

*** Test Case ***


Cenário 01: Pesquisar produto existente
Dado que estou na página home do site
Quando eu pesquisar pelo produto "Blouse"
Então o produto "Blouse" deve ser listado na página de resultado da busca

Cenário 02: Pesquisar produto não existente


Dado que estou na página home do site
Quando eu pesquisar pelo produto "itemNãoExistente"
Então a página deve exibir a mensagem "No results were found for your search "itemNãoExistente""

Cenário 03: Listar Produtos


Dado que estou na página home do site
Quando eu acessar a categoria "Women"
E consultar a sub-categoria "Summer Dresses"
Então a página deve exibir os produtos da sub-categoria "Summer Dresses"

Cenário 04: Adicionar Produtos no Carrinho


Dado que estou na página home do site
Quando eu pesquisar pelo produto "t-shirt"
E adicionar o produto no carrinho
Então a tela do carrinho deve ser mostrada juntamente cos dados e valores do produto

Cenário 05: Remover Produtos


Dado que estou na página home do site
E existe o produto "t-shirt" adicionado no carrinho
Quando excluir o produto do carrinho
Então a página deve exibir a mensagem "Your shopping cart is empty."

Cenário 06: Adicionar Cliente


Dado que estou na página home do site
Quando eu solictar cadastro de novo cliente
Então o cadastro deve ser efetuado com sucesso

*** Keywords ***


Dado que estou na página home do site
Acessar a página home do site

Quando eu pesquisar pelo produto "${PRODUTO}"


Digitar o nome do produto "${PRODUTO}" no campo de pesquisa
Clicar no botão pesquisar

Então o produto "${PRODUTO}" deve ser listado na página de resultado da busca


Conferir se o produto "${PRODUTO}" foi listado no site

Então a página deve exibir a mensagem "${MENSAGEM_ALERTA}"


Conferir mensagem "${MENSAGEM_ALERTA}"

Quando eu acessar a categoria "${CATEGORIA}"


Passar o mouse por cima da categoria "${CATEGORIA}" no menu principal superior de categorias

E consultar a sub-categoria "${SUBCATEGORIA}"


Clicar na sub categoria "${SUBCATEGORIA}"

Então a página deve exibir os produtos da sub-categoria "${SUBCATEGORIA}"


Conferir se os produtos da sub-categoria "${SUBCATEGORIA}" foram mostrados na página

E adicionar o produto no carrinho


Clicar no botão "Add to Cart" do produto
Clicar no botão "Proceed to checkout"

Então a tela do carrinho deve ser mostrada juntamente cos dados e valores do produto
Conferir se o produto "t-shirt" foi adicionado no carrinho com seus devidos dados e valores

E existe o produto "${PRODUTO}" adicionado no carrinho


Digitar o nome do produto "${PRODUTO}" no campo de pesquisa
Clicar no botão pesquisar
Clicar no botão "Add to Cart" do produto
Clicar no botão "Proceed to checkout"

Quando excluir o produto do carrinho


Excluir o produto do carrinho

Quando eu solictar cadastro de novo cliente


Clicar em "Sign in"
Informar um e-mail válido
Clicar em "Create an account"
Preencher os dados obrigatórios
Submeter cadastro

Então o cadastro deve ser efetuado com sucesso


Conferir se o cadastro foi efetuado com sucesso
Resource.robot
*** Settings ***
Library SeleniumLibrary
Library String

*** Variables ***


${BROWSER} chrome
${URL} http://automationpractice.com

*** Keywords ***


#### Setup e Teardown
Abrir navegador
Open Browser about:blank ${BROWSER}

Fechar navegador
Close Browser

#### Ações
Acessar a página home do site
Go To ${URL}
Wait Until Element Is Visible xpath=//*[@id="block_top_menu"]/ul
Title Should Be My Store

Digitar o nome do produto "${PRODUTO}" no campo de pesquisa


Input Text name=search_query ${PRODUTO}

Clicar no botão pesquisar


Click Element name=submit_search

Passar o mouse por cima da categoria "${CATEGORIA}" no menu principal superior de categorias
Wait Until Element Is Visible xpath=//*[@id="block_top_menu"]//a[@title="${CATEGORIA}"]
Mouse Over xpath=//*[@id="block_top_menu"]//a[@title="${CATEGORIA}"]

Clicar na sub categoria "${SUBCATEGORIA}"


Wait Until Element Is Visible xpath=//*[@id="block_top_menu"]//a[@title="$
{SUBCATEGORIA}"]
Click Element xpath=//*[@id="block_top_menu"]//a[@title="${SUBCATEGORIA}"]

Clicar no botão "Add to Cart" do produto


Wait Until Element Is Visible xpath=//*[@id="center_column"]//img[@alt="Faded Short Sleeve T-
shirts"]
Click Element xpath=//*[@id="center_column"]//img[@alt="Faded Short Sleeve T-
shirts"]
Wait Until Element Is Visible xpath=//*[@id="add_to_cart"]/button
Click Button xpath=//*[@id="add_to_cart"]/button

Clicar no botão "Proceed to checkout"


Wait Until Element Is Visible xpath=//*[@id="layer_cart"]//a[@title="Proceed to checkout"]
Click Element xpath=//*[@id="layer_cart"]//a[@title="Proceed to checkout"]
Adicionar o produto "${PRODUTO}" no carrinho
Digitar o nome do produto "${PRODUTO}" no campo de pesquisa
Clicar no botão pesquisar
Clicar no botão "Add to Cart" do produto
Clicar no botão "Proceed to checkout"

Excluir o produto do carrinho


Click Element xpath=//*[@class="cart_quantity_delete"]

Clicar em "Sign in"


Click Element xpath=//*[@id="header"]//*[@class="login"][contains(text(),"Sign in")]

Informar um e-mail válido


Wait Until Element Is Visible id=email_create
${EMAIL} Generate Random String
Input Text id=email_create ${EMAIL}@testerobot.com

Clicar em "Create an account"


Click Button id=SubmitCreate

Preencher os dados obrigatórios


Wait Until Element Is Visible xpath=//*[@id="account-creation_form"]//h3[contains(text(),"Your
personal information")]
Click Element id=id_gender2
Input Text id=customer_firstname May
Input Text id=customer_lastname Fernandes
Input Text id=passwd 123456
Input Text id=address1 Rua Framework, Bairro Robot
Input Text id=city Floripa
Set Focus To Element id=id_state
### No firefox ocorreu problema ao achar o listbox State, então coloquei um if para esperar
### pelo elemento quando for firefox
Run Keyword If '${BROWSER}'=='firefox' Wait Until Element Is Visible id=id_state
Select From List By Index id=id_state 9
Input Text id=postcode 12345
Input Text id=phone_mobile 99988877

Submeter cadastro
Click Button submitAccount

Conferir se o cadastro foi efetuado com sucesso


Wait Until Element Is Visible xpath=//*[@id="center_column"]/p
Element Text Should Be xpath=//*[@id="center_column"]/p
... Welcome to your account. Here you can manage all of your personal information and orders.
Element Text Should Be xpath=//*[@id="header"]/div[2]//div[1]/a/span May Fernandes

#### Conferências
Conferir se o produto "${PRODUTO}" foi listado no site
Wait Until Element Is Visible css=#center_column > h1
Title Should Be Search - My Store
Page Should Contain Image xpath=//*[@id="center_column"]//*[@src='${URL}/img/p/7/7-
home_default.jpg']
Page Should Contain Link xpath=//*[@id="center_column"]//a[@class="product-name"]
[contains(text(),"${PRODUTO}")]

Conferir mensagem "${MENSAGEM_ALERTA}"


Wait Until Element Is Visible xpath=//*[@id="center_column"]/p[@class='alert alert-warning']
Element Text Should Be xpath=//*[@id="center_column"]/p[@class='alert alert-warning'] $
{MENSAGEM_ALERTA}

Conferir se os produtos da sub-categoria "${SUBCATEGORIA}" foram mostrados na página


Page Should Contain Element xpath=//*[@id="center_column"]/h1/span[contains(text(),"Summer
Dresses")]
Page Should Contain Element
xpath=//*[@id="center_column"]/ul/li[1]/div/div[2]/h5/a[@title="Printed Summer Dress"]
Page Should Contain Element
xpath=//*[@id="center_column"]/ul/li[2]/div/div[2]/h5/a[@title="Printed Summer Dress"]
Page Should Contain Element
xpath=//*[@id="center_column"]/ul/li[3]/div/div[2]/h5/a[@title="Printed Chiffon Dress"]

Conferir se o produto "${PRODUTO}" foi adicionado no carrinho com seus devidos dados e valores
Wait Until Element Is Visible xpath=//*[@id="cart_title"][contains(text(),"Shopping-cart summary")]
Element Text Should Be xpath=//*[@class="cart_description"]/*[@class="product-name"]
Faded Short Sleeve T-shirts
Element Text Should Be xpath=//*[@class="cart_unit"]/*[@class="price"]/span $16.51
Element Text Should Be id=total_price $18.51

Conferir se o carrinho fica vazio


Wait Until Element Is Visible xpath=//*[@id="center_column"]/p[@class='alert alert-warning']
Element Text Should Be xpath=//*[@id="center_column"]/p[@class='alert alert-warning']
Your shopping cart is empty.
results/log.html
results/report.html
Locators
Trabalhando com variáveis:
BuiltIn
Library version: 3.2.2
Library scope: GLOBAL
Named arguments: supported
http://robotframework.org/robotframework/latest/libraries/BuiltIn.html

Configuração de variáveis
Configura a variável, e diz em qual escopo será utilizada

Set Global Variable


→ A variável "global" pode ser utilizada em todas as suítes em execução

Set Suite Variable


→ A variável "suite" pode ser utilizada somente nos testes da suíte em execução

Set Test Variable


→ A variável "test" pode ser utilizada somente nas todas as keywords do teste em execução

Set Variable
→ A variável "local" pode ser utilizada somente na keyword em execução
ExemplosEscoposVariaveis.robot
*** Settings ***
Documentation Exemplo de escopo de variáveis: GLOBAIS, SUITE, TESTE (test case) e LOCAL (keyword)
Library String

*** Variable ***


${GLOBAL_INSTANCIADA} Minha variável GLOBAL_INSTANCIADA foi instanciada para a suíte

*** Test Cases ***


Caso de teste de exemplo 01
Uma keyword qualquer 01
Uma keyword qualquer 02

Caso de teste de exemplo 02


Uma keyword qualquer 02
Uma keyword qualquer 03

Caso de teste de exemplo 03


Uma keyword qualquer 04

*** Keywords ***


Uma keyword qualquer 01
${GLOBAL_CRIADA_EM_TEMPO_EXECUCAO} Generate Random String
#A variável "global" pode ser utilizada em todas as suítes em execução
Set Global Variable ${GLOBAL_CRIADA_EM_TEMPO_EXECUCAO}
#A variável "suite" pode ser utilizada somente nos testes da suíte em execução
Set Suite Variable ${SUITE_CRIADA_EM_TEMPO_EXECUCAO} Variável da suíte
#A variável "test" pode ser utilizada somente nas todas as keywords do teste em execução
Set Test Variable ${TESTE_01} Variável do teste 01
Log ${TESTE_01}
#A variável "local" pode ser utilizada somente na keyword em execução
${LOCAL} Set Variable Variável local da keyword 01

Uma keyword qualquer 02


${LOCAL} Set Variable Variável local da keyword 02
Log ${LOCAL}
Log ${GLOBAL_INSTANCIADA} / ${GLOBAL_CRIADA_EM_TEMPO_EXECUCAO} / $
{SUITE_CRIADA_EM_TEMPO_EXECUCAO} / ${LOCAL}
# A keyword abaixo vai funcionar no Caso de Teste 01 e falhar no Case de Teste 02
Log ${TESTE_01}

Uma keyword qualquer 03


${LOCAL} Set Variable Variável local da keyword 03
Log ${LOCAL}
Log ${GLOBAL_INSTANCIADA} / ${GLOBAL_CRIADA_EM_TEMPO_EXECUCAO} / $
{SUITE_CRIADA_EM_TEMPO_EXECUCAO} / ${LOCAL}

Uma keyword qualquer 04


${LOCAL} Set Variable Variável local da keyword 04
Log ${LOCAL}
Log ${GLOBAL_INSTANCIADA} / ${GLOBAL_CRIADA_EM_TEMPO_EXECUCAO} / $
{SUITE_CRIADA_EM_TEMPO_EXECUCAO} / ${LOCAL}
Tipos de variáveis – Listas e dicionários

Variáveis simples, lista e dicionários


Tipo Uso
${SIMPLES} ${SIMPLES} Essa é uma variável simples
@{LISTA} @{LISTA} morango banana maça uva abacaxi
&{DICIONARIO} &{PESSOA} nome=May Fernandes email=mayfernandes@exp.com.br idade=28 sexo=feminino

Utilização das variáveis


Uso das variáveis
${SIMPLES} Essa é uma variável simples
${FRUTAS[2]} maça
${PESSOA.nome} May Fernandes
${PESSOA.email} mayfernandes@exemplo.com.br

ExemplosTiposVariaveis
*** Settings ***
Documentation Exemplo de tipos de variáveis: SIMPLES, LISTAS e DICIONÁRIOS
*** Variable ***
#Simples
${SIMPLES} Vamos ver os tipos de variáveis no robot!

#Tipo Lista
@{FRUTAS} morango banana maça uva abacaxi

#Tipo Dicionário
&{PESSOA} nome=May Fernandes email=mayfernandes@exemplo.com.br idade=28 sexo=feminino

*** Test Cases ***


Caso de teste de exemplo 01
Uma keyword qualquer 01

*** Keywords ***


Uma keyword qualquer 01
#Simples
Log ${SIMPLES}

#Lista
Log Essa tem que ser maça: ${FRUTAS[2]} e essa tem que ser morango: ${FRUTAS[0]}

#Dicionário
Log Nome: ${PESSOA.nome} e email: ${PESSOA.email}
Variáveis como argumentos de keywords

ExemplosArgumentos
*** Variable ***
&{PESSOA} nome=May Fernandes email=mayfernandes@exemplo.com.br idade=12
sexo=feminino

*** Test Cases ***


Caso de teste de exemplo 01
Uma keyword qualquer 01

*** Keywords ***


Uma keyword qualquer 01
Uma subkeyword com argumentos ${PESSOA.nome} ${PESSOA.email}
${MENSAGEM_ALERTA} Uma subkeyword com retorno ${PESSOA.nome} $
{PESSOA.idade}
Log ${MENSAGEM_ALERTA}

Uma subkeyword com argumentos


[Arguments] ${NOME_USUARIO} ${EMAIL_USUARIO}
Log Nome Usuário: ${NOME_USUARIO}
Log Email: ${EMAIL_USUARIO}

Uma subkeyword com retorno


[Arguments] ${NOME_USUARIO} ${IDADE_USUARIO}
${MENSAGEM} Set Variable If ${IDADE_USUARIO}<18 Não autorizado! O usuário $
{NOME_USUARIO} é menor de idade!
[Return] ${MENSAGEM}
Estruturas do Robot Framework
Logs
BuiltIn - Log
Library version: 3.2.2
Library scope: GLOBAL
Named arguments: supported

UsandoLogs.robot
*** Settings ***
Documentation Suíte para exemplificar o uso de LOGs nos testes
... Os LOGs são de grande utilidade, faça LOGs para analisar como seu teste está sendo executado nas entrelinhas
... Os LOGs te ajudam a achar falhas na automação dos seus testes
... Use LOGs sem moderação!!

Library SeleniumLibrary

*** Variable ***


@{FRUTAS} maça banana uva abacaxi

*** Test Case ***


Caso de teste exemplo 01
Usando LOG para mensagens
Usando LOG Console
Usando screen shots

*** Keywords ***


Usando LOG para mensagens
Log Minha mensagem de LOG
${VAR} Set Variable variável qualquer
Log Posso logar uma ${VAR} no meio de um log

Usando LOG Console


Log To Console Posso logar na saída do console
Log Many Posso logar minha lista completa @{FRUTAS}
Log Posso logar somente itens da minha lista ${FRUTAS[0]} - ${FRUTAS[1]}

Usando screen shots


Log Nos testes web, podemos logar Screenshot com a SeleniumLibrary
Open Browser http://www.robotizandotestes.blogspot.com.br firefox
Capture Page Screenshot nome_do_meuscreenshot.png
Close Browser
IF
BuiltIn - If

UsandoIFs.robot
*** Settings ***
Documentation Suíte para exemplificar o uso de IF nos testes
... O IF deve ser pouco utilizado, mas tem hora que não tem jeito
... e precisamos dele mesmo, então vamos ver como é!
... IF: use com moderação!

*** Variable ***


@{FRUTAS} maça banana uva abacaxi

*** Test Case ***


Caso de teste exemplo 01
Rodando uma keyword dada uma condição = true
Rodando uma keyword dada uma condição = false
Armazenando um valor em uma variável dada uma condição

*** Keywords ***


Rodando uma keyword dada uma condição = true
Run Keyword If '${FRUTAS[1]}' == 'banana' Log O item número 1 é a banana!!

Rodando uma keyword dada uma condição = false


Run Keyword Unless '${FRUTAS[1]}' == 'maça' Log O item número 1 não é uma maça!!

Armazenando um valor em uma variável dada uma condição


${VAR} Set Variable If '${FRUTAS[2]}' == 'uva' uva
Log Minha variável VAR é uma ${VAR}!!
Loop For

UsandoLoopsFor.robot
*** Settings ***
Documentation Vamos aprender a fazer LOOPS usando o Robot Framework!!

*** Variables ***


### Indíce da lista 0 1 2 3 4 5
@{MINHA_LISTA_DE_FRUTAS} maça abacaxi banana morango laranja uva

*** Test Case ***


Teste de REPEAT KEYWORD
[Documentation] Chama uma mesma keyword várias vezes
Usando Repeat keyword

Teste de FOR do tipo IN RANGE


[Documentation] Faz um loop dentro de um intervalo que você passar
Usando FOR IN RANGE

Teste de FOR do tipo IN


[Documentation] Faz um loop percorrendo a lista que você passar
Usando FOR IN

Teste de FOR do tipo IN ENUMERATE


[Documentation] Faz um loop percorrendo a lista que você passar e percorre o indíce da lista
Usando FOR IN ENUMERATE

Teste de Sair do FOR


[Documentation] Você controla quando o FOR deve se encerrar antes de terminar todos os LOOPS
Usando FOR IN com EXIT FOR LOOP IF

*** Keywords ***


Usando Repeat keyword
Log To Console ${\n}
Repeat Keyword 8x Log To Console Minha repetição da keyword!!!

Usando FOR IN RANGE


Log To Console ${\n}
FOR ${CONTADOR} IN RANGE 0 5
Log To Console Minha posição agora é: ${CONTADOR}
Log Minha posição agora é: ${CONTADOR}
END

Usando FOR IN
Log To Console ${\n}
FOR ${FRUTA} IN @{MINHA_LISTA_DE_FRUTAS}
Log To Console Minha fruta é: ${FRUTA}!
No Operation
END

Usando FOR IN ENUMERATE


Log To Console ${\n}
FOR ${INDICE} ${FRUTA} IN ENUMERATE @{MINHA_LISTA_DE_FRUTAS}
Log To Console Minha fruta é: ${INDICE} --> ${FRUTA}!
No Operation
END

Usando FOR IN com EXIT FOR LOOP IF


Log To Console ${\n}
FOR ${INDICE} ${FRUTA} IN ENUMERATE @{MINHA_LISTA_DE_FRUTAS}
Log To Console Minha fruta é: ${INDICE} --> ${FRUTA}!
Exit For Loop If '${FRUTA}'=='banana'
END
API testing com Robot Framework
API é um conjunto de rotinas e padrões de programação para acesso a um aplicativo de
software ou plataforma baseado na Web. A sigla API refere-se ao termo em inglês
"Application Programming Interface" que significa em tradução para o português "Interface
de Programação de Aplicativos".

RequestsLibrary
http://marketsquare.github.io/robotframework-requests/doc/RequestsLibrary.html

Collections

http://robotframework.org/robotframework/latest/libraries/Collections.html

Library version: 3.2.2


Library scope: GLOBAL
Named arguments: supported
Introduction
A test library providing keywords for handling lists and dictionaries.
Automação de Testes com Robot Framework Básico de APIs

Anexo: Acessando o conteúdo do Response

Através da variável que você armazenou o response, use:

01. Para pegar o STATUS CODE: ${RESPOSTA.status_code}

02. Para pegar o STATUS REASON: ${RESPOSTA.reason}

03. Para pegar os HEADERS: ${RESPOSTA.headers}

04. Para pegar o conteúdo do Body no seu formato original: ${RESPOSTA.content}

05. Para pegar o conteúdo do Body em texto: ${RESPOSTA.text}

06. Para pegar o conteúdo do Body em formato específico, exemplo JSON (supondo que o seu retorno é
JSON): ${RESPOSTA.json()}

API
Exemplo didático: https://fakerestapi.azurewebsites.net/index.html
Código Exemplo

TestCasesAPIBooks.robot
*** Settings ***
Documentation Documentação da API: https://fakerestapi.azurewebsites.net/swagger/ui/index#!/Books
Resource ResourceAPI.robot
Suite Setup Conectar a minha API

*** Test Case ***


Buscar a listagem de todos os livros (GET em todos os livros)
Requisitar todos os livros
Conferir o status code 200
Conferir o reason OK
Conferir se retorna uma lista com "200" livros

Buscar um livro específico (GET em um livro específico)


Requisitar o livro "15"
Conferir o status code 200
Conferir o reason OK
Conferir se retorna todos os dados corretos do livro 15

Cadastrar um novo livro (POST)


Cadastrar um novo livro
# - Conferir se retorna todos os dados cadastrados para o novo livro

#TO-DO: Alterar um livro (PUT)


# - Conferir se retorna todos os dados alterados do livro 150
#TO-DO: Deletar um livro (DELETE)
# - Conferir se deleta o livro 200 (o response body deve ser vazio)

ResourceAPI.robot
*** Settings ***
Documentation Documentação da API: https://fakerestapi.azurewebsites.net/swagger/ui/index#!/Books
Library RequestsLibrary
Library Collections

*** Variable ***


${URL_API} https://fakerestapi.azurewebsites.net/api/
&{BOOK_15} ID=15
... Title=Book 15
... PageCount=1500

*** Keywords ***


####SETUP E TEARDOWNS
Conectar a minha API
Create Session fakeAPI ${URL_API}
${HEADERS} Create Dictionary content-type=application/json
Set Suite Variable ${HEADERS}

#### Ações
Requisitar todos os livros
${RESPOSTA} Get Request fakeAPI Books
Log ${RESPOSTA.text}
Set Test Variable ${RESPOSTA}

Requisitar o livro "${ID_LIVRO}"


${RESPOSTA} Get Request fakeAPI Books/${ID_LIVRO}
Log ${RESPOSTA.text}
Set Test Variable ${RESPOSTA}

Cadastrar um novo livro


${RESPOSTA} Post Request fakeAPI Books
... data={"ID": ${BOOK_201.ID},"Title": "${BOOK_201.Title}","Description": "$
{BOOK_201.Description}","PageCount": ${BOOK_201.PageCount},"Excerpt": "$
{BOOK_201.Excerpt}","PublishDate": "${BOOK_201.PublishDate}"}
... headers=${HEADERS}
Log ${RESPOSTA.text}
Set Test Variable ${RESPOSTA}

#### Conferências
Conferir o status code
[Arguments] ${STATUSCODE_DESEJADO}
Should Be Equal As Strings ${RESPOSTA.status_code} ${STATUSCODE_DESEJADO}

Conferir o reason
[Arguments] ${REASON_DESEJADO}
Should Be Equal As Strings ${RESPOSTA.reason} ${REASON_DESEJADO}

Conferir se retorna uma lista com "${QTDE_LIVROS}" livros


Length Should Be ${RESPOSTA.json()} ${QTDE_LIVROS}

Conferir se retorna todos os dados corretos do livro 15


Dictionary Should Contain Item ${RESPOSTA.json()} ID ${BOOK_15.ID}
Dictionary Should Contain Item ${RESPOSTA.json()} Title ${BOOK_15.Title}
Dictionary Should Contain Item ${RESPOSTA.json()} PageCount ${BOOK_15.PageCount}
Should Not Be Empty ${RESPOSTA.json()["Description"]}
Should Not Be Empty ${RESPOSTA.json()["Excerpt"]}
Should Not Be Empty ${RESPOSTA.json()["PublishDate"]}
Robot Framework Avançado
BuiltIn Avançado
Loops: Nova sintaxe do FOR e outras variações do FOR
*** Test Cases ***
Teste do novo formato do FOR
Velho formato do FOR de listas
Novo formato do FOR de listas

Teste de FOR aninhado


Cria cadastro de produtos (FOR aninhado)

Teste FOR usando várias váriaveis


Cria dicionário de traduções

Teste FOR com numeração da lista


For com numeração

Teste mais opções IN RANGE


Tradicional
Apenas quantidade de laços informada (limite superior)
Aritmético
Intervalos específicos

*** Keywords ***


# ## NOVO FORMATO
Velho formato do FOR de listas
:FOR ${animal} IN gato cachorro cavalo
\ Log O animal desse laço é: ${animal}!
\ Log Vamos para o próximo animal da lista...

Novo formato do FOR de listas


FOR ${animal} IN gato cachorro cavalo
Log O animal desse laço é: ${animal}!
Log Vamos para o próximo animal da lista...
END

### FOR DENTRO DE FOR (Loop aninhado)


### Não é possível fazer aninhamentos diretamente
### O recomendado é criar uma keyword que chama a outra no laço
Cria cadastro de produtos (FOR aninhado)
FOR ${produto} IN baby look camiseta blusa
Imprime tamanhos para o produto ${produto}
END

Imprime tamanhos para o produto


[Arguments] ${produto}
FOR ${tamanho} IN P M G
Log Produto: ${produto} - Tam: ${tamanho}
END

### Usando várias variáveis


Cria dicionário de traduções
FOR ${index} ${english} ${finnish} ${portugues} IN
... 1 cat kissa gato
... 2 dog koira cachorro
... 3 horse hevonen cavalo
Log Animal ${index}:\nEm inglês: ${english}\nEm finlandês: ${finnish}\nEm português: $
{portugues}
END

### FOR com posicionamento na Lista


For com numeração
FOR ${index} ${item} IN ENUMERATE P M G GG XG XXG
Log Item da lista: ${item} - Posição do item na lista: ${index}
END

### FOR mais opções IN RANGE


Tradicional
[Documentation] Percorre de 1 até 10
FOR ${index} IN RANGE 1 11
Log ${index}
END

Apenas quantidade de laços informada (limite superior)


[Documentation] Percorre de 0 até 9
FOR ${index} IN RANGE 10
Log ${index}
END

Aritmético
[Documentation] Percorre de 0 até 5
${var} Set Variable ${5}
FOR ${index} IN RANGE ${var} + 1
Log ${index}
END

Intervalos específicos
[Documentation] Percorre de 0 até 30, pulando de 5 em 5
FOR ${index} IN RANGE 0 31 5
Log ${index}
END

Controles: Teardowns Avançados


*** Settings ***
Suite Teardown Controlando o teardown da suite
Test Teardown Controlando o teardown do teste

*** Test Cases ***


#### SUCESSO
Exemplo 01: Teste lidando com Suite e Test Teardowns
Essa keyword fará o teste passar, não executando as keywords abaixo!
Esse keyword vai passar sozinha!
Essa keyword fará o teste falhar, não executando as keywords abaixo!

Exemplo 02: Teste lidando com Suite e Test Teardowns


Esse keyword vai passar sozinha!
Esse keyword vai passar sozinha!
Esse aqui também vai passar com uma condição e vai parar de executar as keywords abaixo!
Esse keyword vai passar sozinha!
Esse keyword vai passar sozinha!

#### FALHAS
Exemplo 03: Teste lidando com Suite e Test Teardowns
Esse keyword vai passar sozinha!
Essa keyword fará o teste falhar, não executando as keywords abaixo!
Esse keyword vai passar sozinha!
Esse keyword vai falhar sozinha!

Exemplo 04: Teste lidando com Suite e Test Teardowns


Esse keyword vai falhar sozinha!

*** Keywords ***


### SUITE TEARDOWNS
Controlando o teardown da suite
Run Keyword If All Tests Passed Log Todos os testes passaram, posso enviar um e-mail, por exemplo!
Run Keyword If Any Tests Failed Log Alguns testes falharam, posso enviar um e-mail, por exemplo!

### TEST TEARDOWNS


Controlando o teardown do teste
Run Keyword If Test Passed Log Meu teste passou, não preciso apagar dados do banco de dados, por exemplo!
Run Keyword If Test Failed Log Meu teste falhou, posso imprimir ou manter uma informação no banco de dados
para analisar o erro, por exemplo!

### Controlando o STATUS


Essa keyword fará o teste passar, não executando as keywords abaixo!
Pass Execution message=Estou forçando meu teste a passar com sucesso!

Essa keyword fará o teste falhar, não executando as keywords abaixo!


Fail msg=Estou forçando meu teste a falhar!

Esse aqui também vai passar com uma condição e vai parar de executar as keywords abaixo!
${STATUS} Run Keyword And Return Status Should Be True "May" == "May"
Log ${STATUS}
Pass Execution If ${STATUS} message=May é igual a May, então passou!!

Esse keyword vai passar sozinha!


Should Be True "May" == "May"

Esse keyword vai falhar sozinha!


Should Be True "May" == "João"
Controles: Lidando com falhas previstas
*** Test Cases ***
#### FALHAS PREVISTAS
Exemplo 01: Teste lidando com falhas previstas
Essa keyword vai falhar, mas vou ignorar (a suíte irá passar)!
Essa keyword encerra a execução da suíte! Não pare, por favor!
Essa keyword vai falhar, mas é uma falha que deve acontecer para meu teste ser considerado OK!
Essa keyword vai falhar, não vou ignorar (a suíte irá falhar), mas vou continuar a execução!
Essa keyword encerra a execução da suíte! Para tudo!

Exemplo 02: Teste de continuação da suíte


No Operation

Exemplo 03: Teste de continuação da suíte


No Operation

*** Keywords ***


Essa keyword vai falhar, mas vou ignorar (a suíte irá passar)!
Run Keyword And Ignore Error Should Be True "May" == "João"
Log Continuo a execução!!

Essa keyword vai falhar, mas é uma falha que deve acontecer para meu teste ser considerado OK!
Run Keyword And Expect Error '"May" == "João"' should be true. Should Be True "May" == "João"

Essa keyword vai falhar, não vou ignorar (a suíte irá falhar), mas vou continuar a execução!
Run Keyword And Continue On Failure Should Be True "May" == "João"
Log Continuo a execução 1!!
Log Continuo a execução 2!!
Log Continuo a execução 3!!

Essa keyword encerra a execução da suíte!


[Arguments] ${STOP}
Run Keyword if "${STOP}"=="Para tudo!" Fatal Error msg=Para tudo, não adianta continuar com essa falha aqui!!!
Controles: Esperas e Timeout do teste
*** Settings ***
Library DateTime
Test Teardown Teardown do meu teste
Test Timeout 1 seconds

*** Test Cases ***


#### TIMEOUT
Exemplo 01: Teste lidando com o timeout do teste
Simular espera do teste 2s

#### ESPERANDO UMA KEYWORD


Exemplo 02: Teste de espera
[Timeout] 2 minutes
Esperar uma keyword obter sucesso!

*** Keywords ***


Teardown do meu teste
Run Keyword If Timeout Occurred Log Esse teste demorou demais, possível problema de performance!

Simular espera do teste


[Arguments] ${TEMPO}
Sleep ${TEMPO}

Esperar uma keyword obter sucesso!


Wait Until Keyword Succeeds 60x 1 seconds Essa keyword só passa se estivermos no segundo 15!

Essa keyword só passa se estivermos no segundo 15!


${HORA_ATUAL} Get Current Date
${HORA_ATUAL} Convert Date ${HORA_ATUAL} datetime
Log Hora atual: ${HORA_ATUAL.hour}\nMinuto atual: ${HORA_ATUAL.minute}\nSegundo atual: $
{HORA_ATUAL.second}
Run Keyword If "${HORA_ATUAL.second}"!="15" Fail msg=Ainda não estamos no segundo 15!!
Argumentos: Argumentos avançados em keywords
*** Test Cases ***
Relembrando argumentos posicionais x nomeados
Teste de Argumentos Básico 1 2 3 4
Teste de Argumentos Básico arg4=1 arg3=2 arg2=3 arg1=4

Teste de Argumentos Opcionais


Passando argumentos opcionais como parâmetro nome=Mayara ultimo_nome=Fernandes
Passando argumentos opcionais como parâmetro nome=Mayara nome_do_meio=Ribeiro ultimo_nome=Fernandes

Criando lista e dicionário via parâmetro


[Documentation] No Python é conhecido como "kwargs"
Teste Criando um Dicionário cwd=/home/user shell=True env=False
Teste Criando uma Lista may ribeiro fernandes
Teste Criando os dois may ribeiro fernandes shell=True env=False

*** Keywords ***


Teste de Argumentos Básico
[Arguments] ${arg1} ${arg2} ${arg3} ${arg4}
Log ${arg1} - ${arg2} - ${arg3} - ${arg4}

Passando argumentos opcionais como parâmetro


### Parâmetros OPCIONAIS ficam por último
### O Robot é case-sensitive, se o parâmetro está minúsculo, lá na keyqord tem que estar também!
[Arguments] ${nome} ${ultimo_nome} ${nome_do_meio}=silva
Log Nome completo: ${nome} ${nome_do_meio} ${ultimo_nome}

Teste Criando um Dicionário


### REGRA: Somente um dicionário pode ser criado
[Arguments] &{meu_dicionario}
Log ${meu_dicionario}

Teste Criando uma Lista


### REGRA: Somente uma lista pode ser criada
[Arguments] @{minha_lista}
Log ${minha_lista}

Teste Criando os dois


### REGRA: a lista vem primeiro
[Arguments] @{minha_lista} &{meu_dicionario}
Log ${minha_lista}\n${meu_dicionario}
Evaluate

Avalia a expressão fornecida em Python e retorna o resultado.


Libraries Auxiliares
Library DateTime

Library OperatingSystem

Library String

Library Process

Pré-Requisito: Instalando um cliente de Banco de Dados

Library DatabaseLibrary

Conclusão: Libraries Auxiliares

Menções Honrosas
Libraries Customizadas
Estrutura dos diretórios

GeradorHash.py
import hashlib

def gerar_hash(conteudo):

hash_conteudo = hashlib.sha256(str.encode(conteudo)).hexdigest()
print("Conteúdo: {}".format(conteudo))
print("Hash gerado: {}".format(hash_conteudo))

return hash_conteudo

def gerar_hash_arquivo(filename):

print("Arquivo: {}".format(filename))
h = hashlib.sha256()

with open(filename, 'rb') as file:


chunk = 0
while chunk != b'':
chunk = file.read(1024)
h.update(chunk)
print("Hash gerado: {}".format(h.hexdigest()))

return h.hexdigest()

myLibrary.robot
*** Settings ***
Library ./Libraries/HashLibrary/geradorHash.py

*** Test Cases ***


Teste de conversão de string para HASH sha256
Converter "Estou ficando ninja em Robot Framework!!" para sha256

Teste de conversão de arquivo para HASH sha256


Converter o arquivo "arquivo_PDF.pdf" para sha256

*** Keywords ***


Converter "${CONTEUDO}" para sha256
${CONTEUDO_HASH} Gerar Hash ${CONTEUDO}
Log ${CONTEUDO_HASH}

Converter o arquivo "${FILE}" para sha256


${CONTEUDO_HASH} Gerar Hash Arquivo ./${FILE}
Log ${CONTEUDO_HASH}

Você também pode gostar