Pesquisar este blog

terça-feira, 7 de janeiro de 2014

Instalando o Selenium no Python na plataforma Windows.

Para instalar o selenium dentro do python para executar os script do selenium pelo python siga os passos abaixo.

1. Instalar o Python 2.7.xx
2. Instalar o setuptools do python:  https://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11.win32-py2.7.exe#md5=57e1e64f6b7c7f1d2eddfc9746bbaf20
3. Instalar o PIP:  https://sites.google.com/site/pydatalog/python/pip-for-windows
4. Digite o comando abaixo sem aspas no prompt do windows, na pasta C:\Python27\Scripts>
   "pip install -U selenium"
5. Selenium instalado no Python execute um script selenium para testar.

Pode criar um .bat com o comando pra executar o script selenium:

C:\Python27\python.exe C:\Scripts\teste.py


Insira no Arquivo teste.py as linhas de código abaixo e execute o .bat criado, exemplo:

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 test_search_in_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()


Dica: Quando o browser é atualizado o Firefox, é necessário atualizar novamente o selenium, executando o comando "pip install -U selenium".


quinta-feira, 11 de abril de 2013

Implementando Segurança em PHP ao Pegar os Dados via POST ou GET


/* Filtro de caracteres especiais para segurança. Stripslashes e mysql_real_escape_string esta função pode ser usada para limpar os dados recuperados de um banco de dados ou de um formulário HTML, geralmente é chamado de escape de dados.
*/
Campo nome: Zak's Derick's

Escaped string: Zak\'s and Derick\'s Laptop

 Assim o banco de dados vai entender que é um caractere especial, não causando problema ao colocar a aspa simples, evitando o SQL Inject.

// pega e filtra os valores  do post
$username = (isset($_POST['username'])) ? trim($_POST['username']) : '';


$username = stripslashes($username);
$username = mysql_real_escape_string($username);



Outra forma seria remover os caracteres especiais criando uma lista negra, geralmente é chamado de black list.
 
<?php

 function anti_injection($sql) {


 // Remove palavras suspeitas de injection.

$sql = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"), "", $sql);

//Remove espaços vazios.
        $sql = trim($sql);
 

//Remove tags HTML e PHP.
       $sql = strip_tags($sql);
 

//Adiciona barras invertidas à uma string.

        $sql = addslashes($sql);

        return $sql;


    }


    $id = anti_injection($_GET['id']);


?>


Outro mais simples:
http://codigofonte.uol.com.br/codigo/php/seguranca/remover-caracteres-indesejados-e-evitar-a-sql-injection


Outra forma seria permitir somente os dados que eu quero receber, geralmente é chamado de white list.

$input = "' or 1='1";

$input = strip_tags($input); // retirar tags php

$output = eregi_replace("[^a-z0-9ã-õá-úà-úãõâ-ûç,.;]", '', $input);

echo $output;
 
Obs: - Não retirar palavras reservadas do SQL: SELECT, UPDATE, etc. 
 
Outro exemplo mais simples:
 
function checa($string)
{
 $string = preg_match("/^[0-9A-z]*$/i", $string);
 return $string;
} 
 
Dica para os testadores, insira os caracteres abaixo nos campos de entrada, 
para analisar o erro que vai gerar.
* \\\\ ' & ¨% $ # ( ) { [ } ] / ^~`´º 
 
 
Boa leitura:
apresentacaosegurancaphp.pdf 
 

Realizando um conexão com MySql por Python

Tive a necessidade de criar um Report Online, agora alimentar através de uma aplicação desktop, primeiro passo criar a conexão a Aplicação com o Servidor de Banco de Dados.


#!/usr/bin/python
# Biblioteca python que deve ser instalada
# http://sourceforge.net/projects/mysql-python/
import MySQLdb

db1 = MySQLdb.connect('servidor_endereco', 'nome_usuario', 'senha','nome_banco')
cursor = db1.cursor()
sql = 'SELECT * FROM tb_report WHERE 1'
cursor.execute(sql)
rows = cursor.fetchall()

#Imprime as linhas da tabela.
for row in rows:
        print row
       
