SlideShare uma empresa Scribd logo
Teste de Software
Tipos de automação de teste

Manaus, 2013
1
Marcos Felipe Paes Pessoa
20902016

◦Testes automatizados dirigidos a dados (Data-Driven)
◦Testes automatizados baseados na linha de comando (Command Line Interface – CLI)
◦Testes automatizados baseados em API (Application Programming Interface)
◦Test Harness

Manaus, 2013
2
Menu
Testes automatizados dirigidos a dados (Data-Driven) ................................................................................ 4
Testes automatizados baseados na linha de comando (Command Line Interface - CLI) ............................. 6
Testes automatizados baseados em API (Application Programming Interface) ........................................... 7
Test Harness .................................................................................................................................................. 8
Referências.................................................................................................................................................. 10

3
Testes automatizados dirigidos a dados (Data-Driven)
Os testes automatizados dirigidos a dados representam um refinamento dos testes baseados
na interface gráfica. Basicamente, nesta abordagem, é utilizado um mecanismo para auxiliar a
execução de testes que executam as mesmas ações repetidamente, porém com dados diferentes.
Uma das principais vantagens dessa abordagem é a reutilização dos scripts, o que
conseqüentemente diminui a complexidade e o tempo de manutenção.
Um exemplo seria um cadastro de chamadas técnicas. Digamos que seja necessário criar vários testes
a fim de avaliar se a aplicação permite gravar os dados sem que todos os campos tenham sido preenchidos
ou preenchidos com dados inválidos. Neste caso, as ações seriam as mesmas, apenas os dados
preenchidos nos campos mudariam.
Na abordagem de testes baseados na interface gráfica, teríamos que capturar e gerar diversos scripts
de testes. No entanto, à medida que se queira criar centenas ou milhares de scripts de testes, as coisas
começam a se complicar. O tempo para capturar e gerar os scripts de teste aumenta consideravelmente.
Além disso, a complexidade e o tempo para dar manutenção nesses scripts também aumentam
exponencialmente.
Por meio da criação de testes automatizados dirigidos a dados, os dados deixam de ser constantes
dentro dos scripts e tornam-se variáveis. Para ilustrar, será apresentado um exemplo na prática usando a
ferramenta IBM Rational Functional Tester.
Esta ferramenta permite a criação de testes automatizados dirigidos a dados por meio da

utilização de um mecanismo chamado Test Datapool. O Test Datapool é basicamente uma tabela
que armazena os dados variáveis de um ou mais scripts.
No exemplo, o Test Datapool irá armazenar os dados que serão repetidos no cadastro de
chamada técnica para avaliar se a aplicação permite gravar os dados sem que todos os campos
tenham sido preenchidos ou preenchidos com dados inválidos, como pode ser observado Na
Figura 1

Figura 1

4
Dessa forma, apenas um único script deverá ser capturado. Durante a captura (Capture) ou
posteriormente, todos os dados constantes, poderão ser trocados por referências aos dados
contidos no Test Datapool, como pode ser visto na Listagem 2. Como notado no trecho de
código da Listagem 2, os dados constantes foram trocados por comandos em Java que
representam o mecanismo utilizado pelo Rational Functional Tester para referenciar os dados
contidos no Test Datapool.

Assim, em vez do dado constante “Marcos”, você encontrará o comando
inputChars(dpString(“AbertoPor”)). O Rational Functional Tester, por sua vez, durante a
execução do teste automatizado trocará todas as referências pelos dados contidos no Test
Datapool. Dessa forma, a execução do teste se repetirá enquanto existirem dados no Test
Datapool. Uma das principais vantagens dessa abordagem é a reutilização dos scripts, o que
conseqüentemente diminui a complexidade e o tempo de manutenção.
Por outro lado, nesta abordagem também existe uma forte dependência da estabilidade da
interface gráfica. Se a interface gráfica mudar, os testes falham. Além disso, os mecanismos
oferecidos pelas ferramentasde automação que permitem a criação de testes automatizados
dirigidos a dados não são muito robustos. Muitas vezes não é possível criar testes dirigidos a
dados aninhados com outros testes dirigidos a dados ou definir critérios para usar apenas um
subconjunto dos dados existentes com base em alguma condição durante a execução do teste.
É importante destacar que o conceito de testes automatizados dirigidos a dados é muito mais
amplo do que possa parecer. Apesar de classificarmos essa abordagem como uma abordagem de
teste automatizado independente e baseada na interface gráfica, ela pode ser aplicada em
qualquer outro tipo de teste automatizado descrito.

