Vamos revisar os conceitos aprendidos até agora e responder algumas perguntas.
- Planejamento de teste: estrategia a ser aplicada nos testes
- Desenvolvimento dos casos de teste: casos de testes são definidos e desenvolvidos
- Configuração de Ambiente: configuração de software e hardware necessário aos testes
- Execução: execução do código e comparar dos resultados esperados vs resultados reais
- Encerramento: avaliação dos critérios de conclusão com base na cobertura de testes, qualidade, objetivos criticos de negócio, etc.
- Caixa Preta: Requisitos e especificações, sem visão interna de funcionamento e estrutura do software, da parte funcional e sob a perspectiva do usuário
- Caixa Branca: Baseada na estrutura interna, arquitetura e código fonte, podemos testar as unidades do sistema.
- Caixa Cinza: Depuração de software, testador tem conhecimento limitado do funcionamento interno. Misto.
- Testes de Unidade: valida partes individuais do código
- Teste de Integração: Teste que valida a interação das partes individuais do projeto, bem como sua interação com interfaces externas
- Teste de Sistema: funcional, utiliza de fato o sistema
- Teste de Aceitação: com o usuário, aceitação do sistema
- Defeito é encontrado(NEW)
- Assign: atribuir para o dev corrigir
- Atividade: resolvendo o bug em si, rejeitar ou aceitar, retornar para maiores explicações, etc.
- Testes: o bug corrigido é testado novamente para validação. Caso não esteja, retorna a fase de atividade.
- Closed: Corrigido, validado, encerrado.
É um conjunto de condições e variáveis sob as quais um testador determinará se um sistema em testes satisfaz os requisitos funcionais corretamente.
- Funcionais: Realizado antes dos não-funcionais, tem como base os requisitos do cliente, descreve o que o produto faz
- Não-Funcional: Realizado apos o teste funcional, baseado nas expectativas do cliente e descrevem como o produto funciona.
Verificação - Técnica de análise estática, verifica a documentação, teste é feito sem execução do código (revisão, inspeção e teste passo-a-passo)
Validação - Técnica de análise dinâmica onde o teste é feito executando o código (técnicas de teste não-funcionais e funcionais)
Metodologia de testes onde o cliente final é solicitado a usar o softwar para verificar sua facilidade de usa, percepção, desempenho do sistema, etc. Forma precisa de entender o ponto de vista do cliente, podendo ser utilizados protótipos mocks e etc.
Parâmetro para descrever até que ponto o código fonte é testado.
- Cobertura de declaração: garante que cada linha de código foi executada e testada
- Cobertura de decisão: todas os verdadeiro e falsos foram executadas e testados
- Cobertura de Caminho: todas as rotas possíveis através de uma determinada parte do código foram executadas e testadas.
10) Um defeito que poderia ter sido removido durante o estágio inicial é removido em um estágio posterior. Como isso afeta o custo?
O defeito deve ser removido o quanto antes, pois ao ser postergado o custo aumenta exponencialmente. A remoção em fases iniciais é mais barata e simples.
- Regressão: confirma que uma alteração recente no código não afeta adversamente os recursos ja existentes
- Confirmação: quando um teste falha devido a defeito, este é relatado, nova versão do software corrigido é enviado e o teste é novamente executado. É a confirmação da correção.
Para estimar o projeto deve-se considerar:
- Dividir todo o projeto em tarefas menores:
- Atribuir cada tarefa aos membros da equipe
- Faça uma estimativa do esforço necessário para completar cada tarefa
- Valide a estimativa
Normalmente os casos caixa preta são escritos primeiro.
Uma vez que estes necessitam somente dos documentos de requisitos e design, ou plano de projeto. Estes documentos estão facilmente disponíveis no início do projeto.
Já testes de caixa branca não podem ser executados na fase inicial do projeto pois precisam de maior clareza de arquitetura, que não está disponível em etapas iniciais. Portanto, são geralmente escritos depois dos testes caixa-preta.
- Nome do projeto
- Nome do módulo (se houver)
- Defeito detectado em
- Defeito detectado por
- Onde o defeito foi encontrado
- ID e nome do defeito
- Instantâneo do defeito (evidências do bug)
- Status de Prioridade/Gravidade
- Defeito resolvido por
- Defeito resolvido em (data)
Cascateamento de defeitos ocorre quando um defeito é causado por outro defeito, um defeito adiciona o outro.
Quando um defeitos estiver presente em qualquer etapa, mas não for identificado, oculto para as outros fases sem ser notado, resultará em grande aumento no número de defeitos.
São majoritariamente detectados no teste de regressão
- Errado: significa que os requisitos foram implementados incorretamente, é uma variação da especificação fornecida.
- Ausente: Esta é variação das especificações, uma indicação de que uma especificação não foi implementada ou um requisito do cliente não foi anotado corretamente.
- Extra: É um requisito incorporado ao produto que não foi fornecido pelo cliente final. É sempre uma variação da especificação, mas pode ser um atributo desejado pelo usuário do produto.
- Documento de requisito: especifica o que exatamente é neecssário no projeto da perspectiva do cliente.
- Entrada do Cliente: podem ser discussões, conversas informais, e-mail, etc.
- Plano do Projeto: o plano do projeto preparado pleo gerente do projeto também serve como uma boa entrada para finalizar o teste de aceitação
Selenium é uma ferramenta de código aberto que se destina a automatizar testes realizados em navegadores web. Como o Selenium é de código aberto, não há custo de licenciamento envolvido, o que é grande vantagem sobre outras ferramentas de teste. Outras razões são:
- Os scripts de teste podem ser escritos em diversas linguagens de programação: Java, Python, C#, PHP, Ruby, Perl &, Internet
- Os testes podem ser realizados em qualquer navegador: Mozilla, IE, Chrome, Safari ou Opera.
- Ele pode ser integrado com ferramentas como TestNG, Junit para gerenciar casos de teste e gerar relatórios
- Pode ser integrado com Maven, Jenkins & Docker para realizar testes contínuos.
- Selenium Integrated Development Environment (IDE)
- Selenium Remote Control (RC)
- Selenium WebDriver
- Grade de Selenium
O localizador nada mais é que um endereço que identifica um elemento web exclusivamente dentro da página web. Assim, para identificar os elementos da web de forma precisa e, temos diferentes tipos de localizadores no Selenium da seguinte forma:
- EU IA
- Nome da Classe
- Nome
- TagName
- Texto do Link
- PartialLinkText
- XPath
- Seletor CSS
- DOM
XPath, também chamado de XML Path é uma linguagem para consultar documentos XML. É uma estratégia imporatnte para localizar elementos no Selenium. Consiste em uma expressão de caminho junto com algumas condições. Aqui, voce pode escrever facilmente um script/consulta XPath para localizar qualquer elemento na página da web. Ele é projetado para permitir a navegação de documentos XML com o objetivo de selecionar elementos individuais, atributos ou alguma outra parte de um documento XML para processamento específico. Também produz localizadores confiáveis
- XPath absoluto:
É a maneira direta de localizar o elemento, mas a desvantagem do XPath absoluto é que, se houver alguma alteração feita no caminho do elemento, o XPath falhará. Por exemplo:
/html/body/div[1]/section/div[1]/div
- XPath Relativo:
Para XPath relativo, o caminho começa no meio da estrutura HTL DOM. Ele começa com barra dupla (//), o que significa que pode pesquisar o elemento em qualquer lugar da página da web. Por exemplo:
// input [@ id = 'ap_email']
O Selenium Grid pode ser usado para executar scripts de teste iguais ou diferentes em várias plataformas e navegadores simultaneamente, de modo a obter execução de teste distribuida, testando em ambientes diferentes e economizando tempo de execução.
A seguinte sintaxe pode ser usada para iniciar o navegador:
WebDriver driver = new FirefoxDriver ()
Driver WebDriver = novo ChromeDriver()
Driver WebDriver = novo InternetExplorerDriver ()
O teste é sempre feito após as fases de construção e execução. Quanto mais cedo detectarmos um defeito, mais econômico ele será. Por exemplo, consertar um defeito na manutenção é dez vezes mais caro do que consertá-lo durante a execuação.
Conforme as fases de testes avançam, a realidade do ambiente se torna mais importante. Por exemplo, durante o teste de unidade, você precisa que o ambiente seja parcialmente real, mas na fase de aceitação você deve ter um ambiente 100% real, ou podemos dizer que deveria ser o ambiente real.
Normalmente, em testes aleatórios, os dados são gerados aleatoriamente, muitas vezes usando uma ferramenta. Por exemplo, a figura a seguir mostra como os dados gerados aleatoriamente são enviados ao sistema.
Esses dados são gerados usando uma ferramenta ou mecanismo automatizado. Com essa entrada aleatória, o sistema é então testado e os resultados observados.
- Teste de Fumaça
- Teste de regressão
- Teste de cálculo complexo
- Testes baseados em dados
- Teste não funcionais
- Taxa de detecção de defeitos
- Tempo de execução da automação e economia de tempo para lançar o produto
- Redução de mão de obra e outros custos
driver.findElement(By.linkText("Google")).click();
Este comando encontra o elemento usando o textos do link e, a seguir, clica no elemento. Assim, o usuário seria redirecionado para a página correspondente.
É uma estrutura avançada projetada de forma a aproveitar os benefícios dos desenvolvedores e testadores. Ele também possui um mecanismo de tratamento de exceções embutido que permite que o programa seja executado sem encerrar inesperadamente.
O código abaixo ajuda você a entender como definir a prioridade do caso de teste no TestNG:
```java
package TestNG;
import org.testing.annotation.*;
public class SettingPriority {
@Test(priority=0)
public void method1() {}
@Test(priority=1)
public void method2() {}
@Test(priority=2)
public void method3() {}
}
```
Sequência de execução de teste:
- Method1
- Method2
- Method3
O repositório de objetos refere-se à coleção de lementos da web pertencentes ao Application Under Test (AUT) junto com seus valores de localizador. Com relação ao Selenium, os objetos podem ser armazenados em uma planilha do Excel que pode ser preenchida dentro do script sempre que necessário.
Usando o método sendKeys() podemos inserir o texto na caixa de texto.
- Piloto
- Implementação Gradual
- Implementação em Fases
- Implementação Paralela
Suponha que entrevistador apresente 20 links em uma página web, e temos de verificar quais destes 20 links estão funcionando, e quais estão quebrados.
A solução é enviar solicitações HTTP a todos os links na página da web e analisar a resposta. Sempre que você usar o método driver.get() para navegar até uma URL, ele responderá com um status de 200-OK. Isso indica que o link está funcionando e foi obtido. Qualquer outro status indica que o link está quebrado
Primeiro, temos que usar as marcas âncora <a>
para determinar os diferentes hiperlink na página da web.
Para cada tag <a>
podemos usar o valor do atributo 'href' para obter os hiperlinks e então analisar a resposta recebida quando usado no método driver.get()
Se o nome e id do quadro não estiverem disponíveis, podemos usar quadro por índice. Por exemplo, caso existam 3 frames em uma páginda web, e nenhum deles tiver nome ou id de frame, podemos selecioná-los usando um atributo de índice de frame (baseado em zero).
Todo o quadro terá um número de índice, sendo o primeiro "0", o segundo "1" e o terceiro "2".
driver.switchTo().frame(int arg0);
Usando a função TakeScreenshot é possível efetuar a captura de tela. Com a ajuda do método getScreenshotAs() você pode salvar a captura efetuada.
Exemplo:
scrFile = ((TakeScreenshot)driver).getScreenshotAs(outputtype.FILE)
45) Explique como você logará em qualquer site se ele está mostrando qualquer pop-up de autenticação para nome de usuário e senha?
Se houver um pop-up para fazer login, precisamos usar o comando explícito e verificar se o alerta está realmente presente. O código a seguir a entender o uso do comando explícito.
WebDriverWait wait = new WebDriverWait(driver, 10);
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
alert.authenticateUsing(new UserAndPassword(**username**, **password**));
Para pular um determinado método de teste ou código, você pode definir o parâmetro 'enabled' na anotação de teste como false
@Test(ativado=falso)
WebElement sample = driver.findElement(By.xpath("//[contains(text(), 'data')]"));
Ele define uma amostra de variável do tipo WebElement e usa uma pesquisa Xpath para inicializá-la com uma referência a um elemento que contém o valor de texto "dados".