Post

1 Star2 Stars3 Stars4 Stars5 Stars
Loading ... Loading ...

By Jailton Alkimin Louzada
Testes dirigido a dados (data-driven testing) normalmente são muito utilizados quando se tem uma lógica aplicada nos testes que pode ser muito re-utilizada, porém o que se deseja é variar a massa de dados que será utilizada para testar o sistema. Caso queria aprender mais a respeito, experimente esse link.
Considerando esse cenário, desenvolvi uma pequena e simples arquitetura de testes usando essa metodologia de testes dirigidos a dados.
Funcionamento da Arquitetura:

Em termos de utilização, basicamente iremos mexer em uma classe: Tests.class que será a classe que conterá os scritps e dados para conexão do selenium, e então trataremos toda a massa de dados nos arquivos CSV que deveremos criar na pasta dentro do projeto chamada “DataStorage”.
Essa arquitetura foi projetada da seguinte forma: Os testes serão orientados aos dados que estarão no arquivo CSV respectivo a classe que conterá os scripts de teste, ou seja, como estamos usando a classe Tests.class para rodar os scripts do Selenium, então obrigatoriamento o nome do arquivo CSV deverá ser Tests.csv (que deverá estar contido na pasta DataStorage).
Como posso ter vários casos de testes (metodos com annotation @Test) nessa classe Tests.class, então defini que os métodos que usaram DataProvider somente utilizarão massas de dados que forem definidas para ele no arquivo CSV, ou seja, deverá ser definido no arquivo CSV um bloco de informações delimitado por { e } com o nome do método/caso de teste que o utilizará, como mostrado na figura 1 .

Caso de teste:
@Test(dataProvider=”DataDriven”,dataProviderClass = DataDrivenProvider.class)
public void testCase1(ArrayList valor)

Figura 1

4. Algumas particularidades para montagem do arquivo CSV devem ser observadas:

As informações deverão ser organizadas somente em uma coluna;
Os valores devem ser separado por virgulas (CSV – Comman-Separated Values!!);
O programa descarta linhas que comecem com “#”, ou seja, são comentários que podem ser inseridos a vontade no arquivo CSV;
Os blocos de informações devem sempre iniciar e fechar respectivamente com { e };
O nome do bloco que define os valores para cada caso de teste deverão ser o mesmo dos métodos que os usarão;

Relembrando que o nome do arquivo deverá ser o nome da Classe que conterá os scripts que usarão o DataProvider e que deverão estar na pasta “DataStorage”.

Códigos Fontes:
Classe: Tests.class, que contém os scripts para teste do Selenium.
package com.jailtonalkiminlouzada.control;
import java.util.ArrayList;

import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

import com.jailtonalkiminlouzada.provider.DataDrivenProvider;
import com.thoughtworks.selenium.DefaultSelenium;
import com.thoughtworks.selenium.Selenium;

/**
* @author Jailton Alkimin Louzada
* www.jailtonalkiminlouzada.com
*/

public class Tests {

Selenium selenium;
String URL = “http://www.google.com”;
public static String DataStorage = System.getProperty(“user.dir”) + “DataStorage”;

@BeforeTest
public void setup() throws Exception
{
selenium = new DefaultSelenium(“localhost”, 4444, “*firefox”, URL);
selenium.start();
selenium.windowMaximize();
selenium.windowFocus();
}

@Test(dataProvider=”DataDriven”,dataProviderClass = DataDrivenProvider.class)
public void testCase1(ArrayList valor){

for (String EachValue : valor) {

selenium.open(“/”);
selenium.type(“q”, EachValue);
selenium.click(“btnG”);
}

}

@AfterTest
public void finaliza() throws Exception
{
selenium.stop();
}
}
Classe: CsvReader.class, que faz a leitura da massa de dados no arquivo CSV.
package com.jailtonalkiminlouzada.data;

import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import au.com.bytecode.opencsv.CSVReader;

/**
* @author Jailton Alkimin Louzada
* www.jailtonalkiminlouzada.com
*/

public class CsvReader {

/* Método realiza a leitura de determinada Demanda apartir de uma arquivo txt nomeado com
* o nome da classe de teste, logo a pós realiza uma consulta no arquivo txt pegando somente
* os valores da determinada demanda. *
* */

public ArrayList getDemanda(String massaDeDados, String demanda) throws IOException{

CSVReader reader = new CSVReader(new FileReader(massaDeDados),’,’);
String[] nextLine = null;
ArrayList arrayDemanda = new ArrayList();
boolean setStatus = false;
Pattern padrao = Pattern.compile(demanda+”*”);
Matcher pesquisa = null;
Pattern patternComent = Pattern.compile(“# *”);
Matcher retiraComent = null;
nextLine = reader.readNext();

do{
retiraComent = patternComent.matcher(nextLine[0]);
pesquisa = padrao.matcher(nextLine[0]);

// encontra o pattern para a demanda especifica
if (pesquisa.find()) {
nextLine = reader.readNext();
setStatus = true;
}

// seta como faço quando o bloco da demanda for encontrado
if(nextLine[0].equals(“}”)){
setStatus = false;
}

//não deixa gravar comentários de linha ‘#’
if (retiraComent.find()) {
nextLine = reader.readNext();
}

//não deixa gravar espaçamentos
if (nextLine[0].equals(” “)) {
nextLine = reader.readNext();
}

//somente permite gravar no array os valores setados para a demanda
if (setStatus == true) {

arrayDemanda.add(nextLine[0]);
}

}while ((nextLine = reader.readNext()) != null);

return arrayDemanda;
}

}
Classe: DataDrivenProvider.class, que retorna para a classe com os scripts a massa de dados para que possa ser utilizada nos testes.
package com.jailtonalkiminlouzada.provider;

import java.io.IOException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import org.testng.annotations.*;
import com.jailtonalkiminlouzada.control.Tests;
import com.jailtonalkiminlouzada.data.CsvReader;

/**
* @author Jailton Alkimin Louzada
* www.jailtonalkiminlouzada.com
*/

public class DataDrivenProvider extends Tests {

@DataProvider(name = “DataDriven”)
public static Object[][] DataDriven(Method m ) {

String nomeTestCase = m.getName();
String nomeClasse = m.getDeclaringClass().getSimpleName();
ArrayList arrayRetornoDemanda = new ArrayList();
CsvReader obj = new CsvReader();

try {

arrayRetornoDemanda = obj.getDemanda(DataStorage+nomeClasse+”.csv”, nomeTestCase );

} catch (IOException e) {

System.out.println(“Arquivo “+nomeClasse+”.txt Não Econtrado!!! “+e);
}

return new Object[][]{{arrayRetornoDemanda}};
}
}
Código Fonte do projeto: Link (sem selenium-server.jar)

Source: http://www.jailtonalkiminlouzada.com/2010/10/arquitetura-de-testes-com-o-selenium-para-testes-dirigidos-a-dados-data-driven-testing/

Category: Selenium-RC

Você também pode querer ler

Comments are off for this post.