cursor.close()


-> No caso de tentar realizar uma conexão remota local para servidor, tem a necessidade de configurar o servidor primeiro, leia o link:
http://marcosvreis.wordpress.com/2012/01/30/habilitando-conexo-remota-no-mysql-server/

sábado, 16 de fevereiro de 2013

Processo de Teste com TestLink + Scrum + Bugzilla



Ultimamente tive a necessidade de trabalhar com processo de teste com metodologia ágil, tive que montar uma apresentação do processo de teste com testlik + scrum + Bugzilla, segue abaixo o link da apresentação para quem quiser conhecer mais sobre teste.

Recently I needed to work with the testing process with agile methodology, I had to mount a presentation of the testing process with Testlik + Scrum + Bugzilla, below is the link of the presentation for anyone wanting to know more about the test.


sexta-feira, 18 de janeiro de 2013

Comandos Linux Uteis




Dar Permissão em Pasta e Arquivo:

Sudo chmod [opções] modo[,modo] arquivo1 [arquivo2 ...]

Permissão total:

chmod 777 + (nome do arquivo ou pasta)
 ex. chmod 777 teste.xls

Outra forma fácil no ubuntu é

Passos:
1.Selecionar um arquivo
2. Clicar no botão direito
3. Selecionar a opção propriedades
4. Selecione a aba permissões
5. Mude as permissões como queira.




Numerical permissions
# Permission rwx
7 full 111
6 read and write 110
5 read and execute 101
4 read only 100
3 write and execute 011
2 write only 010
1 execute only 001
0 none 000


