Pesquisar este blog

sexta-feira, 3 de julho de 2015

Jenkins + Python + Robot Framework


A pouco tempo na Pós-graduação em Testes de Software, o professor passou um trabalho sobre Integração Continua e Build de Testes Automatizado, nesta postagem, fiz o exemplo prático do nosso trabalho, vamos instalar o Jenkins e rodar um teste automatizado em um repositório git nas nuvens, para isso vamos usar o Robot Framework, no entanto vamos fazer em Python como é uma linguagem simples e dinâmica as pessoas que nunca programaram vão aprender com facilidade.

 Apresentação em PDF:
http://www.slideshare.net/reinaldorossetti/integrao-continua-e-b


Primeiro passo precisamos instalar o Python no PC local/Servidor.

1. Instalar o Python no Windows ou Linux:
Baixe o Python no Site abaixo:
https://www.python.org/downloads/

Pelo linux você pode usar o comando:
sudo apt-get install python3

Qualquer dúvida na Instalação acesse o vídeo:
 ** Não esqueça de adicionar a opção "Add python.exe to Path" e depois da Instalação reinicie o computador.


Segundo Passo vamos Instalar o Framework que vai rodar nos nossos testes.

2. Instalar Robot Framework

2.1 No linux vamos instalar o PIP no python pelo comando abaixo:
apt-get update
apt-get -y install python-pip

No Windows fiz um passo a passo no link abaixo:
http://reinaldorossetti.blogspot.com.br/2014/01/instalando-o-selenium-no-python-na.html


2.2 Agora vamos instalar o Framework Robot

Pelo Shell do Linux ou CMD do Windows podemos usar o comando abaixo:
  •     pip install robotframework

Vamos também instalar robotframework e seleniumlibrary, segue o link abaixo para instalar a API, baixe o arquivo de acordo a versão do SO, Win32, AMD64, LINUX:
https://code.google.com/p/robotframework-seleniumlibrary/downloads/list

Pelo Shell do Linux ou CMD do Windows podemos usar o comando abaixo:
  •    pip install robotframework-selenium2library
** Caso não consiga instalar segue o vídeo para instalação no Linux:
https://www.youtube.com/watch?v=vgvCMLNqeqQ

3. Neste passo vamos executar um demo para testar o Robot Framework e o Python.
Baixe o arquivo no site abaixo e extraia o mesmo no C: ou Home do linux.

https://bitbucket.org/robotframework/webdemo/downloads/WebDemo-20130308.zip
ou
https://bitbucket.org/robotframework/webdemo/downloads


Agora vamos executar os seguinte comando no CMD ou Shell do Linux, entre na pasta do webdemo pelo cmd ou shell

3.1 Primeiro vamos executar o servidor, podemos criar um script no notepad++, é somente adicionar os comandos abaixo, save as como .bat na área de trabalho.

cd\
cd webdemo
python demoapp/server.py
pause


** Se executamos o comando antes de iniciar o servidor, vamos visualiza a falha abaixo.


3.2 Agora vamos executar os comando para iniciar os testes, abra outro CMD ou Shell.


pybot --variable BROWSER:Firefox login_tests
pybot --variable BROWSER:Chrome login_tests 

pybot --variable BROWSER:IE login_tests


Nosso primeiro teste passou com sucesso, no entanto o restante dos testes no browser Chrome e IE falhou, neste caso precisamos baixa o driver para executar nesses browser, vamos baixar nos links abaixo e extraia dentro da pasta C:\Python27\Scripts\

http://chromedriver.storage.googleapis.com/index.html?path=2.16/

No chromedriver temos várias versões para Windows, Linux, Mac, instale o driver de acordo com o sistema operacional.

IE Driver:
Download version 2.46.0 for (recommended) 32 bit Windows IE or 64 bit Windows IE

Após extrair os drivers no local correto, vamos re-executar os comandos:
pybot --variable BROWSER:Chrome login_tests
pybot --variable BROWSER:IE login_tests
 
