Rodando seu Teste com TestNG

Posted on 31 de maio de 2010 by Leonardo Galani 4 Comments

Agora que você sabe como gravar seu script de teste com Selenium IDE,  já sabe como converter para java e também esta familiarizado com a estrutura que é gerada, vamos mandar rodar esse script com servidor do selenium (Selenium RC) com uma ajudinha do TestNG.

Bom… porque tanta “parafernalha” para rodar um simples teste?
Na teoria você não precisa de muito. Com apenas o selenium rc, um bloco de notas  e a jdk devidamente instalada + path’s configurados, você consegue escrever seus códigos e mandar compilar em linha de comando, mas esse é o modo “HARDCORE”. Se você é muito chegado destas praticas, vai querer a ferramenta que mais te da suporte, facilita sua vida e ainda faz cafezinho no final da tarde (ou quase isso..rs).

TestNG é um framework desenvolvido especialmente para testes automatizados , seja ele teste unitário,  teste de carga (não é seu foco.. é melhor usar o jmeter) ou teste funcional.
A ideia por trás do TestNG é que não precisa ter uma classe “main” para chamar testes pois ele mesmo faz a gerencia do que é para testar com o uso de “annotations” que definem para que serve cada método.

Ex: Você tem esta planejando 1 teste.. mas sabe que amanha você terá que fazer pelo menos 7 testes diferentes e que precisa fazer um “Setup” antes de cada Teste.

Imagina se você precisasse fazer um método de” setup” a cada teste realizado, e até  mesmo usando orientação a objeto, o projeto ficaria cada vez mais difícil de dar manutenção. Já usando os “annotations” do TestNG, você simplesmente define cada método de teste com ‘@Test‘ e o somente 1 método “setup” com ‘@BeforeTest‘ e pronto, o trabalho de orientação a objeto e modularizar fica a cargo do TestNG. ( para quem já é programador, isso é chover no molhado, mas para quem não é, faz toda a diferença :) )

Agora que você sabe para que o TestNG serve e +- como ele funciona, vamos ver agora ele funcionando de fato.

(a partir desse ponto, estou levando em consideração que o eclipse já esta instalado junto com o plugin do testng)

Lembra daquele nosso codigo gerado pelo Selenium IDE? Vou somente usar o miolo dele (o teste em si) e adaptar o resto para usar TestNG e também para evitar confusão de Junit(eu cometi esse erro..) . Segue o novo código de exemplo que irei usar :

import com.thoughtworks.selenium.*;
import org.testng.annotations.*;
import static org.testng.Assert.*;

public class teste_do_Testng
{
public String BASE_URL = “http://www.google.com”;
public Selenium selenium;

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

@AfterTest
public void finaliza() throws Exception
{
selenium.stop();
}

@Test
public void testUntitled2() throws Exception
{
selenium.open(BASE_URL);
selenium.click(“btnG”);
assertTrue(selenium.isTextPresent(“leonardobg.blog.com/”));
selenium.click(“link=Java, Selenium e Coca Cola”);
selenium.waitForPageToLoad(“30000″);
assertTrue(selenium.isTextPresent(“Java, Selenium e Coca Cola”));
}
}

Ficou um pouco maior do que o que vem com o IDE mas tem suas razões:
1 – Como não estou utilizando o setUp do “Junit” e nem a extensão “SeleneseTestCase”, preciso definir o que é Selinium e  depois inicialo

public Selenium selenium
selenium = new DefaultSelenium("localhost", 4444, "*firefox", BASE_URL);

2 – Criei 2 metodos “setup” e “finaliza” com os annotations do TestNG para definir o que vai fazer antes e depois do @Test.

3- Troquei os verifyTrue por assertTrue pois atualmente não sei como faz funcionar o verifyTrue dentro do TestNG (existe referência na documentação mas nem santo consegue fazer ele funcionar..)

“Oba oba! agora já até sei o que fazer.. é so colar o código lá no eclipse e mandar rodar……”

[Parser] Running:
C:\Documents and Settings\leonardo\Configurações locais\Temp\testng-eclipse\testng-customsuite.xml
FAILED CONFIGURATION: @BeforeTest setup

java.lang.RuntimeException: Could not contact Selenium Server; have you started it on ‘localhost:4444′ ?
Read more at http://seleniumhq.org/projects/remote-control/not-started.html
Connection refused: connect
at com.thoughtworks.selenium.DefaultSelenium.start(DefaultSelenium.java:86)
at teste_do_Testng.setup(teste_do_Testng.java:14)
… Removed 19 stack frames

Se o mundo fosse simples como NNF (next, next, finish) da microsoft, ele ficaria demasiadamente cansativo….rs

“Já sei! Só preciso instalar o Selenium RC e pronto…… mas…. o que eu instalo o selenium RC? não é 2 cliques?

Não!

Isso é uma dúvida tão comum que no primeiro dia de vida deste blog, já o encontraram no google com a frase “Como instalar Selenium RC”.

O servidor “Selenium RC” não é um servidor instalável, é como se fosse um serviço… você apenas inicia e para o serviço.
Em outras palavras, para fazer a criança funcionar, abra seu prompt de comando ( menu iniciar > executar > CMD ), acesse a pasta que você descompacto o selenium rc (selenium-remote-control-1.0.3\selenium-server-1.0.3) e digite o seguinte comando

java -jar selenium-server.jar

Com o servidor do selenium rodando, é só mandar rodar seu teste com TestNG ( clique com direito no nome da sua classe, opção Run As > TestNG )

Bom… meu firefox abriu , o TestRunner abriu mas nao está executando nada“  ouuu ” não está abrindo a minha pagina de teste!

Essa configuração que passei foi testada e aprovada pela minha pessoa e funciona sem problemas. Se o que foi citado acima acontecer com você, muito provavelmente você esta na sua empresa, esta acessando a internet através de um proxy para controlar o uso da rede.
O Selenium Server nada mais é que um proxy intermediário que fica entre seu browser e a internet. Ele interpreta os comandos e faz as requisições  e  se você já tiver usando um proxy, vai ser preciso configurar o meninão. Mais tarde eu falo sobre isso pois também vai gerar um post meio grandinho…rs

Até a próxima!

4 Comments

  1. Cléuber
    553 dias ago

    Cara,

    muito boa essa sua iniciativa

    Obrigado!

  2. Jousivan Sousa
    318 dias ago

    Parabéns pelo artigo.

    Abs.

  3. Netally
    251 dias ago

    Mas o que é melhor: JUnit ou TestNG?

  4. Leonardo Galani
    251 dias ago

    Eu prefiro Testng pq tem suporte da comunidade, o desenvolvedor responsável está sempre corrigindo problemas e implementando novas features e é muito mais facil e semantico de usar =)

Post a Comment

Your email is never published or shared. Required fields are marked *