O Selenium é uma ferramenta para automatização do navegador (playback e scripting), usado para testar aplicações web. No Django 1.4 temos o LiveServerTestCase para testar o servidor, facilitando a integração de testes do Django com o Selenium.
O WebDriver são as ações do navegador através da API (no Django é usado a linguagem Python). Ele suporta diferentes navegadores: Firefox, Chrome, IE. Suas funções são: pegar a página, os elementos, adicionar um input e manipular esses elementos.
# pip install selenium
ou
# easy_install selenium
Buscando elementos:
driver.find_element_by_id('id_usuario')
driver.find_element_by_name('zeldani')
driver.find_element_by_xpath('//input')
driver.find_element_by_link_text('Proximo')
driver.find_element_by_partial_link_text('Prox')
driver.find_element_by_tag_name('frame')
driver.find_element_by_class_name('body')
driver.find_element_by_css_selector('input')
Enviando dados:
element.send_keys("zeldani", Keys.TAB)
element.send_keys("senha123")
element.submit()
Botões:
element.click()
Alguns métodos dos elementos:
- text(self); click(self); submit(self); clear(self); get_attribute(self, name).
- Primeiro Exemplo:
Você pode fazer os testes usando o módulo Python unittest. Digite o código abaixo e depois execute: $ python tests.py
A explicação do código está nos comentários.
import unittest
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
class PythonOrgSearch(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
def teste_busca_python_org(self):
driver = self.driver
driver.get("http://www.python.org")
self.assertIn("Python", driver.title)
elem = driver.find_element_by_name("q")
elem.send_keys("selenium")
elem.send_keys(Keys.RETURN)
self.assertIn("Google", driver.title)
def tearDown(self):
self.driver.close()
if __name__ == "__main__":
unittest.main()
Nesse primeiro exemplo vai ser aberto o url www.python.org, depois vai buscar pela palavra selenium no google.
- Segundo Exemplo:
Nesse segundo exemplo vamos criar uma unit test do Django, para testar a administração do site. Salve como tests.py na sua aplicação.
Digite o código abaixo e depois execute na pasta raiz do projeto:
$./manage.py test nome_da_app
import time
from django.test import LiveServerTestCase
from selenium.webdriver.firefox.webdriver import WebDriver
class BaseTestCase(LiveServerTestCase):
@classmethod
def setUpClass(cls):
cls.driver = WebDriver()
super(BaseTestCase, cls).setUpClass()
@classmethod
def tearDownClass(cls):
super(BaseTestCase, cls).tearDownClass()
cls.driver.quit()
class AdminTeste(BaseTestCase):
def teste_login(self):
self.driver.get(self.live_server_url + '/admin/')
self.driver.find_element_by_id('id_username').send_keys('admin')
password = self.driver.find_element_by_id('id_password')
password.send_keys('123') .
password.submit()
time.sleep(2)
Uma dica é usar o firebug para confirmar o id do usuário e senha. Caso você tenha problemas com a senha na hora de logar, é preciso criar uma initial data pelas fixtures. Uma fixture é uma coleção de dados do Django, para ele saber como importar do banco de dados. Nesse exemplo vamos criar a fixture usando o JSON (JavaScript Object Notation).
Crie um diretório na sua aplicação chamado "fixtures" e salve o conteúdo abaixo como initial_data.json:
[
{
"pk": 1,
"model": "auth.user",
"fields": {
"username": "admin",
"first_name": "",
"last_name": "",
"is_active": true,
"is_superuser": true,
"is_staff": true,
"last_login": "2012-10-20 04:15:37+00:00",
"groups": [],
"user_permissions": [],
"password": "senha criptografada",
"email": "admin@gmail.com",
"date_joined": "2012-10-19 18:36:07+00:00"
}
}
]
Modifique o campo "password" com a senha criptografada do admin. No artigo sobre dicas django tem como saber a senha, data do último login e de criação do usuário!! ;)
O segundo exemplo vai testar a página de administração do Django, inserindo o usuário e senha.
* Fontes:
http://selenium-python.readthedocs.org
https://docs.djangoproject.com/en/dev/howto/initial-data/
http://selenium-python.readthedocs.org
https://docs.djangoproject.com/en/dev/howto/initial-data/
https://www.shiningpanda-ci.com
http://benlopatin.com/2012/django-selenium-testing/
http://www.rkblog.rk.edu.pl/w/p/testing-django-applications-selenium/
http://www.arthurkoziel.com/2008/09/04/automatical-superuser-creation-django/
http://www.arthurkoziel.com/2008/09/04/automatical-superuser-creation-django/
2 comentários:
Dava pra caprichar mais no post. Por exemplo Selenium não é para teste unitário, mas para testes funcionais. Para teste unitarios use PyUnit!
valeu a dica, fiz algumas correções no artigo!! ;P
Postar um comentário