No Chrome nossos testes foram realizados com sucesso, no entanto no IE mostrou o
seguinte erro "This is the initial start page for the WebDriver server."



No IE, vamos Habilitar o Modo Protegido e colocar o nível para Baixo, em sites confiáveis
adicione o http://localhost e salve e feche o IE , isso irá resolver nosso problemas no caso
do IE 11 baixe um o arquivo o .reg e adicione ao registro, o mesmo se encontra no site abaixo:
http://heliumhq.com/files/docs/
 
Agora os Testes funcionaram com sucesso.


4. Agora vamos instalar e configurar o jenkins.

Continua...
 
jenkins-python-robot-framework-parte-2

quinta-feira, 19 de março de 2015

Usando o nmap para pegar o IP e MAC Address


Fiz um script para pegar o IP e o MAC de um range de IPs, é necessário quando você quer saber todos os Set-Top-Box que estão na rede, e enviar comandos de atualização, ou se comunicar com um Set-Top-Box específico.


Nesse primeiro script quero pegar um IP através de um MAC específico em um range de ips:

# Importa a api do NMAP
import nmap

# Instancia o objeto nmap.PortScanner.
nm = nmap.PortScanner()

# host 127.0.0.1, portas de 1 a 255
cidr2='127.0.0.1-255'

# insere os argumentos ao objeto nm usando a funcao scan.
a=nm.scan(hosts=cidr2, arguments='-sP')

# Trata os dados
for k,v in a['scan'].iteritems():
    if str(v['status']['state']) == 'up':

        try:
            if (str(v['addresses']['mac'])=="68:15:90:78:F7:23"):
                    print "IP: " + str(v['addresses']['ipv4'])
        except:
            pass


-------------------------------------------------------------------------------------------------------------------
# Nesse script vai listar todos os dados encontrados.
# Pode remover print str(v), nesse caso vai exibir a lista de ips e macs da rede.
import nmap

nm = nmap.PortScanner()
cidr2='192.168.1.99/24'

a=nm.scan(hosts=cidr2, arguments='-sP')

for k,v in a['scan'].iteritems():
    if str(v['status']['state']) == 'up':
        print str(v)
        try:    print str(v['addresses']['ipv4']) + ' => ' + str(v['addresses']['mac'])
        except: print str(v['addresses']['ipv4'])





Links Relacionados:

http://searchsecurity.techtarget.com/tip/How-to-install-and-configure-Nmap-for-Windows
http://pydoc.net/Python/python-libnmap/0.6.2/
https://pypi.python.org/pypi/python-libnmap/


Install
 Você pode instalar via pip:
  • pip install libnmap
 
ou via git:
  • $ git clone https://github.com/savon-noir/python-libnmap.git
    $ cd python-libnmap
    $ python setup.py install
    

É necessário instalar o nmap no sistema operacional:
https://nmap.org/download.html

sexta-feira, 6 de fevereiro de 2015

Instalando o Python e o Pydev no Linux.


Criei um Passo a passo para instalação do Python e Pydev para iniciar o desenvolvimento de Script automatizados em python, uma linguagem super simples e prática de programar, como é orientado a indentação o código fica super arrumado.

Segue os passos para Instalação do Python no Linux:

1. Primeiro Instale as dependências, insira os comandos no Terminal (Shell) do Linux:
  • 1.1 -> sudo apt-get install build-essential



  • 1.2 -> sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev

2. Faça o download do Python, recomendo a versão estável - Lista de versões no link https://www.python.org/ftp/python/

Comandos:
  • 2.1 -> cd ~/Downloads/
  • 2.2 -> wget http://python.org/ftp/python/2.7.5/Python-2.7.5.tgz

** Observação mude a url no passo 2.2 pra versão que deseja.


3. Extrair o arquivo:3.1 -> tar -xvf Python-2.7.5.tgz 3.2 -> cd Python-2.7.5

4. Agora fazer a instalação:comandos:

  • 4.1 -> ./configure 4.2 -> make 4.3 -> sudo make install


 
