Alura > Cursos de Programação > Cursos de Java > Conteúdos de Java > Primeiras aulas do curso Selenium: testes automatizados de aceitação em Java

Selenium: testes automatizados de aceitação em Java

Controlando o navegador - Apresentação

Olá pessoal, boas-vindas ao treinamento de Selenium aqui da Alura. Meu nome é Rodrigo e serei seu instrutor durante este treinamento, cujo objetivo é aprender a utilizar a API do Selenium WebDriver para escrever testes de aceitação na linguagem Java.

O Selenium é uma ferramenta para escrever testes de aceitação e tem suporte a várias linguagens, como Python, Ruby, PHP e o próprio Java. Neste curso aprenderemos a baixar e configurar o Selenium em nossa aplicação, e a escrever os testes de aceitação para simular um usuário navegando pela aplicação e validando as funcionalidades.

Aprenderemos a entrar no site do Selenium e ler a documentação e o guia de boas práticas. A aplicação com a qual trabalharemos durante o curso envolverá leilões. É uma aplicação já pronta, já que o objetivo do treinamento não é desenvolvermos a aplicação e seu código-fonte, mas sim testá-la utilizando o Selenium.

Trata-se de uma aplicação bem simples, na qual os usuários podem cadastrar leilões, incluindo uma funcionalidade de autenticação, listagem, edição e assim por diante. Nosso objetivo é testar algumas dessas funcionalidades.

Aprenderemos a escrever os códigos dos testes automatizados, como esses testes são realizados em uma aplicação Java utilizando o Maven, aprenderemos a utilizar os Page Objects (um padrão importante utilizado na API do Selenium), entre outras boas práticas.

É um curso bem técnico, focado em programação Java, utilizando a biblioteca do Selenium WebDriver. Espero que vocês gostem do treinamento e que possam aprender a utilizar o Selenium para automatizar os testes de aceitação dos seus projetos. Bons estudos!

Controlando o navegador - Selenium WebDriver

Olá pessoal, boas vindas ao curso de Selenium. Nesta aula falarei um pouco sobre o Selenium e sobre testes automatizados de modo a entendermos os conceitos antes de trabalharmos efetivamente no projeto.

Você já deve conhecer um pouco sobre testes automatizados, e até mesmo escrito alguns testes utilizando o JUnit (no caso do Java). Existem vários tipos de testes que você pode escrever, em especial se for fazer algum tipo de automatização.

Existem os mais simples, que são os "Testes de unidade" - também chamados de "Testes unitários" - nos quais basicamente se utiliza o framework JUnit para testar uma unidade de maneira isolada do resto do projeto. Por exemplo, uma classe que possua métodos com validações ou regras de negócio, e você deseja testá-los de maneira isolada das demais classes. Nesse caso, é possível escrever um teste de unidade - bem simples de escrever e de rápida execução - utilizando apenas o JUnit.

Outra categoria bastante popular é o "Teste de integração". Nele, queremos testar justamente a integração entre duas classes, dois módulos ou dois componentes, entendendo se tal integração entre os elementos está funcionando como esperado. È um teste um pouco mais abrangente, e você pode utilizar outras ferramentas.

Existem também outros testes, como "Teste de segurança", para verificar brechas, falhas ou vulnerabilidades na aplicação; "Teste de performance", para verificar se a aplicação está se comportando de acordo com a performance desejada; e "Teste de aceitação", categoria que também recebe nomes como "Teste de UI (User Interface)" ou "E2E" (end-to-end), um teste que simula o usuário utilizando a aplicação, passando por telas de login, preenchimento de formulários, cliques em botões e assim por diante. É um teste que vai de "ponta-a-ponta" na aplicaçãõ, da tela até o banco de dados (caso haja persistência), interagindo com as classes do projeto; justamente por isso, é um pouco mais trabalhoso de escrever, necessita de outras ferramentas e demanda mais tempo de execução.

Existe um conceito conhecido na área de testes automatizados, a "Pirâmide de Teste" ("Test Pyramid"), que estipula uma proporção ideal entre esses tipos de testes dentro de um projeto. Conforme você sobe na pirâmide, os testes vão ficando mais custosos e sua execução e manutenção mais lentas.

