Buscar

Automatização de Testes

Prévia do material em texto

ACH2006 – ENGENHARIA DE SISTEMAS DE
INFORMAÇÃO I
AUTOMATIZAÇÃO DA ATIVIDADE DE TESTE
Marcos Lordello Chaim
4 de outubro de 2023
Bacharelado em Sistemas de Informação | EACH - USP
AUTOMATIZAÇÃO DA ATIVIDADE DE TESTE
• Parcela considerável do custo das atividades de teste está
associada à execução dos testes em si.
• Automatização no desenvolvimento tradicional⇒ teste de
regressão.
• Regredir um software ao estado anterior, isto é, ao estado em que
todos os testes passavam.
• A reexecução dos testes é uma atividade custosa.
• Dados de entrada deverão ser fornecidos novamente e validação
das saídas deverá também ocorrer de novo.
1/22
AUTOMATIZAÇÃO DA ATIVIDADE DE TESTE
• Sem mecanismos para automatizar a execução dos teste, duas
situações podem ocorrer:
1. o custo aumenta significativamente, pois os testadores deverão
realizar manualmente os testes;
2. o teste de regressão será negligenciado, afetando-se assim a
qualidade do software.
• Métodos de desenvolvimento ágil: automatização dos testes é
uma prática fundamental.
• Kent Beck: requisito de teste somente existe, se houver um teste
automatizado associado.
2/22
DESENVOLVIMENTO DIRIGIDO POR TESTES
• A evolução desse conceito⇒ TDD — Test-Driven Development.
• Para cada funcionalidade do software, testes de unidade são
desenvolvidos anteriormente a sua implementação.
• Abordagem Red-Green-Refactor:
• conjunto de atividades utilizadas na maioria dos métodos ágeis,
sendo uma característica implícita à prática de TDD.
3/22
ABORDAGEM RED-GREEN-REFACTOR
1. (Red): Testes automatizados são escritos. Ao serem executados,
possivelmente a funcionalidade ainda não foi implementada;
2. (Green): A funcionalidade é desenvolvida o suficiente para fazer
com que os testes passem com sucesso;
3. (Refactor): Uma vez que todos os testes passam, o código é
melhorado de modo que as melhorias continuem assegurando
o sucesso de execução dos testes.
4/22
ACCEPTANCE TEST-DRIVEN DEVELOPMENT
• Atividades decorrentes da abordagem red-green-refactor
passam a ser realizadas para testes de validação.
• Cliente e desenvolvedores escrevem casos de testes de
aceitação para uma determinada funcionalidade do sistema.
• Desenvolvedores codificam a funcionalidade para que os testes
passem.
• Cliente executa o caso de teste de aceitação para validar a
funcionalidade implementada.
5/22
ACCEPTANCE TEST-DRIVEN DEVELOPMENT
Figura 1: Interação entre ATDD e TDD.
6/22
AUTOMATIZAÇÃO DOS TESTES
• Pode-se, portanto, concluir que a automatização dos testes é
uma atividade fundamental em qualquer paradigma de
desenvolvimento, mas especialmente no paradigma de
desenvolvimento ágil.
• A seguir discutiremos os principais tipos de ferramentas que
auxiliam o desenvolvedor a criar testes automatizados.
7/22
FERRAMENTAS DE AUTOMATIZAÇÃO DE TESTES
• Associadas à execução automática de um conjunto (“suite”) de
testes e à avaliação automática dos resultados gerados.
• Tradicionalmente, atuam em dois níveis:
1. Execução automática de casos de teste associados a uma unidade.
2. Execução automática de casos de testes de integração e aceitação.
8/22
TESTE DE UNIDADE AUTOMÁTICO
• Execução automática de casos de teste associados a uma
unidade.
• Por unidade, entende-se um procedimento, um método, uma
função ou uma classe.
• Pode ser utilizado no teste de integração, desde que os
procedimentos ou objetos invocados utilizem a implementação
final, e não versões simplificadas.
9/22
FERRAMENTAS DE TESTE DE UNIDADE AUTOMÁTICO
• Genericamente referidas como bibliotecas xUnit.
• A letra x é uma referência à linguagem alvo, que pode ser Java,
C, PHP etc.
• A mais famosa biblioteca xUnit é a que apoia o teste de
programas escritos em Java, conhecida como JUnit.
10/22
JUNIT 3
Figura 2: Criação da estrutura de teste de unidade com JUnit. 11/22
JUNIT 3
Figura 3: Teste de unidade implementado com JUnit. 12/22
JUNIT 4
package br.usp.each.si.ach2006;
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
// Test the Money class.
public class MoneyTest
{
private Money _amount;
/**
* Default constructor for test class MoneyTest
*/
public MoneyTest()
{
//System.out.println("JUnit Framework calls Constructor of test class before executing test methods");
}
/**
* Sets up the test fixture.
* Called before every test case method.
*/
@Before
public void setUp() {
_amount = new Money(0, 0);
}
/**
* Tears down the test fixture.
* Called after every test case method.
*/
@After
public void tearDown() {
_amount = null;
}
}
... 13/22
JUNIT 4
// Test conversion of Money object to String.
@Test
public void testToString()
{
// First test: cents is two digits
Money amount = new Money (7, 55);
String actual = amount.toString();
String expected = "$7.55";
assertTrue("Error in testToString", actual.equals(expected));
// Second test: cents is one digit
Money amount2 = new Money (7, 5);
String actual2 = amount2.toString();
String expected2 = "$7.05";
assertTrue("Error in testToString", actual2.equals(expected2));
}
// Test equality of money values that are the same.
@Test
public void testEquality()
{
Money myCash = new Money (3, 75);
Money yourCash = new Money (3, 75);
assertTrue ("Error in testEquality", myCash.equals(yourCash));
Money myAmount = new Money (50, 0);
Money yourAmount = new Money (50, 0);
assertTrue ("Error in testEquality", myAmount.equals(yourAmount));
}
...
}
14/22
JUNIT 4
Figura 4: Resultado da execução dos testes escritos com JUnit 4 no Intellij. 15/22
JUNIT 4
Figura 5: Resultado da execução dos testes escritos com JUnit 4 com um
falha forçada. 16/22
FERRAMENTAS DE CAPTURA E REEXECUÇÃO
• Visam capturar os comandos realizados pelos testadores
durante o teste e registrá-los na forma de scripts.
• Os scripts são programas gerados em uma linguagem de alto
nível.
• Comandos capazes de:
• posicionar o cursor em determinado campo;
• inserir valores númericos ou alfanuméricos e
• emitir comandos (e.g., clicar em um botão ou enviar o caractere
ENTER).
17/22
FERRAMENTAS DE CAPTURA E REEXECUÇÃO
• Quando executados os scripts, os comandos originalmente
realizados pelos testadores são submetidos automaticamente
ao software.
• Selenium IDE:
• ferramenta open-source que realiza as funções de captura e
reexecução para aplicações Web.
• instalada em um navegador Mozilla Firefox, Google Chrome e
Apple Safari para capturar os comandos emitidos pelo testador
para testar uma aplicação Web.
• https://www.selenium.dev/
18/22
https://www.selenium.dev/
SELENIUM
Figura 6: Exemplo de ferramenta de captura e reexecução — Selenium IDE. 19/22
SELENIUM TEST SCRIPT
{
"id": "ce604a33-7c61-4027-9534-14837595b6f1",
"version": "2.0",
"name": "test",
"url": "https://accounts.google.com",
"tests": [{
"id": "4fe33155-1130-4867-9650-c3166de4a699",
"name": "test1",
"commands": [{
"id": "f53556c3-e92a-49cc-a1c7-55b41eadde66",
"comment": "",
"command": "open",
"target": "/v3/signin/identifier?continue=https%3A%2F%2Fmail.google.com%2Fmail%2Fu%2F0%2F&emr=1&followup=https%3A%2F%2Fmail.google.com%2Fmail%2Fu%2F0%2F&ifkv=AYZoVhf48GxTaDPwjd-SZSFF4KkBz996rRRE1KNv6r822Ei6y8QOqj9sitIhTbsk0oEpPe8B6p1xFg&osid=1&passive=1209600&service=mail&flowName=GlifWebSignIn&flowEntry=ServiceLogin&dsh=S-922154920%3A1696277661979569&theme=glif",
"targets": [],
"value": ""
}, ... {
"id": "71df0f83-746c-44ef-beb5-c76cd994ee91",
"comment": "",
"command": "type",
"target": "name=Passwd",
"targets": [
["name=Passwd", "name"],
["css=#password .whsOnd", "css:finder"],
["xpath=//input[@name='Passwd']", "xpath:attributes"],
["xpath=//div[@id='password']/div/div/div/input", "xpath:idRelative"],
["xpath=//div/div/div/input", "xpath:position"]
],
"value": "123456"
},...
20/22
SELENIUM TEST SCRIPT
...{ "id": "e8f4269e-c785-4a6b-aa70-cecaa0ec43dc",
"comment": "",
"command": "assertText",
"target": "css=.OyEIQ > div:nth-child(2)",
"targets": [
["css=.OyEIQ > div:nth-child(2)", "css:finder"],
["xpath=//div[@id='yDmH0d']/c-wiz/div/div[2]/div/div/div/form/span/section[2]/div/div/div/div[2]/div[2]","xpath:idRelative"],
["xpath=//div[2]/div[2]", "xpath:position"]
],
"value": "Senha incorreta. Tente novamente ou clique em \"Esqueceu a senha?\" para escolher outra."
}]
}],
"suites": [{
"id": "a01fb6bb-2640-47dd-b896-2c9a241ff706",
"name": "Default Suite",
"persistSession": false,
"parallel": false,
"timeout": 300,
"tests": ["4fe33155-1130-4867-9650-c3166de4a699"]
}],
"urls": ["https://accounts.google.com/"],
"plugins": []
}
21/22
RESUMO
• TDD – Test-Driven Development
• Abordagem Red-Green-Refactor
• Teste de unidade automatizado – xUnit
• Teste de aceitação automatizado – Selenium
22/22

Continue navegando