It’s very interesting… check it!
Month: January 2011
Data Driven com Selenium IDE? Sim, é possível!
Post original blog “Sem Bugs“ (créditos Elias Nogueira)
Selenium IDE com Data Driven? Sim, isto agora é possível!
Observações iniciais
Eu sempre tive uma postura de um profisisonal, quando em aprendizado do Selenium, aprender o IDE a fins educativos e de primeiro passo da automação (record & play), de usar e propor aos profisisonais e alunos que me procuram a usar o Selenium RC para fazer testes que exigem bem mais do que o IDE: loops, controles, parametrização de dados, etc…
Mas desta vez resolvi postar sobre como fazer com que o Selenium IDE execute scrips Data Driven
ATENÇÃO: Este post é uma alteração do post original da SauceLabs[1] que você pode acessar no link abaixo:
http://saucelabs.com/blog/index.php/2011/01/selenium-resources-for-newbs-data-driven-testing-with-ide-xml/
Ainda mantenho fortemente a minha postura: usem o Selenium RC com qualquer linguagem para usar todo o poder que essa ferramenta pode dar a você. Um dos principais motivos de escrever este post é de:
- Eu gostar destas coisas novas e ficar brincando com os scripts
- De ajudar os nossos amigos profissionais que ainda não sabem falar inglês e não poderiam entender o post original (e que devem levar um puxão de orelha por isso)
- Para poder ajudar aqueles que estão aprendendo o Selenium IDE que, mesmo que este post ajude, você não vai poder fugir da programação para fazer coisas mais poderosas com a ferramenta
[1] Pra quem não sabe o criados da SouceLabs, que presta serviços de teste com Selenium nas nuvens, é um dos criadores do Selenium.
Ahh, e pra quem não sabe o que é Data Driven, é o “poder” de dar ao script a independência de dados através de parâmetros inseridos ao invés dos dados. Se você ainda não sabe o que é isso, Google!
O que você vai precisar!
Basicamente de um plugin e duas “user-extensions” do para o Selenium IDE.
Primeiro siga estes passos:
- Instale o plugin de Flow Control. Necessita de reinicio do Firefox
- Baixe a user-extension includeCommand4IDE na versão 1.1
- Baixe a user-extension datadriven.js, que está na versão 0.2
Clique nos links de cada item para baixá-lo!
Instalou o Flow Control e baixou as duas user-extensions? Faça o seguinte:
- Descompacte os aruqivos zips das respectivas user-extensions num diretório de sua escolha
- Adicione as duas user-extensions no Selenium IDE via menu Options/Options… clicando no botão browser parao item Selenium Core extensions (user-extension.js) (vide Possiveis Erros #1)
- Reinicie o Selenium IDE
Deu tudo certo? Maravilha! Vamos para os próximos passos!
Criar o arquivo XML de Massa de Dados!
Sim, para que seja possível fazer com que o script Selenese (script HTML do Selenium) esteja preparado para o Data Driven é necessário criar um arquivo XML que vai conter os dados que você vai utilizar!
Uma coisa muito importante é primeiro enterder o arquivo XML!
Entendendo o arquivo XML
Abaixo está um exemplo do arquivo XML que estou usando de exemplo:
A linha 1 possui a tag testdata. É ela que identifica que o arquivo XML é a tua massa de dados.
As linhas 2, 3 , 4 e 5 possuem a tag test. Cada tag test é um indício de massa de dados que você vai utilizar no script. Dentro desta tag existem atributos. No exemplo acima os atributos são nome e sobrenome. Estes atributos serão os parâmetros do seu script do Selenium, que irão no formato ${nomeAtributo}.
Neste caso eu tenho que colocar no meu script os parâmetros ${nome} e ${sobrenome} sem precisar criá-los anteriormente no script.
A linha 6 fecha a tab do testdata
Cada atributo tem um valor e é este valor que vai ser substituito pelo parâmetro no script. Lindo né?
Você pode criar diversos test um para cada iteração do script que você necessita.
Agora aconselho fortemente ler os itens #2, #3 e #4 do “Possiveis Erros”
Script!! (êeeeee)
Agora veremos o script final sobre o exemplo e todos os comandos necessários para que ele funcione!
loadTestData | file:///C:/selenium_datadriven/massa_dados.xml | |
open | /arquivos_blog/selenium/datadriven/ | |
while | !testdata.EOF() | |
nextTestData | ||
type | nomePessoa | ${nome} |
type | sobrenomePessoa | ${sobrenome} |
clickAndWait | send | |
assertTextPresent | Olá, ${nome} ${sobrenome} | |
clickAndWait | link=Voltar | |
endWhile |
Na linha 1 da tabela temos o comando que fará o carregamento da massa de dados com o comando loadTestData. Este comando é parte da user-extension datadriven.js.
Você obrigatoriamente deve iniciar o valor deste comando com ‘file:///‘ (sem as aspas simples) seguido pelo caminho do arquivo XML (como no exemplo)
Atenção, leia o #5 do Possíveis Problemas
Na linha 2 da tabela temos o velho conhecido comando open para a minha página de exemplo deste post
Na linha 3 da tabela temos o comando while, da user-extension FlowControl, que é responsável de fazer um loop no script. O valor deste comando é !testData.EOF() que traduzindo quer dizer: “enquanto o testData não terminar, ou seja, existam as tags test execute”. Ele que é responsável por controlar o número de execuções a partir das tags test existentes.
Na linha 4 da tabela existe o comando nextTestData que pertence a user-extension datadriven.js. É ela que validará que existam dados na massa de dados (arquivos XML para continuar executando o script)
Nas linhas 5, 6, 7, 8 e 9 existem os comandos básicos do Selenium para a interação com o exemplo. Aqui você precisa prestar muita atenção: ao invés de manter os valores fixos no script eu os substitui pelos parâmetro ${nome} e ${sobrenome}, que são os nomes dos atributos da tag test do XML da massa de dados, entendeu? É só colocar o mesmo nome e, acredite, ele preencherá com o valor.
Na linha 10 da tabela há a finalização do loop pelo comando endWhile que pertence a user-extension FlowControl.
Agora é só correr para o abraço!
Pronto, tudo está pronto para execução com sucesso!
Tu podes baixar o este exemplo por este link e testar ai!
Se você executares o exemplo que você acabou de baixar, lembre-se de colocar na Base URL o endereço http://eliasnogueira.info
Agora vamos falar sobre o exemplo:
Exemplo utilizado!
O exemplo é bem simples: consiste em um formulário de submissão de dados contendo o Nome e Sobrenome de uma pessoa. Após a submissão dos dados somos redirecionados para uma tela com a seguinte mensagem na página “Olá Fulano de Tal“, onde Fulano é o nome e de Tal é o sobrenome inserido!
A página do exemplo pode ser acessada no link abaixo:
http://eliasnogueira.info/arquivos_blog/selenium/datadriven/index.php
Observação: cuidado para este item não confundir você, mas se for criar um script sobre uma página ajax ou não quer clicar em algum link de voltar, utilize o comando goBackAndWait antes do comando endWhile. Este comando fará com que o script emule o “voltar” do browser.
Possíveis Erros
- Se você não colocar as extensões no lugar certo receberá a seguinte mensagem logo que abrir o Seleium IDE: “error loading Selenium IDE extensions: ReferenceError: Selenium is not defined”. Então garanta que você colocou no campo certo (olhe a imagem)
- Elias, posso mudar o nome da tag testdata? Resposta: não! Sem esta tag o script não roda, é obrigatória!
- Elias, posso mudar o nome da tag test? Resposta: não! Sem esta tag o script não roda, é obrigatória!
- Elias, posso utilizar parâmetros diferentes entre os testes? Resposta: Sim! desde que os parâmetros obrigatórios estejam la. Se tu não entendeu, deixe todos iguais e o script vai rodar sem erros!
Abraço a todos vocês e bom divertimento!
JBoss: Application server baixa, mas as conexões continuam ativas no Oracle
Contribuição Marcos Esplugues
A conexão de fato não existirá mais desde que o application server esteja desligado; quem estaria ligado então? Só faltaria desligar a máquina e a conexão continuar… onde estará o problema.
Realmente não tem nada a ver com a aplicação. O Oracle mantém as sessões porque ele não sabe que o client caiu. Há um parâmetro que pode ser configurado no arquivo sqlnet.ora que faz com que o Oracle, de tempos em tempos, verifique se o cliente está vivo. É o sqlnet_expire_time, configurado em segundos. Um valor muto baixo pode causar excesso de tráfego de rede. Um valor muito alto pode não ter serventia. A Oracle recomenda colocar 10 segundos neste parâmetro:
SQLNET.EXPIRE_TIME=10
É importante que isso não seja passado como uma recomendação ao cliente, mas como uma sugestão ao DBA do ambiente.
Becoming an Ubuntu Developer: a short guide
I’ve heard and/or read a number of complaints over the past while about how the process of becoming an Ubuntu Developer is difficult, so I thought I’d write up a short guide to one of the many paths to becoming a developer. I send this to the Ubuntu Developers list for maximum distribution, although I realise that many of you are already developers, so won’t find this as useful: please skip past it, or pass it on to those you know that are currently interested in becoming Ubuntu Developers (or extending the set of packages to which they have been granted upload rights).
Step 1: Membership
While it’s not required to be an Ubuntu Member before applying to be a developer, it is required that the criteria of Membership be met to be approved as a developer. In short, this means being actively involved with and contributing to Ubuntu for some time (usually about a development cycle, although it can be shorter for those with very strong contributions). Spend time interacting with other members of the community, and learn as much about how Ubuntu works and how it is created as possible. Those with a specific interest in development may find that the Masters of the Unseeded or the Bug Squad are good places to start, if there is no other team with whom they have a natural affinity. Those of more general involvement may obtain membership through any number of other sorts of contributions. More information on the requirements for Membership are available on the wiki at https://wiki.ubuntu.com/Membership
Step 2: Start working in the area for which you want upload rights
We have an increasing number of packagesets, each targeting a specific area of development, and the negative space of all packagesets, where we tend to focus mostly on archive quality. Find an area that interests you, and get to know the developers actively working in that area. Start working on things that fit within your area of interest, building both expertise with the work you have selected and close relationships with others working in the same area. For example, if you wish to be a server developer, start working to fix bugs in packages in the server packageset, working closely with the Ubuntu Server team. Alternately, if you wish to be a core developer, start working to fix bugs in packages in the core packageset, working closely with other core developers. Your goal in this step is to become a peer to the other members of the relevant team. You may find it useful to review https://wiki.ubuntu.com/UbuntuDevelopers to see some of the descriptions of the various sorts of developers.
Step 3: Prepare an application
Follow https://wiki.ubuntu.com/DeveloperMembershipBoard/ApplicationProcess to create your application. Clearly document your work in the areas of interest. Be especially sure to provide links to work done upstream (including in Debian) on packages in the target area, and any work where you were one of several contributing to a single uploaded revision, as the automated upload tracker in launchpad only reports those packages for which you have sole changelog credit. Documenting a few different types of work, or work in different parts of the release cycle (where different choices were required) can help show a broader understanding. The more specific you can be in every section of your application, the better: for example, a future plan to ensure Ubuntu provides the best possible turnkey PBX solution for the next LTS will often receive more credence than a short listing of “more of the same” for someone previously working on the VoIP stack, especially if it includes some details. If you are working on blueprints, listing your outstanding blueprint-related tasks here (with links) is a great way to provide detail. When seeking endorsements for your application, a good strategy is to ask anyone who suggests you should apply to endorse your application, and ask anyone sponsoring your work to endorse you (best to ask at the time they are sponsoring it). If someone says they haven’t seen enough of your work to endorse you, ask them for a task or two: helping folk with their work is nearly guaranteed to get you good endorsements.
Step 4: Apply
Check https://wiki.ubuntu.com/DeveloperMembershipBoard for upcoming meeting dates and times, and send a notification of your application to the mailing list at least a week before the meeting you wish to attend. Be prepared to answer a few questions: these are usually related to your prior work, other information on your application, or Ubuntu development policies and procedures. If your application is deferred for some reason, contact the DMB members who were not yet convinced, and ask them to help you develop a plan to meet their expectations: many current Ubuntu Developers were deferred at first pass, but it is a rare case that someone actively involved was unable to complete the expectations within a few months, and for some it is possible to address the outstanding issues in time for the following meeting.
Good luck. If you’re feeling stuck along the way, feel free to ask other developers with whom you work regularly for guidance or suggestions. Failing that, ask generally in #ubuntu-devel at freenode, or contact a member of the DMB.
Originally sent by Emmet Hikory to the ubuntu-devel mailing list on Thu Jan 27 05:01:01 UTC 2011
Linux: bash commands – Expansions
From Bash Pocket Reference and Advanced Bash−Scripting Guide
When you’re working with variations of a file—like backups or different file types—it can get tedious typing out the same commands with small tweaks. Using the brace symbols ({}
), you can easily perform batch operations on multiple versions of a file.
Say you want to rename just part of a filename. Instead of typing out mv /path/to/file.txt /path/to/file.xml
, you could just run:
mv /path/to/file.{txt,xml}
This runs the command with the same arguments, only with the parts inside the brace changed—the first part corresponding to the first argument, the second part corresponding to the second argument.
The most common example of this is when you’re backing up a file that you’re making changes to. For example, if you are tweaking your rc.conf
, you’ll want to make a backup in case the new one doesn’t work. So, to do so, you can just run:
sudo cp /etc/rc.conf{,-old}
Putting nothing before the comma will just append -old
to the filename after copying it with cp
. If your new file doesn’t work out and you want to restore the backed up file to its original location, you can just use:
sudo mv /etc/rc.conf{-old,}
Moving the comma to the other end of the brace will remove -old
from the end of the file and restore it to its original name.
The braces can also work when moving or creating multiple files at once. For example, if you wanted to create three numbered directories, you could just run:
mkdir myfolder{1,2,3}
This will create three folders: myfolder1, myfolder2, and myfolder3.