Sabe mais:
http://pt.wikipedia.org/wiki/Chmod
http://en.wikipedia.org/wiki/Chmod



 Instalar SNMP - protocolo SNMP (do inglês Simple Network Management Protocol - Protocolo Simples de Gerência de Rede.

sudo apt-get install snmp

quinta-feira, 27 de dezembro de 2012

Montar HD no linux dividido em duas partições.

Ao tentar montar um HD que tem duas partições no Linux distribuição Ubuntu, tive dificuldades, no entanto um amigo me ajudou realizando as operações abaixo no terminal do linux.

Passos:

cd Área\ de\ Trabalho/
mkdir part1
mkdir part2
sudo mount /dev/sdb1 part1
sudo mount /dev/sdb2 part2

Desmontar Partições:
sudo umount /dev/sdb1 part1
sudo umount /dev/sdb2 part2

segunda-feira, 24 de dezembro de 2012

Exemplo de Cadastro de Dados usando o Selenium RC no Eclipse.

Precisei automatizar um processo lento de cadastro de MAC em um sistema Web, estava me custando bastante tempo para realização do mesmo, bom primeiro ele remove o MAC se estiver cadastrado em um lista e inseri em uma nova lista já cadastrada, isso obedece um conjunto de passos até realizar a operação. Segue abaixo os passos de forma genérica, para criação do mesmo em qualquer sistema Web.

Passos:
1. Abrir o Eclipse2. Instalar o Selenium RC


3. Instalar a biblioteca POI


4. Instalar Selenium IDE


5. Exportar a gravação da operação que deseja realizar
6. Criar um projeto no Eclipse em seguida a classe.
7. Importar o código gerado pelo Selenium IDE.
8. Adaptar o código para pegar os valores que iram mudar cadastrados na Planilha.
9. Fazer os Loops ou IFs necessários.
10. Executar o Código.



Figura 1 - Mostra o Selenium IDE, aonde vai ser gravado o esqueleto do Script, depois de gravado os passos das atividades, será realizado a exportação para o Eclipse, no nosso caso "Java / Junit 4 / Remote Control".



A figura 2 - Mostra a criação de um projeto e uma classe chamada macCad.java, e também mostra as bibliotecas usadas.




A figura 3 - Mostra o Arquivo Excel contendo o Nome da Nova Lista e o MAC a ser cadastrado.


Código Fonte do nosso Script em Java + Selenium



------------------------------------------------------------------------------------------------------

package com.example.tests;

import static org.junit.Assert.*;
import com.thoughtworks.selenium.*;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.FileInputStream;
import java.util.regex.Pattern;

public class ScriptIAP extends SeleneseTestCase {
public String url="http://1.0.0.0:8080/";


@Before
public void setUp() throws Exception {
selenium = new DefaultSelenium("localhost", 4444, "*chrome", url);
selenium.start();
selenium.windowMaximize();
selenium.windowFocus();
//selenium.setSpeed("1000");
}

@Test
public void testMacCad() throws Exception {

selenium.setSpeed("1000");
selenium.open("/iap-provisioning/loginForm.jsp");

selenium.type("name=userName", "xxxx");
selenium.type("name=password", "yyyy");

selenium.click("css=input[type=\"submit\"]");

FileInputStream arquivoexcel_lote = new FileInputStream("C:\\Nome.xls");
selenium.waitForPageToLoad("90000");

HSSFWorkbook excel = new HSSFWorkbook(arquivoexcel_lote);
HSSFSheet topSheet = excel.getSheetAt(0);

/* Faz um for pegando a informação da linha do Arquivo do Excel.
O primeiro for pega automatico a quantidade de linhas e no segundo é inserido de forma manual
*/ 

//for (int i = 0; i < topSheet.getPhysicalNumberOfRows(); i++) { //for para incrementar 1 em 1 nas linhas
// Faz um for pela quantidade especificada no caso 10 linhas.
for (int i = 0; i < 10; i++) { 
HSSFRow thirdRow = topSheet.getRow(i); //linhas da planilha
HSSFCell caminho_lote = thirdRow.getCell(1); //definindo a coluna 2
HSSFCell user = thirdRow.getCell(0); //definindo a coluna 1

selenium.click("link=Search");
selenium.waitForPageToLoad("130000");
selenium.type("xpath=(//input[@name='search'])[6]", caminho_lote.getStringCellValue());
selenium.click("xpath=(//input[@value='Search'])[6]");
selenium.waitForPageToLoad("130000");
if (selenium.isElementPresent("link=exact:"+ caminho_lote.getStringCellValue())){

selenium.click("link=exact:"+ caminho_lote.getStringCellValue());
selenium.waitForPageToLoad("130000");
selenium.click("link=View subscriber");
selenium.waitForPageToLoad("130000");
selenium.click("link=exact:"+caminho_lote.getStringCellValue());
selenium.waitForPageToLoad("130000");
selenium.click("link=Delete equipment");
assertTrue(selenium.getConfirmation().matches("^Are you sure you want to delete this equipment[\\s\\S]quot;));

}

selenium.click("link=Search");
selenium.waitForPageToLoad("130000");
selenium.type("name=search",user.getStringCellValue());
selenium.click("css=input[type=\"submit\"]");
selenium.waitForPageToLoad("130000");
selenium.click("link="+user.getStringCellValue());
selenium.waitForPageToLoad("130000");
selenium.click("link=New equipment");
selenium.waitForPageToLoad("130000");
selenium.type("xpath=(//input[@name='id'])[2]", caminho_lote.getStringCellValue());
selenium.type("name=macAddress", caminho_lote.getStringCellValue());
selenium.type("name=name", caminho_lote.getStringCellValue());
selenium.select("name=defaultUserId", "label="+user.getStringCellValue());
selenium.click("name=/plainBootstrap[1]");
selenium.click("name=/plainBootstrap[1]/deviceSettings[1]");
selenium.click("name=/plainBootstrap[1]/deviceSettings[1]/authentication[1]");
selenium.type("name=/plainBootstrap[1]/deviceSettings[1]/authentication[1]/@id", user.getStringCellValue());
selenium.type("name=/plainBootstrap[1]/deviceSettings[1]/authentication[1]/@password", "1234");
selenium.click("name=/plainBootstrap[1]/noAuthentication[1]");
selenium.click("css=#radioButtonFalse > input[name=\"/plainBootstrap[1]/blocked[1]\"]");
selenium.click("css=input[type=\"submit\"]");
selenium.waitForPageToLoad("130000");
}

}

@After
public void tearDown() throws Exception {

selenium.stop();
}
}