5
Testes automatizados baseados na linha de comando (Command Line Interface - CLI)
Uma Interface de Linha de Comando (Command Line Interface - CLI) fornece um
mecanismo no qual o usuário pode interagir com a aplicação por meio de um prompt ou shell do
sistema operacional. Via de regra, a lógica de negócio da aplicação pode ser exercitada por meio
da execução de um conjunto de comandos e parâmetros pré-determinados.
A CLI interpreta os comandos e parâmetros, executa a função selecionada e apresenta o
resultado. O objetivo da CLI é fornecer uma interface para o mundo exterior que não seja
dependente da interface gráfica da aplicação. A automação de testes baseada na linha de
comando faz uso dessa característica para orquestrar a execução dos testes.
Dessa forma, é possível criar scripts shell ou batch para exercitar algumas funcionalidades da
aplicação sem que seja necessário utilizar uma interface gráfica. A título de exemplo, observe no
código abaixo, como é possível realizar testes automatizados de impressão do Microsoft Word
por meio da linha de comando:
FOR %%c in (C:*.doc) DO
winword.exe %%c /q /n /mFilePrintDefault /
mFileExit

Apesar de simples, o exemplo anterior é bastante interessante. Basicamente, o script batch
varre todos os arquivos *.doc do diretório. Para cada arquivo, o Word é aberto (instanciado sem
interface gráfica), o arquivo é impresso e então o Word é fechado. Com algumas poucas
modificações, a impressão poderia ser redirecionada a um arquivo ao invés da impressora e
podíamos executar algum outro programa para comparar os arquivos gerados contra arquivos
pré-definidos (gerados previamente para serem usados como base de comparação).
A principal vantagem dessa abordagem é a baixa exigência de modificações na aplicação
para expor uma interface de linha de comando para o mundo exterior. Normalmente, essas
modificações são simples e exigem pouca intervenção no código da aplicação. Por outro lado, as
interfaces de linha de comando são pouco flexíveis, principalmente quando é necessário passar
parâmetros complexos para executar a funcionalidade.
Além disso, scripts shell ou batch não são muito robustos para capturar e manipular os
resultados das operações, ou até mesmo, para realizar testes que necessitem de laços de
repetições e condições complexas.

6
Testes automatizados baseados em API (Application Programming Interface)
Uma API (Application Programming Interface ou Interface de Programação de Aplicativos)
representa um conjunto de operações expostas por uma aplicação a fim de permitir que outras
aplicações possam acessar ou consumir as suas funcionalidades. O objetivo de uma API é
fornecer uma interface para o mundo exterior que não seja dependente da interface gráfica da
aplicação.
A automação de testes baseada na API faz uso dessa característica para orquestrar a execução
dos testes. Para ilustrar um exemplo prático, a Listagem 3 (figura abaixo) demonstra como é
possível realizar testes automatizados baseados na API exposta pelo Microso Word.

