Automação de Testes Funcionais de Software com Selenium 3 °  Encontro do grupo XPCE 24 de outubro de 2009 Palestrante: Fabrício Lemos
Testes Desempenho Segurança Stress Unidade Usabilidade e Interface com o Usuário Configuração Integridade de Dados Funcionais
Testes Funcionais Verificam o correto funcionamento do sistema,  em cenários específicos , através da simulação da interação deste com o  usuário
Testes Funcionais São testes caixa preta Testa a interação entre todos os componentes e camadas do sistema Da GUI até o acesso a dados Testa a interação do sistema com componentes externos Servidor de Aplicação, Banco de Dados, Navegador, Sistema de Arquivos, etc...
Aplicabilidade Todos os sistemas devem ter algum tipo de teste funcional
Motivação Seus testes não devem ser limitados aos testes de unidade A interação entre os componentes e destes com o usuário deve ser testada Maior facilidade em alcançar boa cobertura de testes É abstraído de detalhes de implementação do sistema São a melhor maneira de medir o progresso do projeto
Automação de Testes Funcionais A execução é muito mais rápida do que testes manuais Permitem a realização efetiva de testes de regressão Rápido feedback para os desenvolvedores Testes são repetíveis Testes manuais são entediantes
Selenium É um conjunto de ferramentas para automação de testes para aplicações Web Bastante flexível Provê um vasto conjunto de comandos Simulação do comportamento do usuário Verificação do comportamento do sistema Suporta diversos navegadores Open-source
Selenium-IDE Ambiente integrado para a elaboração de casos de teste Opera como uma extensão do Firefox Grava os casos de testes a medida que o sistema é usado Os casos de testes podem ser convertidos para um grande número de linguagens
Selenium-IDE
Selenium Remote Control Permite executar os testes em outros navegadores que não o Firefox Provê APIs para construção de testes para uma série de linguagens Java, Ruby, HTML, Python, C#, Perl e PHP Permite a elaboração e execução de testes dentro do mesmo ambiente de desenvolvimento da aplicação
Comandos selenium .open( "/aplicacao/home.seam" ); selenium .type( "login:username" ,  "gavin" ); selenium .click( "login:login" ); selenium .waitForPageToLoad( "30000" ); selenium .isTextPresent( "Texto" );
Teste do Login selenium .open( "/jboss-seam-hibernate/" ); selenium .type( "login:username" ,  "fabricio" ); selenium .type( "login:password" ,  "senha123" ); selenium .click( "login:login" ); selenium .waitForPageToLoad( "30000" ); boolean  mensagemSucessoPresente =  selenium .isTextPresent( "Welcome, fabricio" ); assertTrue (mensagemSucessoPresente);
Page Objects São abstrações das páginas do sistema Encapsulam toda a interação do Selenium com as páginas Provêm uma API de acesso às páginas
Uso de Page Objects @Test public   void  testReserva() { hotelBooking .findHotels(); hotelBooking .viewFirstHotel(); hotelBooking .bookHotel(); hotelBooking .setDate( "25/11/2009" ,  "26/12/2009" ); hotelBooking .setCreditCard( "7777" ,  "Fabricio" ); hotelBooking .proceed(); hotelBooking .confirm(); assertTrue ( hotelBooking .isTextPresent( "your confimation number is 9" )); }
Page Objects Single Responsibility Principle Page Objects não fazem nenhum assert Testes não conhecem os detalhes de implementação da página Facilita o reuso de elementos da página Reduz o impacto das mudanças de GUI
Desafios Falta de cultura em automação de testes funcionais Tempo elevado para rodar toda a suite de testes Dependências entre as funcionalidades Dependência de componentes externos à aplicação
Pontos a Considerar Quem implementará os casos de testes? Como será a documentação dos casos de testes? Com que frequência devo rodar a suite de testes? Devo perseguir 100% de cobertura?
"Raising the level of professionalism in our industry is a slow process. But it's inevitable. The bar is heavy, but we're lifting it." - Uncle Bob
Dúvidas???
Obrigado! Contato: http://www.fabriciolemos.org/blog