Em geral, ela possui três divisões: a base da pirâmide, onde se encontram os testes de unidade, que são mais rápidos e mais baratos de escrever e dar manutenção, portanto devem estar em concentração maior; a faixa central, de testes de serviço e integração entre os componentes; e no topo os testes de aceitação, que são o foco do nosso treinamento. Esses testes estão em menor quantidade, já que sãos difíceis de escrever, necessitam de ferramentas além do JUnit, são mais lentos de executar e sua manutenção é mais custosa.

Os times de desenvolvimento normalmente se baseiam nessa pirâmide para escrever os testes, seguindo as proporções recomendadas pela comunidade.

No mundo Java nós dispomos de diversas ferramentas para escrever esses variados tipos de testes. A principal e mais famosa delas é o JUnit, para testes de unidade, mas também temos o Mockito (utilizado para testes que simulam comportamento, os chamados "mocks"); DBUnit, para testes em que simulamos o ato de popular de um banco de dados; Cucumber, para testes de comportamento com uma linguagem mais natural/humana; e o Selenium, uma ferramenta para testes de interface com usuário. Obviamente existem outras ferramentas, inclusive concorrentes entre elas, mas estas são as mais populares.

O Selenium é uma biblioteca gratuita e opensource para testes end-to-end. É um projeto bem antigo da comunidade, nascido em 2004 e popular ainda hoje. Ao longo do seu desenvolvimento foram surgindo subprojetos, como o Selenium RC e o Selenium WebDriver, que nasceu por volta de 2007 e é focado em escrever testes utilizando linguagem de programação, como Java ou Python. O script escrito nessas linguagens pode ser integrado ao Selenium, responsável pela abstração do protocolo de comunicação com o browser.

Por exemplo, podemos escrever um código em Java e o Selenium dá conta de abrir o navegador, clicar em um botão e preencher um formulário, suportando diversos browsers (Chrome, Firefox, Opera, etc). Além disso, a API que ele fornece é bem simples de ser utilizada, facilitando o desenvolvimento desses testes.

Uma curiosidade: o nome "Selenium" é derivado de um elemento da tabela periódica, e justamente por isso o seu símbolo é o "Se". O time responsável pelo Selenium também foi responsável por uma ferramenta de testes anterior, o Mercúrio, e o Selênio ajuda no combate de envenenamentos por mercúrio.

No próximo vídeo começaremos a conhecer o projeto do curso, e em seguida passaremos a escrever nossos testes automatizados.

Controlando o navegador - Projeto do curso

Agora que já conversamos um pouco sobre o Selenium, nesta aula conheceremos o projeto com o qual trabalharemos no curso, quais são suas funcionalidades e um pouco do seu código-fonte. Já temos uma aplicação previamente desenvolvida, já que o foco do treinamento não é entendermos a tecnologia da aplicação si, mas sim escrever os testes automatizados que a avaliarão.

Baixe aqui o projeto inicial do curso.

No link acima você pode fazer o download da aplicação, que deverá ser descompactado em algum diretório do seu computador e importado na IDE de sua preferência, como o Eclipse, que utilizaremos no curso, ou IntelliJ, Netbeans, entre outras. Temos uma aplicação Java utilizando o Maven - portanto, você precisará importá-la utilizando o Maven - e que segue uma estrutura padrão, utilizando também o framework Springboot.

Você não precisa conhecer o Springboot para acompanhar o curso, mas temos treinamentos sobre este framework aqui na Alura caso você tenha curiosidade.

Formação Spring Framework na Alura!

Dentro do diretório "source/main/java" existe um pacote alura.leilao. Vamos trabalhar com uma aplicação de leilões, e conheceremos mais sobre ela daqui a pouco. Dentro do pacote raiz da aplicação temos a classe LeilaoApplication. Para rodarmos a aplicação com o Springboot, é necessário executar essa classe. No Eclipse, fazemos isso clicando com o botão direito sobre a classe em seguida em "Run As > Java Application".

Ao executarmos como uma aplicação Java, vão aparecer algumas informações no console do Eclipse. A aplicação tem um servidor embutido, que é o Tomcat, e será executada na porta 8080.

