Baixe o app para aproveitar ainda mais
Prévia do material em texto
Testes de interface por robô Apresentação O teste de software automatizado é uma etapa muito importante no processo de desenvolvimento. As atividades de teste têm como objetivo descobrir erros e defeitos de aplicações, a fim de produzir produtos confiáveis para o mercado. Para isso, a equipe de garantia de qualidade deve realizar testes manuais ou de automação adequados. Nesta Unidade de Aprendizagem, você vai estudar a utilização do Robot Framework para desenvolver scripts de automação usando o Selenium para testar a interface gráfica do usuário (GUI). Vai aprender a personalizar seus scripts automatizados e também entender como o Robot Framework realiza testes de automação. Bons estudos. Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados: Conceituar testes de interface por robô com Selenium.• Identificar o teste de interface por robô com Selenium por meio de suas características.• Prever a aplicação do teste de interface por robô com Selenium.• Desafio O teste de aplicativos da web apresenta nova gama de desafios para testes em comparação com a testagem de aplicativos de desktop. Atualmente, são utilizados sistemas dinâmicos, que consistem em um back-end e um front-end e são geralmente heterogêneos, ou seja, são compostos de vários componentes desenvolvidos em diferentes linguagens de programação. Os aplicativos da web geralmente suportam vários usuários e operam em um ambiente muito mais aberto do que os aplicativos de desktop. Você é analista de testes e foi designado para implementar a automação de testes de uma aplicação web. Essa aplicação tem uma enorme quantidade de possíveis interações com a interface do usuário (GUI), pois cada sequência de comandos da GUI pode resultar em um estado diferente. Além disso, um comando da GUI pode precisar ser avaliado em todos esses estados, o que resulta em um grande número de permutações de entrada. Você foi recomendado a realizar o trabalho com a automação desses testes utilizando Selenium com Robot Framework, conforme imagem abaixo: O Selenium é um conjunto de quatro diferentes ferramentas de software. Cada ferramenta tem uma abordagem diferente no suporte à automação de testes baseado na web. I. Selenium IDE (Integrated Development Environment) II. Selenium RC (Remote Control) III. Selenium WebDriver IV. Selenium Grid Com a finalidade de compreender a utilização das ferramentas para automação de testes e concluir a tarefa que lhe foi designada na empresa, responda a questões a seguir: a) Qual a diferença entre cada um dos componentes do Selenium? b) Considerando a resposta da questão anterior, qual é a ferramenta mais indicada para ser utilizada neste cenário? Justifique sua resposta. Infográfico O Selenium é geralmente a primeira ferramenta de automação de testes a ser mencionada, especialmente para testes baseados na web. Essa popularidade tem muita relação com o fato de ser de código aberto, livre para começar a usar e experimentar e por ter compatibilidade com quase todos os navegadores existentes. Para criação rápida de script de prova de conceito, o Selenium tem um ambiente de desenvolvimento integrado (IDE) que suporta ações de gravação na interface do usuário e, em seguida, as reproduz. No Infográfico, você vai ver o detalhamento de cada umas das dimensões para desenvolvimento de testes automatizados usando o Selenium. Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. https://statics-marketplace.plataforma.grupoa.education/sagah/26313ca2-c3a6-49b6-ad9d-1848cab14266/2c4728cc-c355-46e0-b186-8a8cc385ebca.png Conteúdo do livro A automação de testes exige o design, a criação e a manutenção de diferentes níveis de testes, incluindo o ambiente em que os testes serão executados, as ferramentas usadas, as bibliotecas de código que fornecem funcionalidade, os scripts e as cadeias de teste, as estruturas de registro e os relatórios de resultados do teste. Dependendo das ferramentas usadas, monitorar e controlar a execução dos testes pode ser uma combinação de processos manuais e automatizados. No capítulo Testes de interface por robô, da obra Testes de software e gerência de configuração, que é base teórica desta Unidade de Aprendizagem, você vai saber mais detalhes sobre Robot Framework, que é uma estrutura de automação de teste genérica para testes de aceitação e desenvolvimento orientada a testes de aceitação (ATDD) e suas bibliotecas de suporte. Boa leitura. TESTES DE SOFTWARE E GERÊNCIA DE CONFIGURAÇÃO Karine Birnfeld Testes de interface por robô Objetivos de aprendizagem Ao final deste texto, você deve apresentar os seguintes aprendizados: Conceituar testes de interface por robô com Selenium. Identificar o teste de interface por robô com Selenium por meio de suas características. Aplicar o teste de interface por robô com Selenium. Introdução Automatizar testes é uma forma de exercitar e verificar o software de- senvolvido sem que haja participação humana. A integração das ferra- mentas de automatização de testes nos processos de desenvolvimento de software contribui para que o ciclo de vida do projeto seja reduzido, assim como o seu custo. Além disso, essas ferramentas apresentam maior eficácia. Dessa forma, elas encontram maior quantidade de falhas e erros no sistema em desenvolvimento. Com a identificação de mais erros e a sua correção, a chance de a aplicação ter falhas ao ser entregue ao cliente é reduzida (MESZAROS, 2007). Com o objetivo de apoiar a estratégia de automação de testes, neste capítulo, você vai estudar a implantação de testes automatizados com Selenium. Testes com Selenium O Robot Framework é um framework de código aberto para automação de testes. Ele é usado para testes de aceitação e para desenvolvimento orientado a testes de aceitação (Acceptance Test-Driven Development — ATDD). O Robot Framework tem uma sintaxe de dados de teste tabular e usa a abordagem de teste orientada por palavras-chave. Como a estrutura do robô segue uma arquitetura modular, a capacidade de teste pode ser estendida por bibliotecas de teste programadas com Python ou Java. Esse framework é considerado uma estrutura de automação de testes de terceira geração. A configuração dos dados de teste da estrutura do robô não requer necessariamente programação ou script, mas apenas alteração de dados. O conceito de teste orientado por palavra-chave facilita a criação de dados de teste que direcionam a execução do teste. A estrutura central do Robot Framework é implementada com Python, tornando-o independente do sistema operacional e do aplicativo. Ele também é executado em Jython (JVM) e IronPython (.NET). A possibilidade de executá- -lo em qualquer sistema operacional que suporta Python o torna altamente flexível (ROBOT FRAMEWORK, 2019). O Robot Framework processa os dados de teste quando é iniciado. A estrutura não precisa conhecer o sistema de destino, mas utiliza bibliotecas de teste para interagir com ele. As bibliotecas usam interfaces de aplicativos ou ferramentas de teste separadas como drivers. Como você pode ver na Figura 1, a estrutura real se baseia nos dados de teste criados e, em seguida, utiliza os dados com a ajuda de diferentes biblio- tecas. As bibliotecas, em seguida, usam ferramentas e interfaces para levar o sistema em teste a executar várias funções. Figura 1. Arquitetura Robot Framework. Fonte: Robot Framework Foundation (c2016, documento on-line). Test Data Robot Framework Test Libraries Test Tools Test library API Test data syntax Application interfaces System Under Test Por sua vez, o Selenium é um conjunto de ferramentas que permite auto- matizar testes de diferentes formas. Ele faz isso por meio de um conjunto de Testes de interface por robô2 funções que possibilitam a localização de elementos de interface do usuário e a comparação entre os resultados previstos para o teste e o comportamento real daaplicação (SELENIUMHQ, 2013). As estratégias de automação simulam o usuário interagindo com o sistema em desenvolvimento. Em geral, os profissionais de testes aprendem a usar duas estratégias para automatizar os testes funcionais de interface com o usuário: codificar scripts de testes e utilizar ferramentas de captura/reprodução para gravar as ações do usuário com a aplicação. Gravação O Selenium IDE (Integrated Development Environment) é uma ferramenta para a construção de scripts de teste por meio de um plug-in para o navegador Firefox, que fornece uma interface amigável para o desenvolvimento dos testes automatizados. O Selenium IDE usa uma abordagem record-and-playback, capturando as ações executadas pelo testador em um script que permite re- produzir o caso de teste posteriormente. Com os passos gravados, é possível reproduzi-los novamente em testes futuros e verifi car se as funcionalidades da aplicação estão funcionando corretamente. Entre as vantagens da ferramenta, você pode considerar a facilidade de uso, já que ela não exige um nível alto de conhecimento técnico ou experiência (KOVALENKO, 2014). Além disso, o Selenium IDE é uma ferramenta de uso rápido e intuitivo: basta você acionar o botão de gravar e utilizar a aplicação que deseja testar como um usuário comum; a ferramenta identificará os elementos acessados na interface e gravará as suas ações. Já as desvantagens ficam por conta da inflexibilidade dos testes criados, pois existe a limitação de usar apenas o Firefox como browser para gravar e reproduzir os testes. Existe também a dificuldade de esses testes automatizados se adaptarem às mudanças. A técnica de gravar e reproduzir as ações do usuário é afe- tada quando ocorrem mudanças na interface ou no código do sistema. Essa dificuldade de se adaptar às mudanças compromete o reuso desses testes automatizados gravados. Segundo Kovalenko (2014), de forma geral, é baixo o nível de reuso dos testes funcionais de interface com o usuário automatizados via gravação. Observe, na Figura 2, a seguir, os passos para a criação dos scripts com o Selenium IDE. 3Testes de interface por robô Figura 2. Fluxo de gravação com a utilização do Selenium IDE. A seguir, veja a descrição de cada um dos passos mostrados na Figura 2. Capturar os passos do caso de teste: o testador interage diretamente com o sistema, seguindo um caso de teste específico. Para cada ação feita pelo testador, a ferramenta cria um passo no script de testes. Definir critérios de validação: para validar as condições de saída do caso de teste, o Selenium IDE fornece vários mecanismos que permitem ao testador verificar o resultado da execução. Baseando- -se nos critérios do caso de teste, o testador seleciona determinado elemento da página e faz asserções para verificar se os valores presentes naqueles componentes atendem aos resultados esperados para o caso de teste. Executar script: a execução do script de teste serve para verificar se o script gerado capturou todos os passos do caso de teste e se as verifica- ções correspondem aos resultados esperados. Essa execução reproduz todas as ações e entradas informadas pelo testador durante a gravação do script. Ao final da execução, o critério de validação é avaliado informando ao usuário sobre o sucesso ou a falha do caso de teste. Após a criação do script, é possível exportá-lo para uma das linguagens de programação suportadas, o que permite ao testador aprimorar o caso de teste de forma programática. Essa é uma característica importante do Selenium Testes de interface por robô4 IDE, já que ele é uma ferramenta de prototipagem rápida que não fornece recursos mais avançados como iterações e instruções condicionais. Para uma estratégia de automação mais robusta, recomenda-se o Selenium WebDriver (SELENIUMHQ, 2013). Codificação O Selenium WebDriver é uma API (Application Programming Interface) orientada a objetos, disponível para as linguagens de programação Java, C#, Ruby, Phyton e Javascript (SELENIUMHQ, 2013). Além da fl exibilidade proporcionada pela programação, a ferramenta suporta vários navegadores; entre eles: Google Chrome, Internet Explorer, Firefox e Opera. Além disso, ela permite testes em plataformas móveis, como Android e IOS. Os componentes da tela são identificados por atributos do HTML (Hyper- Text Markup Language), como o ID, ou por CSS e XPATH (ZHAN, 2015). O CSS (Cascading Style Sheets) é uma linguagem voltada para a forma ou o estilo como os componentes de tela são apresentados em um arquivo escrito em linguagem de marcação, como o HTML. Já o XPATH é uma linguagem de caminho XML e está voltada para a hierarquia dos itens de marcação contidos no HTML. Dessa forma, ele monta o caminho (path) partindo do item de mais alto nível até chegar ao elemento que deseja identificar. A verificação é feita utilizando frameworks de teste como JUnit, NUnit ou TestNG. O framework a ser usado depende da linguagem utilizada para codificar os scripts de testes, já que o Selenium WebDriver suporta diversas linguagens de programação (ZHAN, 2015). Entre as vantagens de automatizar os testes funcionais de interface com o usuário via codificação está a melhor resposta às mudanças que afetam os testes. O código pode ser ajustado para que os testes automatizados voltem a funcionar corretamente, o que aumenta o seu poder de reuso. Outra impor- tante vantagem é a possibilidade de executar os testes em diversos browsers (GUNDECHA, 2012). A desvantagem é que, por ser feito via codificação, esse meio de automatizar testes funcionais de interface com o usuário exige um bom conhecimento sobre lógica de programação e sobre a linguagem que será utilizada. Além disso, há a necessidade de uma configuração antes de se iniciar a codificação e a execução dos testes automatizados. Na Figura 3, a seguir, você pode ver o processo de criação de um teste automatizado. 5Testes de interface por robô Figura 3. Fluxo de codificação com a utilização do Selenium WebDriver. Você pode buscar mais informações sobre a utilização do Selenium WebDriver no link a seguir. https://qrgo.page.link/NL4Lo Link Características do teste com Selenium Todos os recursos mencionados a seguir garantem que o Robot Framework seja usado para automatizar os casos de teste de maneira rápida e profi ciente. Sintaxe tabular Como você pode ver na Figura 4, o Robot Framework se baseia em arquivos de confi guração que seguem uma formatação específi ca do documento. Esse formato é chamado de “sintaxe de dados de teste tabular”. Isso signifi ca que, após o início de uma seção, toda nova linha de texto precisa ser planejada com dois ou mais espaços. Dados de teste são defi nidos em arquivos de confi guração, usando uma sintaxe específi ca. Vários casos de teste em um arquivo criam Testes de interface por robô6 um conjunto de testes, e vários arquivos em um diretório criam uma estrutura aninhada de suítes de teste (ROBOT FRAMEWORK, 2019). Figura 4. Arquivo de dados de teste. Fonte: Robot Framework (2019, documento on-line). O Robot Framework suporta quatro formatos de arquivo diferentes. O formato tabular pode ser definido usando HTML, valores separados por tabulações (TSV), texto simples ou reStructuredText (reST). De acordo com o guia do usuário do Robot Framework, o formato de arquivo de texto simples é recomendado. A Figura 4 descreve um exemplo de um arquivo de dados de teste de texto simples. Os arquivos de dados de teste de texto simples devem ter uma extensão de arquivo .txt ou .robot (ROBOT FRAMEWORK, 2019). A estrutura do script é simples e pode ser dividida em quatro seções. Veja a seguir. Settings: aqui, você configura as bibliotecas que serão utilizadas, os caminhos para arquivos auxiliares (page objects, por exemplo), os contextos e os hooks. Variables: é a lista das variáveis a serem usadas (de preferência com descrição) e a definição dos valores de algumas dessas variáveis. Test cases: essaé a seção mais importante, pois sem ela o seu teste não roda. É aqui que ficam os cenários/casos de teste, com ou sem implementação. Keywords: aqui, você pode definir palavras-chave ou implementar os cenários de teste descritos anteriormente. 7Testes de interface por robô Todas as seções que você acabou de ver são opcionais e dependem de como o seu código foi escrito, exceto a test cases. A utilização dessas seções é importante para a melhor organização do código. Os rótulos a seguir não são obrigatórios, mas também ajudam na organização. [DOCUMENTATION]: essa palavra-chave precede a descrição da funcionalidade ou do cenário de teste. Fique atento: se a documentação é feita na seção settings, ela não deve estar entre colchetes. Estes só são usados dentro dos test cases. [TAGS]: esse é um rótulo mais simples para o cenário, caso você queira ou precise rodar somente um ou poucos casos. É possível fazer isso chamando pelo título dos cenários na linha de comando, mas, como geralmente eles são grandes, no geral as tags acabam sendo a melhor opção. O Python é uma linguagem indentada, ou seja, blocos de comando são sepa- rados por espaços ou tabulações, formando uma indentação visual obrigatória. Não existem símbolos de “abre” e “fecha”; o Robot herda essa formatação. As variáveis no Robot são representadas por ${variavel}. O Robot tem a peculiaridade de ignorar um espaço entre palavras. Assim, ${nome_da_variavel} é igual a ${nome da variavel}. Elas também são case insensitive. As divisões dos argumentos são feitas por, no mínimo, dois espaços. Por exemplo: comando (dois espaços) argumento1 (dois espaços) argumento 2… Repare que o espaço no “argumento 2” é ignorado. O sinal de atribuição (=) também é opcional. Valores podem ser atribuídos das seguintes formas: ${valor} valor ${valor} = valor Testes de interface por robô8 Palavras-chave Testes orientados por palavras-chave ou testes orientados por tabela são amplamente aplicados a automações independentes de aplicativos. O testador precisa desenvolver tabelas de dados com palavras-chave, independente- mente da estrutura de automação de teste ou de qualquer outra ferramenta usada para executá-la. Em seguida, é necessário codifi car o script de teste, que “direcionará” o aplicativo testado e os dados. As tabelas em um teste orientado por palavra-chave contêm as informações sobre a funcionalidade do aplicativo testado e as instruções passo a passo para cada teste. No geral, pode-se falar de: palavras-chave de nível superior, usadas para testar um aspecto es- pecífico do sistema; palavras-chave de nível inferior, utilizadas para manter os casos de teste mínimos e concisos (o teste de funcionalidade necessário é separado em várias palavras-chave de nível inferior); palavras-chave técnicas, implementadas no teste para acessar real- mente o sistema e executar os testes. O framework inicia a execução com a análise dos arquivos de dados de teste. Em seguida, ele usa palavras-chave definidas nos arquivos de dados de teste e começa a interagir com o sistema de destino. As bibliotecas se comunicam diretamente com o sistema, mas outras ferramentas de teste também podem ser utilizadas como drivers (ROBOT FRAMEWORK, 2019). Como você pode ver na Figura 5, as palavras-chave atuam como coman- dos para o framework saber o que deve ser executado no sistema de destino. É possível utilizar palavras-chave predefinidas encontradas em bibliotecas existentes; além disso, novas palavras-chave podem ser definidas para novas bibliotecas. 9Testes de interface por robô Figura 5. Arquivo de dados de teste com palavras-chave. Fonte: Robot Framework (2019, documento on-line). Seções diferentes (tabelas de dados de teste) de um arquivo de dados de teste são separadas por uma linha de texto começando e terminando com um ou mais caracteres de asterisco (*). Além disso, as seções devem ser separadas por uma quebra de linha, para manter os dados legíveis. Variáveis globais são inicializadas na seção Variáveis. Uma variável começa com um sinal de dólar ($) e o nome pode ser qualquer coisa, desde que descreva a finalidade da variável e esteja cercado por um par de chaves ({}). Ao definir palavras- -chave, a primeira linha de cabeçalho deve ser deixada sem identificação. Testes de interface por robô10 Cada palavra deve começar com uma letra maiúscula e ser separada por um espaço. Ao se aprofundar na definição da palavra-chave, o recuo deve ter pelo menos dois caracteres de espaço. Na Figura 5, há quatro caracteres de espaço no recuo. Recomenda-se manter a largura do recuo consistente em todos os arquivos de dados de teste em um conjunto de testes. Especialmente no formato de texto simples, o uso de caracteres de espaço é recomendado em vez de um caractere tabular. Além disso, ao se referir a uma variável entre palavras-chave, pelo menos dois caracteres de espaço devem ser usados antes da variável para o analisador do Robot Framework separar as variáveis das palavras-chave usuais. Aplicação do teste com Selenium Um processo de automação coerente deve englobar atividades prévias ao desenvolvimento de scripts. Essas atividades incluem, por exemplo, a defi ni- ção da estratégia de automação e a análise dos benefícios e da viabilidade do processo para a aplicação ou o sistema em teste. Nem todos os testes manuais devem ser automatizados. Como um script automatizado requer mais análise, mais design, mais engenharia e mais manu- tenção do que um script manual, você deve calcular o custo de criá-lo. Além disso, assim que criar o script automatizado, você tem de mantê-lo para sempre, e isso também deve ser considerado. Quando o sistema a ser testado muda, geralmente os scripts automatizados precisam ser alterados simultaneamente. A análise prévia à automatização deve levar em conta os pontos listados a seguir. Complexidade da aplicação: é necessário investigar a complexidade da aplicação a ser automatizada e a sua integração com a ferramenta de automação. Aplicações complexas podem exigir elevado esforço na codificação dos scripts de automação, ou mesmo ser incompatíveis com determinadas ferramentas de automação, o que pode inviabilizar a iniciativa. Estabilidade da aplicação: caso a aplicação não esteja suficientemente madura (sobretudo no início do seu ciclo de vida) e seja previsível que venha a sofrer constantes alterações, a automação é dificultada pelo grande esforço de manutenção dos scripts e pode se revelar pouco compensadora. 11Testes de interface por robô Ciclo de vida da aplicação: caso o ciclo de vida da aplicação em questão seja curto — por exemplo, um sistema desenvolvido para uma situação específica que terá seu uso descontinuado em breve —, é improvável que a automação seja viável. Inevitavelmente, você vai identificar novas maneiras pelas quais um script automatizado pode falhar: simplesmente obter um valor de retorno nunca visto antes fará com que a automação falhe, por exemplo. Quando isso acontecer, você vai ter de alterar, testar e implantar novamente o script. Esses problemas geralmente não ocorrem com testes manuais. Um caso de negócio precisa ser feito antes e enquanto você automatiza os seus testes. Você deve analisar se o custo total da automação do teste será retornado, podendo ser executado N vezes nos próximos M meses. Muitas vezes, a resposta obtida por meio dessa análise é que a automatização não vale a pena. Dessa forma, alguns testes permanecerão manuais porque não há retorno positivo sobre o investimento (Return On Investment — ROI) para automatizá-los. Alguns testes manuais simplesmente não podem ser automatizados porque o pro- cesso de pensamento do testador manual é essencial para o sucesso do teste. Testes exploratórios, ataques de falhas e alguns outros tipos de testes manuais ainda são necessários para o sucesso de um esforço de teste. Uma vez que uma iniciativa de automação seja considerada viável para dadosistema, deve-se inicialmente realizar uma análise dos testes candidatos à automação. Essa análise permite identificar quais são os testes que, uma vez automatizados, gerarão maior retorno em relação ao esforço requerido para a sua automação. Existem testes cuja automatização é mais aconselhável. A seguir, veja alguns exemplos. Testes de interface por robô12 Testes de carga e desempenho: testes automáticos são um pré-requisito para esse tipo de teste. É impraticável economicamente utilizar cem ou mais usuários, durante um teste, para acessar um sistema simultanea- mente a fim de avaliar a sua qualidade sob tais condições. Testes de regressão: representam uma das melhores aplicações da au- tomação de testes. Testes de regressão usualmente custam muito tempo para serem executados manualmente e são muito suscetíveis a erro hu- mano, devido ao seu nível de repetitividade. Ao automatizar, reduz-se drasticamente a possibilidade de o sistema ser produzido com a inserção de um novo defeito em uma funcionalidade antiga. Além disso, o ganho em tempo de execução dos testes geralmente justifica a sua utilização. Tarefas repetitivas: nesses casos, a grande vantagem do teste automá- tico se deve à redução de erros. Testes manuais repetitivos normalmente exigem um grande nível de concentração do testador, que não deve se distrair, apesar do cansaço psicológico da repetição. Assim, justifica- -se a automação nos casos em que se verifica que os testes têm obtido resultados não verdadeiros devido a falhas humanas. Smoke tests: são testes básicos aplicados às principais funcionalidades do sistema. Esse tipo de teste visa a identificar defeitos nas funciona- lidades com o intuito de avaliar se a versão liberada pode continuar sendo testada pela equipe de testes. Testes de unidade: com a existência de tantas ferramentas gratuitas de testes unitários para quase todas as linguagens, não utilizá-las é con- traprodutivo. O ganho em tempo ao utilizar essas ferramentas justifica a sua utilização na maioria dos casos. Cálculos matemáticos: o objetivo desse tipo de texto é evitar erros humanos. Funcionalidades críticas: como seres humanos são influenciados pelo seu humor ao executarem uma tarefa, funcionalidades críticas não deveriam depender de um testador, que pode esquecer-se de testar algo importante. Preparação de pré-condições: ferramentas de automação de testes podem e devem ser usadas para preparar ambientes de teste, como condições iniciais ou entradas que serão utilizadas nos testes. É claro que esse jamais será o primeiro passo a ser dado quando se pretende automatizar um software; porém, uma vez que se possua a ferramenta, deve-se utilizá-la de modo a maximizar a produtividade. 13Testes de interface por robô Por outro lado, a automação não é recomendada para os casos listados a seguir. Funcionalidades novas: essas funcionalidades têm uma grande pro- babilidade de mudanças, então o ideal seria criar o teste quando se alcança certa estabilidade. Funcionalidades pouco usadas: haverá um custo e um esforço des- necessários, já que os testes serão pouco aplicados em decorrência da pouca utilização da funcionalidade. Funcionalidades que exigem inspeção visual: não existe uma maneira de avaliar a interface de um sistema e a sua usabilidade. Para isso, é necessária a visão de um testador. Protótipos: o protótipo é utilizado momentaneamente no início de um projeto de software, para ser exibido para clientes ou para a própria organização. Por isso, não há a necessidade de automatizar testes em um protótipo, já que ele ainda não é o software propriamente dito. A automação de testes de software não possui competências isoladas. Para o sucesso e o bom uso da automação de testes, deve haver testabilidade no software. A testabilidade examina as diferentes probabilidades e características comportamentais que levam o código a falhar se alguma coisa estiver incorreta. Assim, a testabilidade está alinhada e engajada com a qualidade da aplicação. Os níveis de testabilidade de uma aplicação podem ser definidos e enten- didos conforme a apresentação de falhas durante a execução de testes. Um programa tem alta testabilidade se ele tende a expor as suas falhas durante os testes com entradas que geram defeitos. Um programa tem baixa testabilidade se ele tende a ocultar as falhas detectadas durante os testes, produzindo saídas corretas para entradas que geram defeitos. Seja por execuções manuais ou execuções automatizadas de testes, é impor- tante e indispensável ter requisitos bem documentados, detalhados, objetivos e alinhados com o que se espera do software enquanto produto final. É com esses requisitos e documentos que o testador ou automatizador de testes vai desenvolver os testes manuais e os scripts de testes automatizados. Tanto em aplicações já desenvolvidas quanto em novas a serem criadas, algumas alterações serão pertinentes e necessárias para que se tenha testabili- dade. Normalmente, é preciso realizar modificações na aplicação para torná-la mais fácil de ser testada. Essas modificações têm o objetivo de incorporar um conjunto de mecanismos que facilitam a observação e o controle do estado dos componentes internos da aplicação. Testes de interface por robô14 GUNDECHA, U. Selenium testing tools cookbook: over 90 recipes to build, maintain, and improve test automation with selenium webdriver. Birminghan: Packt, 2012. KOVALENKO, D. Selenium design patterns and best practices. Birmingham: Packt, 2014. MESZAROS, G. xUnit test patterns: refactoring test code. Upper Saddle River: Addison- -Wesley, 2007. ROBOT FRAMEWORK. [Site]. [2019]. Disponível em: http://robotframework. org/#introduction. Acesso em: 24 jun. 2019. ROBOT FRAMEWORK FOUNDATION. Robot framework user guide: version 3.1.2. c2016. Disponível em: https://robotframework.org/robotframework/latest/RobotFrameworkU- serGuide.html. Acesso em: 24 jun. 2019. SELENIUMHQ. Selenium webdriver. 2013. Disponível em: http://docs.seleniumhq.org/ docs/03_webdriver.jsp. Acesso em: 24 jun. 2019. ZHAN, Z. Selenium webdriver recipes in C#. 2nd ed. New York: Apress Media, 2015. Leituras recomendadas A4Q. Alliance for qualification. 2018. Disponível em: https://cdn.website-editor.net/0 fa31c5707954e47832ceaaddbdfde76/files/uploaded/A4Q_SeleniumTesterFounda- tion_Syllabus.pdf. Acesso em: 24 jun. 2019. PRASAD, R. Learning selenium testing tools. 3rd ed. Birmingham: Packt, 2015. PUGH, K. Lean-agile acceptance test-driven development: better software through colla- boration. Upper Saddle River: Addison-Wesley, 2011. SELENIUM2LIBRARY. [2019]. Disponível em: https://rtomac.github.io/robotframework- -selenium2library/doc/Selenium2Library.html. Acesso em: 24 jun. 2019. 15Testes de interface por robô Dica do professor Uma classe geralmente usada para a automatização de testes é a classe Java.awt.Robot. Ela é usada para assumir o controle do mouse e do teclado. Uma vez que você obtém o controle, pode fazer qualquer tipo de operação relacionada a esses dispositivos por meio do código Java. Na Dica do Professor você vai saber o que é Java Robot, qual o processo de instalação e como pode trabalhar com a classe de robô no webdriver de Selenium. Também aprenderá as vantagens e desvantagens da classe e da estrutura do robô Java, além dos métodos da classe do robô em detalhes. Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. https://fast.player.liquidplatform.com/pApiv2/embed/cee29914fad5b594d8f5918df1e801fd/17edab55c21da774b4916466ed825d06 Exercícios 1) Selenium IDE é uma ferramenta para a construção de scripts de teste por meio de um plugin para o navegador Firefox, que fornece uma interface amigável para o desenvolvimento de testes automatizados. O Selenium IDE usa abordagem record-and-playback. O que é a abordagem record-and-playback? A) Uma função em uma biblioteca de software. B) A interface na qual os testes do Seleniumsão escritos. C) A representação das camadas, componentes e interfaces de uma arquitetura de automação de testes. D) Uma abordagem de automação de testes que permite gravar, salvar e reproduzir scripts de teste. E) Uma fonte para determinar o resultado esperado de um caso de teste. 2) O Robot Framework utiliza uma sintaxe tabular, pois se baseia em arquivos de configuração que seguem uma formatação específica. A estrutura do script pode ser dividida em seções. Qual dessas seções necessita, obrigatoriamente, constar no seu arquivo de automatização? A) Settings. B) Variables. C) Test cases. D) Keywords. E) Documentation. Selenium é um conjunto de ferramentas usadas para automatizar testes por meio de um conjunto de funções que permitem a localização de elementos de interface do usuário e a comparação entre os resultados previstos para o teste e o comportamento real da aplicação. Cada ferramenta tem uma abordagem diferente no suporte ao teste de automação baseado na web. 3) Para qual das ferramentas do Selenium a sua aplicação está correta? A) Selenium IDE (Integrated Development Environment) é uma API (Application Programming Interface) orientada a objetos; disponível para as linguagens de programação Java, C#, Ruby, Phyton e Javascript. B) Selenium RC (Remote Control) é um plugin do Firefox. É a estrutura mais simples da Suíte Selenium e permite gravar e reproduzir scripts. C) Selenium WebDriver é uma estrutura de automação de navegador que aceita comandos e os envia para um navegador. Ele é implementado por meio de um driver específico do navegador. D) Selenium Grid usa uma abordagem record-and-playback, capturando as ações executadas pelo testador em um script que permite reproduzir o caso de teste posteriormente. E) Selenium WebDriver é uma ferramenta usada em conjunto com o Selenium RC para executar testes em diferentes máquinas e navegadores em paralelo. 4) Na seção VARIABLES são listadas as variáveis a serem usadas (de preferência com descrição) e a definição dos valores de algumas dessas variáveis. Qual é a forma correta de declaração das variáveis nos dados de teste do Robot? A) $(nome_da_variavel). B) ${nome_da_variavel}. C) &{nome_da_variavel}. D) @(nome_da_variavel). E) @{nome_da_variavel}. 5) Alguns testes manuais simplesmente não podem ser automatizados porque o processo de pensamento do testador manual é essencial para o sucesso do teste. Testes exploratórios, ataques de falhas e alguns outros tipos de testes manuais ainda são necessários para o sucesso de um esforço de teste. Qual das alternativas abaixo é correta em relação à indicação para automação de testes? A) É aconselhável a automação de testes de carga e desempenho. B) Não é recomendada a automatização de testes com tarefas repetitivas. C) Testes automatizados são imprescindíveis para as funcionalidades novas do sistema. D) Funcionalidades pouco usadas precisam ser automatizadas, já que nem sempre são acessadas por outros testes. E) Não é aconselhado o processo de automatização para testes de regressão, já que os testes manuais são executados de maneira mais rápida. Na prática O Robot é um framework para automação de testes de aceitação (acceptance test-driven development). É open source e independente de sistema operacional. Nativamente implementado para Python e Java, mas também roda em Jython (JVM) e IronPython (.NET). Sua sintaxe é tabular, como o Python, e usa uma abordagem de palavras-chave (keyword driven). Essa abordagem permite a escrita de cenários com linguagem totalmente natural. Confira, Na Prática, como fazer uma busca simples no Google utilizando testes automatizados com Robot Framework. Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. https://statics-marketplace.plataforma.grupoa.education/sagah/541c7f5c-7eae-45a7-b3f9-ef1101d08b4c/0fb481a8-ae34-4299-a187-b54cc4e067cb.jpg Saiba + Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do professor: Rebot Framework user guide Leia a documentação oficial do Robot Framework, que traz um guia do usuário com descrição bem completa de todas as funcionalidades desta ferramenta. Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. Rebot Framework demo Acesse um aplicativo de demonstração que se trata de uma calculadora muito simples implementada com o Python (calculator.py). Ele contém apenas lógica de negócios e nenhuma interface de usuário. Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. Automação de testes de aplicações móveis sem necessidade de programação Leia o artigo no qual é demonstrado o desenvolvimento de um framework de monitorização e teste de aplicações Android com base em especificações, capaz de testar aplicações com suporte multiplataforma sem necessidade de alterar ou conhecer o seu código fonte. http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html https://github.com/robotframework/RobotDemo Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. Caso de demonstração de uma framework para automatização do teste de APIs de aplicações SaaS Leia a dissertação que está enquadrada num contexto real em que é realizada a seleção de ferramentas de teste de APIs, para posteriormente escolher a mais adequada e utilizá-la na automatização de um conjunto de casos de teste inserido na cloud. Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. Automação de testes utilizando ferramentas open source em ambiente ágil de desenvolvimento com SCRUM Leia o artigo no qual os autores compartilham experiências sobre a automação do processo de teste de um sistema web desenvolvido utilizando SCRUM. Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. Applying test automation in usability testing Leia a tese que estuda a aplicabilidade da automação de testes no contexto de testes de usabilidade. https://repositorio-aberto.up.pt/handle/10216/85797 https://repositorium.sdum.uminho.pt/handle/1822/39595 https://www.academia.edu/10000636/Automa%C3%A7%C3%A3o_de_Testes_utilizando_ferramentas_Open_Source_em_Ambiente_%C3%81gil_de_Desenvolvimento_com_SCRUM Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. https://www.theseus.fi/bitstream/handle/10024/169365/Automation_in_usabilitytesting_Virtanen_Final_publ.pdf?sequence=2
Compartilhar