Automacão de Testes Funcionais com Selenium

  • 1.
    Automação de TestesFuncionais de Software com Selenium 3 ° Encontro do grupo XPCE 24 de outubro de 2009 Palestrante: Fabrício Lemos
  • 2.
    Testes Desempenho SegurançaStress Unidade Usabilidade e Interface com o Usuário Configuração Integridade de Dados Funcionais
  • 3.
    Testes Funcionais Verificamo correto funcionamento do sistema, em cenários específicos , através da simulação da interação deste com o usuário
  • 4.
    Testes Funcionais Sãotestes caixa preta Testa a interação entre todos os componentes e camadas do sistema Da GUI até o acesso a dados Testa a interação do sistema com componentes externos Servidor de Aplicação, Banco de Dados, Navegador, Sistema de Arquivos, etc...
  • 5.
    Aplicabilidade Todos ossistemas devem ter algum tipo de teste funcional
  • 6.
    Motivação Seus testesnão devem ser limitados aos testes de unidade A interação entre os componentes e destes com o usuário deve ser testada Maior facilidade em alcançar boa cobertura de testes É abstraído de detalhes de implementação do sistema São a melhor maneira de medir o progresso do projeto
  • 7.
    Automação de TestesFuncionais A execução é muito mais rápida do que testes manuais Permitem a realização efetiva de testes de regressão Rápido feedback para os desenvolvedores Testes são repetíveis Testes manuais são entediantes
  • 8.
    Selenium É umconjunto de ferramentas para automação de testes para aplicações Web Bastante flexível Provê um vasto conjunto de comandos Simulação do comportamento do usuário Verificação do comportamento do sistema Suporta diversos navegadores Open-source
  • 9.
    Selenium-IDE Ambiente integradopara a elaboração de casos de teste Opera como uma extensão do Firefox Grava os casos de testes a medida que o sistema é usado Os casos de testes podem ser convertidos para um grande número de linguagens
  • 10.
  • 11.
    Selenium Remote ControlPermite executar os testes em outros navegadores que não o Firefox Provê APIs para construção de testes para uma série de linguagens Java, Ruby, HTML, Python, C#, Perl e PHP Permite a elaboração e execução de testes dentro do mesmo ambiente de desenvolvimento da aplicação
  • 12.
    Comandos selenium .open("/aplicacao/home.seam" ); selenium .type( "login:username" , "gavin" ); selenium .click( "login:login" ); selenium .waitForPageToLoad( "30000" ); selenium .isTextPresent( "Texto" );
  • 13.
    Teste do Loginselenium .open( "/jboss-seam-hibernate/" ); selenium .type( "login:username" , "fabricio" ); selenium .type( "login:password" , "senha123" ); selenium .click( "login:login" ); selenium .waitForPageToLoad( "30000" ); boolean mensagemSucessoPresente = selenium .isTextPresent( "Welcome, fabricio" ); assertTrue (mensagemSucessoPresente);
  • 14.
    Page Objects Sãoabstrações das páginas do sistema Encapsulam toda a interação do Selenium com as páginas Provêm uma API de acesso às páginas
  • 15.
    Uso de PageObjects @Test public void testReserva() { hotelBooking .findHotels(); hotelBooking .viewFirstHotel(); hotelBooking .bookHotel(); hotelBooking .setDate( "25/11/2009" , "26/12/2009" ); hotelBooking .setCreditCard( "7777" , "Fabricio" ); hotelBooking .proceed(); hotelBooking .confirm(); assertTrue ( hotelBooking .isTextPresent( "your confimation number is 9" )); }
  • 16.
    Page Objects SingleResponsibility Principle Page Objects não fazem nenhum assert Testes não conhecem os detalhes de implementação da página Facilita o reuso de elementos da página Reduz o impacto das mudanças de GUI
  • 17.
    Desafios Falta decultura em automação de testes funcionais Tempo elevado para rodar toda a suite de testes Dependências entre as funcionalidades Dependência de componentes externos à aplicação
  • 18.
    Pontos a ConsiderarQuem implementará os casos de testes? Como será a documentação dos casos de testes? Com que frequência devo rodar a suite de testes? Devo perseguir 100% de cobertura?
  • 19.
    "Raising the levelof professionalism in our industry is a slow process. But it's inevitable. The bar is heavy, but we're lifting it." - Uncle Bob
  • 20.
  • 21.