Passos para Instalação PyDev:

1. Baixar o eclipse (Recomendo a última versão mais estável).
Passo a Passo no site abaixo:
http://www.vivaolinux.com.br/dica/Eclipse-42-Instalacao-no-Ubuntu-e-derivados

2. Abra o Eclipse.
3. Menu Help - Install New Software

4. Seleciona o Botão "ADD"

5. Insira um Nome no campo name.
6. Insira a URL do pydev no campo location: http://pydev.org/updates
7. Clique no botão "Ok" em seguida click em "Select ALL".

8. Agora é só confirmar clique em seguir ou next e por fim finalizar.

- Caso no eclipse não queira seguir a mesma ordenação de pastas, você pode associar ao seu projeto, basta criar um novo projeto vazio e associar ao local no computador.
Exemplo:

/home/reinaldo/workspace/PastaDoProjeto
1. Para fazer a associação siga o caminho no eclipse abaixo:
Properties-Resource-Linked Resources-NEW

2. Adicionar os dados do seu projeto:
Adicionar Name: PROJECT_LOC
Adicionar em location: <O caminho do projeto>.



quarta-feira, 10 de dezembro de 2014

TestLink + Python - Reportando os testes realizados.


Nesse post vamos fazer uma classe genérica para reportar o resultado do teste realizado para o TestLink.

Vamos listar as coisas que devemos fazer primeiro para criar o reporte no testlink.

1. Precisamos criar primeiro os seguinte itens:  Test Project Management Test Plan Management.
  • Como estes dois Itens não mudam todo tempo, recomendo fazer manualmente no inicio do projeto, caso você queira fazer, já digo que a ultima versão do TestLink 1.9.12 esta com um bug quando você tenta fazer várias vezes o Test Plan Management, a tela fica em branco, pode ser problema de memória, mas não perdi muito tempo com isso.
2. Necessário criar o Builds / Releases.
  • Criamos uma função para criar o Build - create_build(self, newBuildID, buildName, buildNotes), passamos como paramêtro ID do build, nome do build, descrição do mesmo.
3.  Pegar o ID do Test Case passando o Nome como parâmetro para a função testCaseIDByName(self, TESTCASE).

4.  Pegar o ID do Test Plan passando o Nome do Test Plan como parâmetro para a função getTestPlanId(self, NEWTESTPLAN).

5. Agora vamos realizar o reporte do teste realizado, passando os dados (id do caso de teste, id do plano de teste, buildname, resultado do teste -> PASSED=p , FAILED=f , BLOCKED=b, descrição do teste realizado) para a função reportTCResult(self, tcid, tpid, buildname, Result, notes).

Exemplo:

"""
Class Testlink to connection with server TestLink
Author: Reinaldo M.R.J
Date: 10-12-2014 - Version: 0.X
"""
import testlink

class class_Testlink(object):

    def __init__(self):

        # Endereço do Servidor xmlrpc
        TESTLINK_SERVER_URL = '.../lib/api/xmlrpc/v1/xmlrpc.php'
        # Chave gerada pelo TestLink
        TESTLINK_DEVKEY = 'bdcc743a0cd80052bf8c28XXXXXXXX'
        tlh = testlink.TestLinkHelper(TESTLINK_SERVER_URL, TESTLINK_DEVKEY)
        self.myTestLink = tlh.connect(testlink.TestlinkAPIClient)
        # Nome do Projeto, caso você tenha vários poderia enviar como parâmetro para classe.
        self.Project = "XXXXXXXX"

    def reportTCResult(self, tcid, tpid, buildname, Result, notes):

        return self.myTestLink.reportTCResult(tcid, tpid, buildname, Result, notes)

    def testCaseIDByName(self, TESTCASE):
            
        response = self.myTestLink.getTestCaseIDByName(TESTCASE, testprojectname=self.Project)
        print response
        response = response[0].get("id")
        return response


    def getTestPlanId(self, NEWTESTPLAN):

        response = self.myTestLink.getTestPlanByName(self.Project, NEWTESTPLAN)
        print "getTestPlanByName", response
        response = response[0].get("id")
        return response


    def create_build(self, newBuildID, buildName, buildNotes):

        newBuild = self.myTestLink.createBuild(newBuildID, buildName, buildNotes)
        isOk = newBuild[0]['message']
        if isOk == "Success!":
            newBuildID = newBuild[0]['id']
            print "New Test Build '%s' - id: %s" % (buildName, newBuildID)
        else:
            print "Error creating the Test Build '%s': %s " % (buildName, isOk)
            return




