Avançar para a área de conteúdo

ir para o conteúdo principal

developerWorks Brasil  >  Rational  >

Incorporando Recursos Externos no IBM Rational Functional Tester

Mais maneiras de usar ferramentas de automação existentes

developerWorks
Opções de documento

Opções de documento que necessitam de JavaScript não são exibidas


Classificar esta página

Ajude-nos a melhorar este conteúdo


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.



Voltar para parte superior


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
É necessário fechar o diálogo do Internet Explorer

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...
}
        



Voltar para parte superior


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();
	}
}



Voltar para parte superior


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();
        }
        



Voltar para parte superior


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

Obter produtos e tecnologias

Discutir


Sobre o autor

Author Photo

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


Reserve um instante para completar este formulário para nos ajudar a servi-lo melhor.



 


 


Não
são úteis
Extremamente
úteis