Após inicializado, podemos abrir um navegador e acessar a aplicação por meio do endereço http://localhost:8080. Ela simula um sistema de leilões, no qual as pessoas podem cadastrar leilões ou dar lances para comprar produtos - claro, caso consigam o maior lance. Ao entrarmos na aplicação, somos direcionados à página que mostra os leilões cadastrados.

Ao executarmos a classe LeilaoApplication, já populamos o banco de dados com algumas informações - dessa forma, não teremos que nos preocupar em cadastrar várias informações toda vez que rodarmos o projeto. Na tela principal, temos acesso somente à lista de leilões, onde atualmente temos dois leilões cadastrados. Um leilão precisa possuir um nome, uma data de abertura, o valor do lance inicial e o usuário que criou o leilão.

Para cadastrar um leilão ou dar um lance, é necessário fazer login na aplicação. No canto superior direito da tela temos um botão "Entrar" que nos leva a um formulário de login. Existe um usuário previamente cadastrado com o nome "fulano" e a senha "pass". Ao preechermos e submetermos as informações clicando em "Login", seremos levados de volta à tela de leilão, mas com algumas opções a mais.

A primeira delas é o botão "novo leilão", que permite cadastrar um novo leilão. Em nosso teste, preencheremos o campo "Nome" com "Iphone 10"; o "Valor inicial" com 4000; a "Data de abertura" com "20/11/2020"; e o "Usuário" é preenchido automaticamnete com o nome do usuário logado no sistema. Clicando em "Salvar", o leilão será cadastrado no sistema e aparecerá na listagem.

Como fomos nós que cadastramos o leilão, não podemos dar um lance, somente editá-lo. O botão "editar" nos leva de volta ao formulário e nos permite, por exemplo, alterar o "Nome" (que substituiremos por "Iphone 5"). Ao salvarmos, as informações serão atualizadas na listagem.

Se for um leilão criado por outro usuário, poderemos dar lances. Como exemplo, temos um leilão criado pelo usuário "beltrano". Ao clicarmos em "dar lance", somos levados a uma página que mostra todos os lances, mas atualmente não há nenhum. Preencheremos o campo "Novo lance" com o valor "1000" e clicaremos em "Dar lance!". A página será atualizada e o novo lance será exibido na listagem. Se preenchermos e submetermos um novo lance, por exemplo "1010", receberemos um erro - afinal, não deve ser possível que um mesmo usuário dê dois lances na sequência. Sendo assim, é necessário esperar outro usuário dê um lance para que "fulano" crie um lance maior.

Temos então uma aplicação bem simples, com cadastro de leilões, tela para editar informações de um leilão que criamos, tela para dar lances em leilões de outros usuários e algumas regras de negócio em relação ao valor mínimo, data e lances. Por exemplo, um usuário só pode dar cinco lances em um determinado leilão, e não pode dar dois lances seguidos.

No pacote alura.leilao, encontramos outros pacotes com as classes, controladores, classes de modelo (utilizando JPA) e assim por diante - ou seja, estamos trabalhando com uma aplicação Java tradicional. As páginas são encontradas no diretório "src/main/resources/templates", e consistem em páginas HTMLe utilizando Thymeleaf.

Não é necessário conhecer essas tecnologias, ainda que conhecer o básico delas possa ser de alguma ajuda, já que não entraremos em detalhes sobre o código fonte, como as funcionalidades foram implementadas e assim por diante. O foco do curso realmente é nos testes automatizados utilizando o Selenium. Obviamente, em alguns momentos, será necessário passarmos por algumas classes e páginas do projeto, mas não perderemos muito tempo nisso.

Após termos baixado e importado o projeto no computador, podemos partir para a próxima aula, na qual escreveremos o primeiro teste automatizado utilizando o Selenium!

Sobre o curso Selenium: testes automatizados de aceitação em Java

O curso Selenium: testes automatizados de aceitação em Java possui 159 minutos de vídeos, em um total de 42 atividades. Gostou? Conheça nossos outros cursos de Java em Programação, ou leia nossos artigos de Programação.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda Java acessando integralmente esse e outros cursos, comece hoje!

Conheça os Planos para Empresas