quarta-feira, 19 de novembro de 2014

Instalando o TestLink-API-Python-client (TestLink + Python)

Nesse post vamos fazer a conexão dos scripts em python com o TestLink, é uma ótima solução para reportar o resultado dos seus testes automatizados.

A forma mais fácil de instalar via Python, é pelo comando abaixo:

pip install TestLink-API-Python-client



No link abaixo temos como instalar o PIP:
http://reinaldorossetti.blogspot.com.br/2014/01/instalando-o-selenium-no-python-na.html

Fizemos um código para realizar a conexão com o Servidor, segue o código abaixo:

import testlink
TESTLINK_API_PYTHON_SERVER_URL='<server_web_do_teste_link>/lib/api/xmlrpc/v1/xmlrpc.php'
TESTLINK_API_PYTHON_DEVKEY='Sua Chave gerada no TestLink'

testlink.TestLinkHelper(TESTLINK_API_PYTHON_SERVER_URL,TESTLINK_API_PYTHON_DEVKEY)
myTestLink = tlh.connect(testlink.TestlinkAPIClient)
print myTestLink.whatArgs('createTestPlan')

print ""
print "Number of Projects in TestLink: %s " % myTestLink.countProjects()
print "Number of Platforms (in TestPlans): %s " % myTestLink.countPlatforms()
print "Number of Builds : %s " % myTestLink.countBuilds()
print "Number of TestPlans : %s " % myTestLink.countTestPlans()
print "Number of TestSuites : %s " % myTestLink.countTestSuites()
print "Number of TestCases (in TestSuites): %s " % myTestLink.countTestCasesTS()
print "Number of TestCases (in TestPlans) : %s " % myTestLink.countTestCasesTP()
print ""


** Caso der algum erro tente os seguintes passos:
1. Cria o arquivo __init__.py no diretório dos seus arquivos;
2. Verifique a sua chave gerada, se for o caso gerar uma nova como admin;


3. Verifique a URL, que é o caminho do servidor xmlrpc dependendo da versão o caminho é diferente;
4. Verifique a Indentação do código.
5. Verifique versão do Python a versão compatível 2.7.8, com versões 3.3 tive problemas.

No Tutorial da API diz para criar as variáveis  de ambiente, no caso fiz processo pelo Windows não funcionou como esperado, então passei essas informações como parâmetro para a classe de conexão "TestLinkHelper" e funcionou bem, assim não precisa configurar a variável de Ambiente no Windows, agora é feito direto no código.

# precondition a)
# SERVER_URL and KEY are defined in environment
# TESTLINK_API_PYTHON_SERVER_URL=http://YOURSERVER/testlink/lib/api/xmlrpc.php
# TESTLINK_API_PYTHON_DEVKEY=7ec252ab966ce88fd92c25d08635672b
#
# alternative precondition b)
# SERVEUR_URL and KEY are defined as command line arguments
# python TestLinkExample.py --server_url http://YOURSERVER/testlink/lib/api/xmlrpc.php
# --devKey 7ec252ab966ce88fd92c25d08635672b
#
# ATTENTION: With TestLink 1.9.7, cause of the new REST API, the SERVER_URL
# has changed from
# (old) http://YOURSERVER/testlink/lib/api/xmlrpc.php
# to
# (new) http://YOURSERVER/testlink/lib/api/xmlrpc/v1/xmlrpc.php