A apresentação buscar demostrar o uso da ferramenta Sikuli que realiza testes baseados em imagens expostas na tela principalmente para aplicações Desktop, juntamente com sua aplicação através da linguagem Java.
1. AUTOMAÇÃO DE TESTES FUNCIONAIS
ORIENTADO A IMAGEM - SIKULI
Vanilton Pinheiro
vanilton18@gmail.com
1
2. • Profissional Pós-graduando em Engenharia de Software com Ênfase em
Desenvolvimento Web.
• Bacharel em Ciência da Computação.
• Experiência de 2 anos em Teste de Software através de Planejamento de
teste, especificação, execução e geração de resultados de teste em
arquiteturas Web, Móveis e Desktop.
• Conhecimento em metodologias ágeis e projetos de software ágeis.
Aplicação de técnicas de teste Caixa Preta e Caixa Branca.
• Experiência no uso de linguagem Java e ferramentas como Cucumber-JVM,
JUnit, Selenium Webdriver, Robotium, Bugzilla, TestLink e Sikuli.
• Autor colaborador no Relato de experiência "Especificação e Automação
Colaborativas de Testes utilizando a técnica BDD" publicado no SBQS 2013.
Apresentação
Contatos:
vanilton18@gmail.com
Vanilton Pinheiro
br.linkedin.com/in/vaniltonpinheiro
2
3. Tópicos
• Introdução
• História Sikuli
• Conhecendo Sikuli IDE
• Instalação e Configuração
• Interface, Menus e Comandos
• Interações, condições e funções
• Limitações
• Exemplos
• Sikuli com Biblioteca Java
• Criação de Projeto Java utilizando Sikuli
• Casos de teste funcionais com Sikuli script e Junit 4
3
4. Introdução
• O que é?
• Testes funcionais que permitem avaliar as funcionalidades desenvolvidas a
fim de verificar se estão de acordo com as necessidades do cliente.
• Para que serve?
• Automatizar a realização de tarefas que envolvem a leitura de dados da tela,
de uma aplicação ou mesmo do sistema operacional. Possui diversos
elementos que podem ser lidos e utilizados para automatizar a execução de
tarefas.
• Como aplicar?
• Utilizando ferramentas específicas que fazem análise de imagem para
executar as ações de um usuário. Ex: Sikuli.
4
5. Introdução
• Quando utilizar?
• “A automação é útil quando: os resultados podem ser verificados por uma máquina, sem
julgamento humano ou esperteza necessária, ou para casos onde os testes são repetitivos,
caso contrário, o teste manual é a melhor abordagem.” James Whittaker - How Google
Tests Software ( 2012)
5
6. • O sistema foi projetado sob a licença MIT pelo professor
Rob Miller, estudante de graduação Tsung-Hsiang Chang,
e Tom Yeh da Universidade de Maryland.
• Sikuli tem este nome, pois foi baseado uma palavra da
língua dos Índios Huichol do México que significa “Olho de
Deus", ou seja, o poder de ver e entender as coisas
desconhecidas.
• O Sikuli foi desenvolvido para atuar em um ambiente de
script baseado em captura de tela que pode sinalizar um
novo paradigma de programação que utiliza a interface
gráfica como uma espécie de API.
História Sikuli
Rob Miller
Tom Yeh
6
7. Lema
• Tom Yeh define o Sikuli com o lema “O que você vê é o que você codifica”.
Baseado numa metáfora GUI de “O que você vê é o que obtém“.
7
8. Conhecendo o Sikuli IDE - (Integrated
Development Environment)
O Sikuli possui dois componentes:
•Sikuli IDE: uma ambiente de
desenvolvimento integrado (IDE) que
possibilita a escrita de scripts visuais
utilizando screenshots;
•Sikuli Script: uma API
de scripts visuais para Jython, é por
meio dele que os scripts criados no
Sikuli IDE, são processados. 8
9. 1. Possuir instalado o Java x86/x64 versão 6 ou 7.
2. Estar conectado a internet.
3. Realizar o download do aplicativo em:
https://launchpad.net/sikuli/+download
4. Criar uma pasta chamada Sikuli.
5. Copiar o arquivo de instalação para a pasta criada.
6. Executar o arquivo: sikuli-setup.jar e aguardar a geração de
runSetup.cmd
7. Executar o arquivo runSetup.cmd
8. Marcar a primeira opção e avançar.
Instalação e Configuração
9
10. 9. Acessar as variáveis de ambiente do Windows.
10. Variáveis do sistema
– Path
9. Adicionar ao final o caminho da pasta libs do Sikuli.
10. Exemplo: C:Sikulilibs
Pronto!
Instalação e Configuração
10
16. Comandos Sikuli IDE – Ações do Mouse
• click(imagem)
• Clica numa dada imagem com o botão
esquerdo do mouse.
• rightClick(imagem)
• Clica numa dada imagem com o botão direito
do mouse.
• doubleClick(imagem)
• Realiza a ação de dois cliques numa dada
imagem com o mouse.
• hover(imagem)
• Cobre uma dada imagem com o ponteiro do
mouse.
• dragDrop(img1, img2)
– Arrasta o objeto definido na img1
para a área definida na img2.
16
17. Comandos Sikuli IDE – Ações do Teclado
• type(imagem,texto)
– Digita o texto passado na área definida na imagem.
• paste(imagem,texto)
– Cola o texto passado no parâmetro na área definida na imagem.
• type(texto)
– Digita o texto passado onde está o foco do cursor do mouse.
• paste(texto)
– Cola o texto passado no parâmetro onde está o foco do cursor do mouse.
• type(Key.ENTER)
– Realiza a ação da tecla ENTER em um dado local com foco.
• type(“d”, Key.META)
– Realiza a ação em conjunto das teclas “Windows + d”. (Atalho do Windows que
minimiza todas as janelas)
17
18. Comandos Sikuli IDE – Funções de Localização
• exists(imagem)
• essa função verifica se é possível encontrar a
imagem que está como parâmetro. Se for
possível, uma ação pode ser realizada, caso
contrário, poderá ser executada outra ação de
preferência.
• wait(imagem, Tempo de espera)
• essa função recebe como parâmetro uma
imagem e, opcionalmente, pode receber
também um tempo máximo de espera. É
responsável por esperar que a imagem
parâmetro seja encontrada, para somente
depois continuar com suas ações.
• waitVanish(imagem, Tempo de
espera)
– tem o objetivo oposto da função
wait(Imagem, tempo de espera). Essa
função espera a imagem desaparecer
para continuar uma ação.
• find(imagem)
– função que permite procurar uma única
imagem que pareça com a que está no
parâmetro. A Imagem em parâmetro
pode ter uma pequena diferença com
alguma imagem existente que, mesmo
assim, a função a irá encontrar.
18
19. Comandos Sikuli IDE – Funções de Localização
• findAll(imagem)
• mesmo objetivo da função find(Imagem), só
que procura em vários pontos diferentes por
uma imagem igual à que foi passada como
parâmetro. Essa função pode considerar uma
porcentagem maior de diferença entre a
imagem parâmetro e a encontrada para
considerá-la como válida.
19
20. Comandos Sikuli IDE – Funções observatórias de eventos
• onAppear(Imagem, Handler)
• essa função fica aguardando para ser executada somente quando aparecer uma área igual à
área que está representada pela figura em parâmetro. O parâmetro Handler pode ser uma nova
função que somente é executada quando a imagem do parâmetro aparecer na tela.
• observe()
• função responsável por observar determinada área a fim de permitir ao criador do script tomar
alguma decisão.
• onChange(handler)
• essa função tem por objetivo realizar uma determinada tarefa sempre que uma modificação for
realizada em alguma região pré-definida.
• onVanish(Imagem, Handler)
• mesmo objetivo da função onAppear(Imagem, Handler), com a diferença de que esta espera a
área correspondente à imagem parâmetro sumir para depois executar uma ação qualquer.
20
21. Comandos Sikuli IDE – Outras Funções
• App.open(path)
• essa função abri uma aplicação passando como
parâmetro seu caminho.
• popup(‘texto’)
• essa função quando utilizada retorna um popup na
tela, e a continuação das demais instruções fica
pausada enquanto não finalizar o popup.
• print(‘texto’)
• essa função quando utilizada exibi no console da
Sikuli IDE o texto passado como parâmetro.
21
22. Interações Condições e Funções Sikuli IDE
• def NomeDaFuncao():
• Comando1
• Comando 2..
Chamada da função NomedaFuncao()
• for x in range(vInicial, vFinal):
• Comando 1
• Comando 2..
• while (find(), exists()): # Devem retornar um boolean
• Comando 1
• Comando 2...
• If(exists(),find()): # Devem retornar um boolean
• Comando1
• Comando 2
• Else:
• Comando 1
• Comando 2
22
23. Limitações
• Necessidade de ambiente estar visível na tela.
• Focus nas aplicações a serem testadas.
• Integração de testes
• Resoluções de tela
• Similaridade
23
26. Executando projetos via linha de comando
• Com o projeto salvo é possível executar via linha de comando o
Projeto.sikuli ou o projeto exportado para .skl.
• Opções
1.Utilizando o sikuli-script.jar
• java -jar %SIKULI_HOME%sikuli-script.jar –r path-to-your-scriptyourScript.sikuli
1.Utilizando a chamada d Sikuli IDE
• %SIKULI_HOME%RunIDE.cmd -r path-to-your-scriptyourScript.skl
26
31. Exemplo 3 – Similaridade
A operação de localização findAll() retorna um objeto iterator que pode ser usado para buscar todas as correspondências encontradas como objetos Matches um por um. Uma
referência para o iterator é armazenado na respectiva região e pode ser acessado usando getLastMatches().
31
32. Sikuli com Biblioteca Java
• Para utilizar o Sikuli no Java iremos utilizar a biblioteca sikuli-script.jar que
retiramos do setup de instalação da ferramenta. Esta biblioteca possui todos
os métodos utilizados para realizar os comandos feitos na própria IDE do
Sikuli.
32
33. Eclipse IDE (caso já possua na máquina não há necessidade de baixar)
https://www.eclipse.org/downloads/
Instalação e Configuração Eclipse
33
34. Criação de Projeto Java com Sikuli
1. Utilizando a IDE Eclipse Criar um Novo
Projeto Java.
34
35. Criação de Projeto Java com Sikuli
2. Definir o nome para o Projeto.
3. Na seção JRE utilizar a opção de
compilação através do JDK.
4. Avançar a tela no botão “Next”.
35
36. Criação de Projeto Java com Sikuli
5. Acessar a Aba Libraries.
6. Clicar na opção “Add External JARs”
7. Selecionar o sikuli-script.jar.
36
38. Criação de Projeto Java com Sikuli
9. Acessar a tela de criação de uma
nova classe java.
38
39. Criação de Projeto Java com Sikuli
10. Preencher as informações de
Package, Name e marcar a opção
para método main.
11. Clicar em Finish.
39
40. Importando e instanciando Objeto da classe
Screen
OBS: Em caso de exibir um erro após a execução referente ao caminho para as libs que contêm as dll’s usadas pelo Sikuli, definir o
caminho onde as mesmas estão localizadas na variável de ambiente PATH.
Ex: Unidade:WorkspaceNomeProjetolibslibs
Reiniciar a IDE Eclipse.
40