 | Nível: Introdutório Shalini Gilra, Automation Lead, IBM
02/Jul/2009 É possível usar os recursos do IBM® Rational® Functional Tester para melhorar seus relatórios e scripts. Este artigo mostra como torná-los mais poderosos e cheios de recursos usando os recursos disponíveis para trabalhar com processos, enviar e-mail, criar capturas de telas, customizar relatórios, criar arquivos de propriedades externas e gerar dados exclusivos.
O artigo ensina como usar diversas ferramentas e módulos para aprimorar a automação fornecida pelo IBM® Rational® Functional Tester. Apesar de muitos desses recursos já poderem fazer parte da estrutura usada para gravar casos de teste, você pode ter ignorado ou não estar ciente dos mesmos. Além disso, podem ser realmente úteis se você estiver escrevendo etapas de teste sem uma estrutura subjacente.
Este artigo foca como:
- Usar dados externos ou arquivos de propriedades
- Ativar o processo-filho para aprimorar os recursos
- Registrar em log os resultados de reprodução e as capturas de tela no ponto de falha
- Enviar relatórios em um e-mail
- Executar funções a partir do prompt de comandos
Arquivo de Propriedades Externas
Separar seus dados de teste do código de origem é uma maneira efetiva de escrever etapas de teste. Isso facilita a incorporação de mudanças e a criação de etapas de teste dinâmicas. Isso pode ser alcançado usando:
- Conjuntos de dados no Rational Functional Tester
- Um banco de dados externo, como o IBM® DB2®
- Um arquivo de propriedades
Consulte Recursos para obter ajuda com conjuntos de dados e bancos de dados externos.
Se seus valores de dados forem bidimensionais e não for necessário salvar dados no tempo de execução, é possível optar por usar um arquivo de propriedades externo em vez de um conjunto de dados ou banco de dados externo. Essa alternativa é muito mais fácil de tratar e é possível editar o arquivo sem compilar o código de origem novamente. A Listagem 1 mostra um arquivo de propriedades de amostra e a a Listagem 2 fornece um código de amostra para a leitura da propriedade gsTestURL a partir do arquivo dataset.properties.
Listagem 1. Arquivo de Propriedades (dataset.properties)
#Test Server URL
gsTestURL=https://www.gmail.com/
#Test user name
gsTestUsername=testmail@gmail.com
#Test user password
gsTestPassword=passw0rd
#Compose mail subject
gsMailSubject=RFTAutomation
|
Listagem 2. Código para Ler o Arquivo de Propriedades Acima
import java.io.File;
import java.io.FileInputStream;
import java.util.Properties;
....
....
Properties prop = new Properties();
String sPropVal = "";
String sFilename = "c:\\dataset.properties";
try{
File file = new File(fileName);
if (!file.exists())
{
System.err.println("Error - property file " + fileName + " does not exist.");
}
//assign property value
try{
FileInputStream fInputStream = null;
try {
fInputStream = new FileInputStream(file);
prop.load(fInputStream );
} finally {
if (fInputStream != null) {
fInputStream.close();
}
}
sPropVal = prop.getProperty("gsTestURL");
} catch(Exception e){
System.err.println("Error - reading property from file "
+ fileName + ".");
} |
É boa prática gerar um valor de entrada exclusivo para cada execução da automação. É possível fazer isso anexando um valor baseado em dados em seu valor de dados, que fornece um valor exclusivo. Por exemplo, suponhamos que você anexe uma data no formato YYYYMMDDHHmmss (como 20090521125034) para gsMailSubject. Isso irá produzir RFTAutomation_20090521125034, que é um valor exclusivo para uma reprodução não paralela.
Trabalhando com um Processo-filho
Há momentos em que é preciso chamar um processo-filho no Rational Functional Tester. Um exemplo clássico é um travamento de navegador com uma caixa de diálogo modal exibida, conforme mostrado na Figura 1. Essa circunstância faz com que o navegador congele, de forma que o Rational Functional Tester emita exceções ao tentar trabalhar com esse navegador, mas não pode fechá-lo. Nessa situação, é melhor simplesmente encerrar o processo do navegador e iniciar um novo.
Figura 1. Captura de Tela de um Travamento de Navegador
O exemplo no código da Listagem 3 usa a classe Runtime para chamar o aplicativo Taskkill.exe no Windows XP Professional para efetuar kill do processo iexplore.exe. O método exec da classe Runtime pode ser usado para chamar qualquer outro aplicativo ou processo no Rational Functional Tester. Uma alternativa a isso é shellExecute();
Listagem 3. Usando o Método exec da Classe Runtime
Runtime rt = Runtime.getRuntime();
String[] callArgs = { "Taskkill.exe", "/F", "/IM", "iexplore.exe" };
try {
Process child = rt.exec(callArgs);
child.waitFor();
System.out.println("Exit code is: " + child.exitValue());
} catch (IOException ioe) {
// output your exception here...
} catch (InterruptedException ie) {
// output your exception here...
}
|
Formatar seu Próprio Relatório
A tarefa principal em qualquer automação de testes é gravar e executar as etapas de teste usando uma linguagem de script. No entanto, outra tarefa igualmente importante é capturar e registrar em log os resultados de forma efetiva. Caso não você realize isso, o propósito principal da automação não é atendido. Os resultados da automação podem ser usados não apenas para indicar Passou ou Falhou, mas também para depurar quaisquer defeitos de codificação de automação em potencial e para usar as informações para reproduzir os defeitos do aplicativo de destino descobertos.
Apesar de o Rational Functional Tester gerar um relatório no final de cada execução, ler e analisar esse relatório pode, às vezes, ser difícil, consumir tempo ou ser frustrante. Considere gravar seu próprio relatório e torná-lo fácil e simples, fácil de ler e customizado para as necessidades de sua organização. É possível registrar em log cada ação, o que será útil ao depurar e analisar sua execução para determinar o ponto de falhas do script. Também é possível imprimir as exceções nesse relatório e colar uma captura da exibição da tela no momento.
Captura de Tela
Capturar a exibição da tela ajuda a determinar o estado no qual o aplicativo estava no momento da falha. A Listagem 4 fornece código de amostra para capturar toda a visualização do desktop usando a classe Robot .
Listagem 4. Código de Amostra para Capturar Imagem de Tela
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
....
....
public void printScreen(String filename) {
try {
Robot robot = new Robot();
BufferedImage screenShot = robot.createScreenCapture
(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
ImageIO.write(screenShot, "JPG", new File(filename));
} catch (Exception e) {
System.err.println("Unhandled Exception : " + e);
e.printStackTrace();
}
} |
Como Enviar E-mail a partir do Rational Functional Tester
A capacidade de enviar e-mail a partir de seu código atende muitos propósitos. Por exemplo, é possível enviar um relatório ou listar quaisquer erros não cobertos.
O exemplo no código da Listagem 5 envia e-mail com um anexo de arquivo para diversos destinatários. É necessário incluir mailapi.jar e activation.jar no caminho de classe.
Listagem 5. Enviar E-mail a partir de seu Código
import javax.activation.*;
import javax.mail.*;
import javax.mail.internet.*;
....
....
try {
// Set the host smtp address
Properties props = new Properties();
props.put("mail.smtp.host", "smtpDnsName");
Session session = Session.getDefaultInstance(props, null);
session.setDebug(false);
// create a message
Message msg = new MimeMessage(session);
// set the from and to address
InternetAddress addressFrom = new InternetAddress("shagilra@in.ibm.com");
InternetAddress[] addressTo = new InternetAddress[2];
addressTo[0] = new InternetAddress("abc@yahoo.com");
addressTo[1] = new InternetAddress("xyz@gmail.com");
msg.setFrom(addressFrom);
msg.setRecipients(Message.RecipientType.TO, addressTo);
// set the Date: header
msg.setSentDate(new java.util.Date());
// Setting the Subject and Content Type
msg.setSubject(sSubject);
// create and fill the first message part
MimeBodyPart mbp1 = new MimeBodyPart();
mbp1.setContent(sBody, "text/html");
// create the second message part
MimeBodyPart mbp2 = new MimeBodyPart();
// attach the file to the message
FileDataSource fds = new FileDataSource("test.txt");
mbp2.setDataHandler(new DataHandler(fds));
mbp2.setFileName(fds.getName());
// create the Multipart and add its parts to it
Multipart mp = new MimeMultipart();
mp.addBodyPart(mbp1);
mp.addBodyPart(mbp2);
// add the Multipart to the message
msg.setContent(mp);
Transport.send(msg);
} catch (Exception e) {
System.err.println("Unhandled Exception : " + e);
e.printStackTrace();
}
|
 |
Executar o Script a partir da Linha de Comando
Executar o script a partir de um prompt de comando concede ao aplicativo mais RAM para reprodução. A Listagem 6 é uma linha de comando para executar um testpackage.TestScript, que é o script no diretório c:\TestDatastore.
Listagem 6. Executando um Script a partir do Prompt de Comandos
"C:\Program Files\IBM\SDP\jdk\jre\bin\java" -Xmx1024m -classpath "C:\Program Files\IBM\
SDP\FunctionalTester\bin\rational_ft.jar " com.rational.test.ft.rational_ft -datastore
"c:\TestDatastore" -playback testpackage.TestScript |
Como alternativa, é possível incluir a opção –Xmx para especificar a alocação de RAM. Para uma reprodução em máquinas com 2 GB de RAM, use -Xmx1024m, mas para máquinas com 1 GB, use -Xmx512m. Por padrão, com 256 Mb.
Recursos Aprender
- Consulte a demo: Usando Conjuntos de Dados com o IBM Rational Functional Tester, Script Java
- Leia Técnicas Efetivas de Automação de Teste para o Rational Functional Tester
- Siga apenas três etapas para Estabelecer uma Conexão com o Banco de Dados IBM DB2 no IBM Rational Functional Tester
- Aprenda mais sobre o Rational Functional Tester.
- Visite a área de software Rational no developerWorks para obter recursos técnicos e boas práticas para produtos Rational Software Delivery Platform.
- Assine o newsletter da zona do Rational do developerWorks. Acompanhe o conteúdo do Rational do developerWorks. A cada duas semanas, você receberá atualizações sobre os recursos técnicos e boas práticas mais recentes para o Rational Software Delivery Platform.
- Assine o newsletter do Rational Edge para obter artigos sobre os conceitos por trás do desenvolvimento de software efetivo.
- Assine o newsletter do IBM developerWorks, uma atualização semanal sobre os melhores tutoriais, artigos, downloads, atividades de comunidade, Webcasts e eventos do developerWorks.
- Procure na livraria de tecnologia livros sobre esses e outros tópicos técnicos.
- Aprenda sobre outros aplicativos em IBM Rational Software Delivery Platform, incluindo ferramentas de colaboração para desenvolvimento paralelo e equipes geograficamente dispersas, mais software especializado para gerenciamento de arquitetura, gerenciamento de ativos, gerenciamento de mudança e release, gerenciamento de requisitos integrados, gerenciamento de processo e portfólio e gerenciamento de qualidade.
- Visite a área de software Rational no developerWorks para obter recursos técnicos e boas práticas para produtos Rational Software Delivery Platform.
- Explore cursos on-line baseados em computador Rational, baseados na Web e liderado por instrutor. Afie suas qualificações e aprenda mais sobre ferramentas Rational com esses cursos, que variam de introdutórios a avançados. Os cursos desse catálogo estão disponíveis para compra através de treinamento baseado em computador ou treinamento baseado na Web. Além disso, alguns cursos de "Introdução" estão disponíveis gratuitamente.
- Assine o newsletter do Rational Edge para obter artigos sobre os conceitos por trás do desenvolvimento de software efetivo.
- Assine o newsletter do IBM developerWorks, uma atualização semanal sobre os melhores tutoriais, artigos, downloads, atividades de comunidade, webcasts e eventos do developerWorks.
- Procure na livraria de tecnologia livros sobre esses e outros tópicos técnicos.
Obter produtos e tecnologias
Discutir
Sobre o autor  | 
|  | Shalini is an Automation Lead and Deployment Engineer at IBM in Pune, India. She has a varied and rich experience in functional testing, automation, and Level 2 support for IBM WebSphere Portal. She also holds several certifications. |
Avalie esta página
|  |