Percebe-se no exemplo que o Word expõe via API praticamente todas as suas
funcionalidades. Neste exemplo, foi possível instanciar o Word, abrir um documento, digitar um
texto, mudar a formatação do texto, abrir a janela para localizar um texto e por fim finalizar o
Word.
Em geral as APIs oferecem um mecanismo mais robusto para exercitar as funcionalidades da
aplicação, se compararmos com os testes automatizados baseados na linha de comando. Uma
API pode expor virtualmente todas as funcionalidades de uma aplicação.
Em termos práticos, isto significa que a principal vantagem dessa abordagem é a criação de
testes complexos e robustos por meio de uma linguagem de programação de alto nível (Java,
C++, C#, etc). Por esta razão, os testes automatizados baseados em API viabilizam a criação de
testes automatizados com maior profundidade e amplitude, sem que seja necessário interagir com
a interface gráfica da aplicação.
Os testes automatizados baseados em API representam a evolução natural dos testes
automatizados baseados na linha de comando. No entanto, a robustez e a flexibilidade oferecidas
por esta abordagem exigem grandes modificações no código da aplicação para criar e expor as
APIs ao mundo exterior.

7
Test Harness
O Test Harness é um tipo de automação de testes baseado na Lógica de Negócio que prega o
uso racional e inteligente da automação. O Test Harness pode ser implementado por meio de um
pequeno programa construído para testar uma API, uma interface de linha de comando, ou até
mesmo ganchos “Hooks” projetados na aplicação para este fim.
Um ganho, ou Hook, é uma funcionalidade ou comportamento da aplicação que não tem
valor do ponto do vista do usuário final. Normalmente não é documentado nem acessível pela
interface gráfica. Mas, no entanto, é um recurso que tem a finalidade de tornar a aplicação mais
fácil de testar (testabilidade), tanto do ponto de vista do teste manual, quanto do teste
automatizado.
Nesta abordagem, não importa o meio no qual o teste será realizado (contanto que não ocorra
interação com a interface gráfica). O objetivo é exercitar as funcionalidades críticas da aplicação
que exigem dezenas e milhares de cálculos ou repetições virtualmente impossíveis (ou
demoradas) de serem testadas por meios normais. Para ilustrar, consideremos um exemplo
prático e simples. Suponha que seja necessário simular 10 mil tipos de vendas diferentes numa
aplicação hipotética. As variáveis destas vendas incluem centenas de tipos de produtos
diferentes, diversas formas de pagamentos, alíquotas diferentes e combinações entre todas essas
variáveis.
Entretanto, o objetivo do teste não é a realização das vendas, mas exercitar e validar o
mecanismo (funcionalidade) que gera os arquivos com os dados dos boletos de cobrança. Os
bancos usam o padrão FEBRABAN CNAB 400 ou 240 para intercambiar informações
digitalmente entre o sistema de informática do banco e o do cliente (ou seja, a aplicação que será
testada).
A realização dos testes desse cenário hipotético por meio de uma abordagem de testes
manuais seria enfadonha (repetitiva), demorada e suscetível a erros. A realização dos testes deste
cenário por meio da automação baseada na interface gráfica também seria muito demorada.
Tanto para gravar e criar os testes quanto para reproduzi-los. Além disso, as ferramentas de
automação de testes baseadas na interface gráfica nem sempre oferecem recursos para o
desenvolvimento de um mecanismo robusto para realizar validações complexas, tal qual as
validações que deverão ser realizadas nos arquivos bancários do nosso exemplo.
Por outro lado, um Test Harness é a combinação da criação de um pequeno programa
utilizando uma linguagem de programação robusta (Java, C++, C#, etc) e a decisão inteligente de
criar somente a API ou interface de linha de comando necessária para a realização do teste.
Assim, para executar os testes do cenário exposto anteriormente por meio de um Test Harness,
será necessário primeiro criar uma API, Hook, ou interface de linha de comando para expor ao
mundo exterior a funcionalidade que cadastra as vendas e a funcionalidade que gera os arquivos
com os dados dos boletos de cobrança.
Também será necessário criar o Test Harness propriamente dito, ou seja, um pequeno
programa desenvolvido em uma linguagem de programação (Java, C++, C#, etc) cujo único
objetivo é realizar o teste em questão (por meio da API, Hook, ou interface de linha de comando
8
criada para este fim). Uma vez que esta infra-estrutura estiver pronta, será possível executar os
testes baseados num Test Harness. Basicamente, o Test Harness deverá ler um arquivo de
entrada contendo todos os dados das vendas.
Com base nesses dados, o Test Harness exercitará as funcionalidades da aplicação por meio
de uma API ,ou outro mecanismo, sem interagir com a interface gráfica. A aplicação, por sua
vez, irá gerar os arquivos com os dados dos boletos de cobrança com base nas informações e
ações realizadas pelo Test Harness. Por fim, o Test Harness deverá comparar os arquivos gerados
pela aplicação contra arquivos pré-definidos (gerados previamente para serem usados como base
de comparação) e apresentar os resultados indicando os testes que foram executados com
sucesso ou falharam (Figura 2).

Figura 2

Dessa forma, conforme mencionado anteriormente, este tipo de automação de testes prega o
uso racional e inteligente da automação. Em termos práticos, isto significa que os esforços e as
modificações requeridas para utilizar o Test Harness são muito menores se compararmos com os
testes automatizados baseados em API.
Além disso, normalmente a velocidade da execução de um Test Harness é substancialmente
maior do que outras abordagens, em virtude de que o Test Harness é um pequeno programa
especializado apenas em uma única função. Isto torna o Test Harness a melhor opção para a
realização de testes que exigem centenas de milhares de repetições, testes de funcionalidades que
realizam cálculos complexos e assim por diante.
9
Referências

Caetano, Introdução à Automação de Testes Funcionais. Disponível em:
http://www.testexpert.com.br/?q=node/178. Acessado em 15/07/2013

Garcia, Introdução à Automação de Testes. Disponível em:
http://www.garcia.pro.br/EngenhariadeSW/artigos%20engsw/teste/teste%20de%20software%20
-%20artigo%203%20-%20rev4%20-%20automacao%20de%20teste%20de%20sw.pdf .
Acessado em 15/07/2013

IBM, Testes Funcionais. Disponível em: http://www306.ibm.com/software/awdtools/tester/functional/. Acessado em 15/07/2013

10

Mais conteúdo relacionado

PDF
Palestra GUTS - Viabilidade da Automacao Teste Software e Demo QTP
PDF
Demoiselle Behave - Parte 4
PDF
Artigo Automação de testes funcionais com Demoiselle Behave
PDF
Fundamentos de Teste de Software - Dev in PF. por Aline Zanin
PDF
Demoiselle Behave - Parte 3
PPT
X-Zone Road-Map 2009
PDF
Demoiselle Behave - Parte 2
PDF
Palestra GUTS - Viabilidade da Automacao Teste Software e Demo QTP
Demoiselle Behave - Parte 4
Artigo Automação de testes funcionais com Demoiselle Behave
Fundamentos de Teste de Software - Dev in PF. por Aline Zanin
Demoiselle Behave - Parte 3
X-Zone Road-Map 2009
Demoiselle Behave - Parte 2

Mais procurados (20)

PDF
Introdução a Programação Orientada a testes
PPT
Reusabilidade na Utilização de Frameworks Automatizados
PPTX
PDC - Testes - Usando o Testlink
PPT
Curso Básico de Selenium
ODP
Test link
PDF
Demoiselle Behave - Parte 1
PPT
Testes de Software
PPT
Testlink apresentacao
PPTX
Sobre TDD - Tech Friday da Everis Uberlândia
PPTX
BDD (Behavior-Driven Development) - Setembro/2015
PDF
Leitor de Códigos no Android com Barcode Scanner API - ZXing
DOCX
Exercícios teste de software
PDF
Testes Funcionais - Unidade IV
PDF
Tdd com Node.js
PPT
Treinamento Testes Unitários - parte 2
PPT
Testes de software
PDF
Facilitando o desenvolvimento orientado a testes em aplicações PHP
KEY
Arquitetura de Software
PPTX
Plano de teste
PPTX
TDD na Prática
Introdução a Programação Orientada a testes
Reusabilidade na Utilização de Frameworks Automatizados
PDC - Testes - Usando o Testlink
Curso Básico de Selenium
Test link
Demoiselle Behave - Parte 1
Testes de Software
Testlink apresentacao
Sobre TDD - Tech Friday da Everis Uberlândia
BDD (Behavior-Driven Development) - Setembro/2015
Leitor de Códigos no Android com Barcode Scanner API - ZXing
Exercícios teste de software
Testes Funcionais - Unidade IV
Tdd com Node.js
Treinamento Testes Unitários - parte 2
Testes de software
Facilitando o desenvolvimento orientado a testes em aplicações PHP
Arquitetura de Software
Plano de teste
TDD na Prática
Anúncio

Semelhante a Tipos de automação de teste (20)

PPTX
Introdução a testes automatizados
PPTX
Testes automatizados.pptx
PPS
Automação de testes para equipes agile
PPTX
Por que automatizar testes de software?
PDF
Ferramentas de Gestão de Testes
PPSX
Apresentação proposta de processo e estrutura técnica para implantação de tes...
PPSX
Apresentação proposta de processo e estrutura técnica para implantação de tes...
PDF
Automação de Testes
PDF
Qualidade e Testes de Software
PDF
Testes Funcionais e Estruturais utilizando Selenium IDE e Cobertura
PPTX
Palestra TDD - TDC - 2016
PDF
TDD com Python (Completo)
PPSX
Apresentação proposta de processo e estrutura técnica para implantação de tes...
PPT
Testes de Software.ppt
PPTX
Automação de Testes de Software (Campus Party)
PPT
ybr789try
PPT
Metodologia de-testes
PPTX
A importância de utilizar testes automatizados
PPTX
Melhorando a qualidade do software com testes de ponta a-ponta
PDF
TCC Virgilio Rocha Ximenes
Introdução a testes automatizados
Testes automatizados.pptx
Automação de testes para equipes agile
Por que automatizar testes de software?
Ferramentas de Gestão de Testes
Apresentação proposta de processo e estrutura técnica para implantação de tes...
Apresentação proposta de processo e estrutura técnica para implantação de tes...
Automação de Testes
Qualidade e Testes de Software
Testes Funcionais e Estruturais utilizando Selenium IDE e Cobertura
Palestra TDD - TDC - 2016
TDD com Python (Completo)
Apresentação proposta de processo e estrutura técnica para implantação de tes...
Testes de Software.ppt
Automação de Testes de Software (Campus Party)
ybr789try
Metodologia de-testes
A importância de utilizar testes automatizados
Melhorando a qualidade do software com testes de ponta a-ponta
TCC Virgilio Rocha Ximenes
Anúncio

Mais de Marcos Pessoa (11)

PDF
Protocolo FTP e DNS
PPTX
Data warehousing - Técnicas e procedimentos
DOCX
Modelo entidade-relacionamento - SIGEM (sistema de gestão de materiais)
PDF
Ferramentas de automação de teste
PDF
Teste de software
PPTX
Inovacao Organizacional - App's tecnologia mobile
PDF
Etnografia e usabilidade
PDF
Exercise Planning - Uma ferramenta de apoio ao meio educacional
PDF
Plano do projeto de software SIGEM - Sistema de gestão de materiais
PPTX
Sistemas de controle de versão
PPT
Petic Marinha
Protocolo FTP e DNS
Data warehousing - Técnicas e procedimentos
Modelo entidade-relacionamento - SIGEM (sistema de gestão de materiais)
Ferramentas de automação de teste
Teste de software
Inovacao Organizacional - App's tecnologia mobile
Etnografia e usabilidade
Exercise Planning - Uma ferramenta de apoio ao meio educacional
Plano do projeto de software SIGEM - Sistema de gestão de materiais
Sistemas de controle de versão
Petic Marinha

Último (20)

PDF
cadernodoprofessor20142017vol2baixalceducfisicaef6s7a-170409213016.pdf manual...
DOC
PPP 2024 (2) (2) feito EM REELABORAÇÃO MORENA ( ABRIL 2024).doc
PPTX
Primeiros Socorros. Aula 1 VEROUVIRSENTIR.pptx
PPT
YY2015MM3DD6HH12MM42SS3-Organiza__o do Estado ILP.ppt
PPSX
A epistemologia de Wilheim G Leibniz.ppsx
PPTX
AULA 01 - INTRODUÇÃO AO ATENDIMENTO HUMANIZADO.pptx
PDF
DESCCARTE DE MATERIAIS BIOLOGICO ESTUDO DA ODONTOLOGIA
PDF
Fiqh da adoração (islamismo)
PPT
Elementos constituintes do esquema argumentativo (tese, argumento, tema, pont...
PPTX
Fronteiras e soberania..........................pptx
PPTX
Slides Lição 8, CPAD, Uma Igreja que Enfrenta os seus Problemas, 3Tr25.pptx
PPT
1ª Telefonia Fixa Padrao Novo Jailton 2012_22.ppt
PPT
Aula de Sociologia 22022022154507AULA 2.ppt
PDF
HABILIDADES POR BIMESTRES HABILIDADES POR BIMESTRES HABILIDADES POR BIMESTRES...
PPTX
1. A Cultura do Palco - muitos palcos, um espetáculo.pptx
PPT
Domínios Morfoclimáticos.................................
PPTX
125511 - Aula 1 - América portuguesa antes da conquista patrimônio e preserva...
PPTX
PERÍODO SIMPLES - TERMOS ESSENCIAIS DA ORAÇÃO - Valdeci.pptx
PDF
Urbanização no Brasil LEVANDO EM CONTA CONCEITOS
PPTX
Aula 01 introdução a Psicologia Escolar.pptx
cadernodoprofessor20142017vol2baixalceducfisicaef6s7a-170409213016.pdf manual...
PPP 2024 (2) (2) feito EM REELABORAÇÃO MORENA ( ABRIL 2024).doc
Primeiros Socorros. Aula 1 VEROUVIRSENTIR.pptx
YY2015MM3DD6HH12MM42SS3-Organiza__o do Estado ILP.ppt
A epistemologia de Wilheim G Leibniz.ppsx
AULA 01 - INTRODUÇÃO AO ATENDIMENTO HUMANIZADO.pptx
DESCCARTE DE MATERIAIS BIOLOGICO ESTUDO DA ODONTOLOGIA
Fiqh da adoração (islamismo)
Elementos constituintes do esquema argumentativo (tese, argumento, tema, pont...
Fronteiras e soberania..........................pptx
Slides Lição 8, CPAD, Uma Igreja que Enfrenta os seus Problemas, 3Tr25.pptx
1ª Telefonia Fixa Padrao Novo Jailton 2012_22.ppt
Aula de Sociologia 22022022154507AULA 2.ppt
HABILIDADES POR BIMESTRES HABILIDADES POR BIMESTRES HABILIDADES POR BIMESTRES...
1. A Cultura do Palco - muitos palcos, um espetáculo.pptx
Domínios Morfoclimáticos.................................
125511 - Aula 1 - América portuguesa antes da conquista patrimônio e preserva...
PERÍODO SIMPLES - TERMOS ESSENCIAIS DA ORAÇÃO - Valdeci.pptx
Urbanização no Brasil LEVANDO EM CONTA CONCEITOS
Aula 01 introdução a Psicologia Escolar.pptx

Tipos de automação de teste

  • 1. Teste de Software Tipos de automação de teste Manaus, 2013 1
  • 2. Marcos Felipe Paes Pessoa 20902016 ◦Testes automatizados dirigidos a dados (Data-Driven) ◦Testes automatizados baseados na linha de comando (Command Line Interface – CLI) ◦Testes automatizados baseados em API (Application Programming Interface) ◦Test Harness Manaus, 2013 2
  • 3. Menu Testes automatizados dirigidos a dados (Data-Driven) ................................................................................ 4 Testes automatizados baseados na linha de comando (Command Line Interface - CLI) ............................. 6 Testes automatizados baseados em API (Application Programming Interface) ........................................... 7 Test Harness .................................................................................................................................................. 8 Referências.................................................................................................................................................. 10 3
  • 4. Testes automatizados dirigidos a dados (Data-Driven) Os testes automatizados dirigidos a dados representam um refinamento dos testes baseados na interface gráfica. Basicamente, nesta abordagem, é utilizado um mecanismo para auxiliar a execução de testes que executam as mesmas ações repetidamente, porém com dados diferentes. Uma das principais vantagens dessa abordagem é a reutilização dos scripts, o que conseqüentemente diminui a complexidade e o tempo de manutenção. Um exemplo seria um cadastro de chamadas técnicas. Digamos que seja necessário criar vários testes a fim de avaliar se a aplicação permite gravar os dados sem que todos os campos tenham sido preenchidos ou preenchidos com dados inválidos. Neste caso, as ações seriam as mesmas, apenas os dados preenchidos nos campos mudariam. Na abordagem de testes baseados na interface gráfica, teríamos que capturar e gerar diversos scripts de testes. No entanto, à medida que se queira criar centenas ou milhares de scripts de testes, as coisas começam a se complicar. O tempo para capturar e gerar os scripts de teste aumenta consideravelmente. Além disso, a complexidade e o tempo para dar manutenção nesses scripts também aumentam exponencialmente. Por meio da criação de testes automatizados dirigidos a dados, os dados deixam de ser constantes dentro dos scripts e tornam-se variáveis. Para ilustrar, será apresentado um exemplo na prática usando a ferramenta IBM Rational Functional Tester. Esta ferramenta permite a criação de testes automatizados dirigidos a dados por meio da utilização de um mecanismo chamado Test Datapool. O Test Datapool é basicamente uma tabela que armazena os dados variáveis de um ou mais scripts. No exemplo, o Test Datapool irá armazenar os dados que serão repetidos no cadastro de chamada técnica para avaliar se a aplicação permite gravar os dados sem que todos os campos tenham sido preenchidos ou preenchidos com dados inválidos, como pode ser observado Na Figura 1 Figura 1 4
  • 5. Dessa forma, apenas um único script deverá ser capturado. Durante a captura (Capture) ou posteriormente, todos os dados constantes, poderão ser trocados por referências aos dados contidos no Test Datapool, como pode ser visto na Listagem 2. Como notado no trecho de código da Listagem 2, os dados constantes foram trocados por comandos em Java que representam o mecanismo utilizado pelo Rational Functional Tester para referenciar os dados contidos no Test Datapool. Assim, em vez do dado constante “Marcos”, você encontrará o comando inputChars(dpString(“AbertoPor”)). O Rational Functional Tester, por sua vez, durante a execução do teste automatizado trocará todas as referências pelos dados contidos no Test Datapool. Dessa forma, a execução do teste se repetirá enquanto existirem dados no Test Datapool. Uma das principais vantagens dessa abordagem é a reutilização dos scripts, o que conseqüentemente diminui a complexidade e o tempo de manutenção. Por outro lado, nesta abordagem também existe uma forte dependência da estabilidade da interface gráfica. Se a interface gráfica mudar, os testes falham. Além disso, os mecanismos oferecidos pelas ferramentasde automação que permitem a criação de testes automatizados dirigidos a dados não são muito robustos. Muitas vezes não é possível criar testes dirigidos a dados aninhados com outros testes dirigidos a dados ou definir critérios para usar apenas um subconjunto dos dados existentes com base em alguma condição durante a execução do teste. É importante destacar que o conceito de testes automatizados dirigidos a dados é muito mais amplo do que possa parecer. Apesar de classificarmos essa abordagem como uma abordagem de teste automatizado independente e baseada na interface gráfica, ela pode ser aplicada em qualquer outro tipo de teste automatizado descrito. 5
  • 6. Testes automatizados baseados na linha de comando (Command Line Interface - CLI) Uma Interface de Linha de Comando (Command Line Interface - CLI) fornece um mecanismo no qual o usuário pode interagir com a aplicação por meio de um prompt ou shell do sistema operacional. Via de regra, a lógica de negócio da aplicação pode ser exercitada por meio da execução de um conjunto de comandos e parâmetros pré-determinados. A CLI interpreta os comandos e parâmetros, executa a função selecionada e apresenta o resultado. O objetivo da CLI é fornecer uma interface para o mundo exterior que não seja dependente da interface gráfica da aplicação. A automação de testes baseada na linha de comando faz uso dessa característica para orquestrar a execução dos testes. Dessa forma, é possível criar scripts shell ou batch para exercitar algumas funcionalidades da aplicação sem que seja necessário utilizar uma interface gráfica. A título de exemplo, observe no código abaixo, como é possível realizar testes automatizados de impressão do Microsoft Word por meio da linha de comando: FOR %%c in (C:*.doc) DO winword.exe %%c /q /n /mFilePrintDefault / mFileExit Apesar de simples, o exemplo anterior é bastante interessante. Basicamente, o script batch varre todos os arquivos *.doc do diretório. Para cada arquivo, o Word é aberto (instanciado sem interface gráfica), o arquivo é impresso e então o Word é fechado. Com algumas poucas modificações, a impressão poderia ser redirecionada a um arquivo ao invés da impressora e podíamos executar algum outro programa para comparar os arquivos gerados contra arquivos pré-definidos (gerados previamente para serem usados como base de comparação). A principal vantagem dessa abordagem é a baixa exigência de modificações na aplicação para expor uma interface de linha de comando para o mundo exterior. Normalmente, essas modificações são simples e exigem pouca intervenção no código da aplicação. Por outro lado, as interfaces de linha de comando são pouco flexíveis, principalmente quando é necessário passar parâmetros complexos para executar a funcionalidade. Além disso, scripts shell ou batch não são muito robustos para capturar e manipular os resultados das operações, ou até mesmo, para realizar testes que necessitem de laços de repetições e condições complexas. 6
  • 7. Testes automatizados baseados em API (Application Programming Interface) Uma API (Application Programming Interface ou Interface de Programação de Aplicativos) representa um conjunto de operações expostas por uma aplicação a fim de permitir que outras aplicações possam acessar ou consumir as suas funcionalidades. O objetivo de uma API é fornecer uma interface para o mundo exterior que não seja dependente da interface gráfica da aplicação. A automação de testes baseada na API faz uso dessa característica para orquestrar a execução dos testes. Para ilustrar um exemplo prático, a Listagem 3 (figura abaixo) demonstra como é possível realizar testes automatizados baseados na API exposta pelo Microso Word. Percebe-se no exemplo que o Word expõe via API praticamente todas as suas funcionalidades. Neste exemplo, foi possível instanciar o Word, abrir um documento, digitar um texto, mudar a formatação do texto, abrir a janela para localizar um texto e por fim finalizar o Word. Em geral as APIs oferecem um mecanismo mais robusto para exercitar as funcionalidades da aplicação, se compararmos com os testes automatizados baseados na linha de comando. Uma API pode expor virtualmente todas as funcionalidades de uma aplicação. Em termos práticos, isto significa que a principal vantagem dessa abordagem é a criação de testes complexos e robustos por meio de uma linguagem de programação de alto nível (Java, C++, C#, etc). Por esta razão, os testes automatizados baseados em API viabilizam a criação de testes automatizados com maior profundidade e amplitude, sem que seja necessário interagir com a interface gráfica da aplicação. Os testes automatizados baseados em API representam a evolução natural dos testes automatizados baseados na linha de comando. No entanto, a robustez e a flexibilidade oferecidas por esta abordagem exigem grandes modificações no código da aplicação para criar e expor as APIs ao mundo exterior. 7
  • 8. Test Harness O Test Harness é um tipo de automação de testes baseado na Lógica de Negócio que prega o uso racional e inteligente da automação. O Test Harness pode ser implementado por meio de um pequeno programa construído para testar uma API, uma interface de linha de comando, ou até mesmo ganchos “Hooks” projetados na aplicação para este fim. Um ganho, ou Hook, é uma funcionalidade ou comportamento da aplicação que não tem valor do ponto do vista do usuário final. Normalmente não é documentado nem acessível pela interface gráfica. Mas, no entanto, é um recurso que tem a finalidade de tornar a aplicação mais fácil de testar (testabilidade), tanto do ponto de vista do teste manual, quanto do teste automatizado. Nesta abordagem, não importa o meio no qual o teste será realizado (contanto que não ocorra interação com a interface gráfica). O objetivo é exercitar as funcionalidades críticas da aplicação que exigem dezenas e milhares de cálculos ou repetições virtualmente impossíveis (ou demoradas) de serem testadas por meios normais. Para ilustrar, consideremos um exemplo prático e simples. Suponha que seja necessário simular 10 mil tipos de vendas diferentes numa aplicação hipotética. As variáveis destas vendas incluem centenas de tipos de produtos diferentes, diversas formas de pagamentos, alíquotas diferentes e combinações entre todas essas variáveis. Entretanto, o objetivo do teste não é a realização das vendas, mas exercitar e validar o mecanismo (funcionalidade) que gera os arquivos com os dados dos boletos de cobrança. Os bancos usam o padrão FEBRABAN CNAB 400 ou 240 para intercambiar informações digitalmente entre o sistema de informática do banco e o do cliente (ou seja, a aplicação que será testada). A realização dos testes desse cenário hipotético por meio de uma abordagem de testes manuais seria enfadonha (repetitiva), demorada e suscetível a erros. A realização dos testes deste cenário por meio da automação baseada na interface gráfica também seria muito demorada. Tanto para gravar e criar os testes quanto para reproduzi-los. Além disso, as ferramentas de automação de testes baseadas na interface gráfica nem sempre oferecem recursos para o desenvolvimento de um mecanismo robusto para realizar validações complexas, tal qual as validações que deverão ser realizadas nos arquivos bancários do nosso exemplo. Por outro lado, um Test Harness é a combinação da criação de um pequeno programa utilizando uma linguagem de programação robusta (Java, C++, C#, etc) e a decisão inteligente de criar somente a API ou interface de linha de comando necessária para a realização do teste. Assim, para executar os testes do cenário exposto anteriormente por meio de um Test Harness, será necessário primeiro criar uma API, Hook, ou interface de linha de comando para expor ao mundo exterior a funcionalidade que cadastra as vendas e a funcionalidade que gera os arquivos com os dados dos boletos de cobrança. Também será necessário criar o Test Harness propriamente dito, ou seja, um pequeno programa desenvolvido em uma linguagem de programação (Java, C++, C#, etc) cujo único objetivo é realizar o teste em questão (por meio da API, Hook, ou interface de linha de comando 8
  • 9. criada para este fim). Uma vez que esta infra-estrutura estiver pronta, será possível executar os testes baseados num Test Harness. Basicamente, o Test Harness deverá ler um arquivo de entrada contendo todos os dados das vendas. Com base nesses dados, o Test Harness exercitará as funcionalidades da aplicação por meio de uma API ,ou outro mecanismo, sem interagir com a interface gráfica. A aplicação, por sua vez, irá gerar os arquivos com os dados dos boletos de cobrança com base nas informações e ações realizadas pelo Test Harness. Por fim, o Test Harness deverá comparar os arquivos gerados pela aplicação contra arquivos pré-definidos (gerados previamente para serem usados como base de comparação) e apresentar os resultados indicando os testes que foram executados com sucesso ou falharam (Figura 2). Figura 2 Dessa forma, conforme mencionado anteriormente, este tipo de automação de testes prega o uso racional e inteligente da automação. Em termos práticos, isto significa que os esforços e as modificações requeridas para utilizar o Test Harness são muito menores se compararmos com os testes automatizados baseados em API. Além disso, normalmente a velocidade da execução de um Test Harness é substancialmente maior do que outras abordagens, em virtude de que o Test Harness é um pequeno programa especializado apenas em uma única função. Isto torna o Test Harness a melhor opção para a realização de testes que exigem centenas de milhares de repetições, testes de funcionalidades que realizam cálculos complexos e assim por diante. 9
  • 10. Referências Caetano, Introdução à Automação de Testes Funcionais. Disponível em: http://www.testexpert.com.br/?q=node/178. Acessado em 15/07/2013 Garcia, Introdução à Automação de Testes. Disponível em: http://www.garcia.pro.br/EngenhariadeSW/artigos%20engsw/teste/teste%20de%20software%20 -%20artigo%203%20-%20rev4%20-%20automacao%20de%20teste%20de%20sw.pdf . Acessado em 15/07/2013 IBM, Testes Funcionais. Disponível em: http://www306.ibm.com/software/awdtools/tester/functional/. Acessado em 15/07/2013 10