SeleniumHq

Primeira colocação do uso de selenium no meu projecto de trabalho.

16:52:56.775 INFO – Started org.openqa.jetty.jetty.servlet.ServletHandler@7ad81784
16:52:56.775 INFO – Started HttpContext[/wd,/wd]
16:52:56.779 INFO – Started SocketListener on 0.0.0.0:4444
16:52:56.779 INFO – Started org.openqa.jetty.jetty.Server@6f507fb2
16:54:27.227 INFO – Checking Resource aliases
16:54:27.245 INFO – Command request: getNewBrowserSession[*chrome, http://cableweb/%5D on session null
16:54:27.257 INFO – creating new remote session
16:54:27.430 WARN – Caution: ‘/usr/bin/firefox’: file is a script file, not a real executable.  The browser environment is no longer fully under RC control
16:54:27.432 INFO – Allocated session ad8fbaba3c6a4caba2aaa62f118253b8 for http://cableweb/, launching…
16:54:27.516 INFO – Preparing Firefox profile…
16:54:32.489 INFO – Launching Firefox…
16:54:35.965 INFO – Got result: OK,ad8fbaba3c6a4caba2aaa62f118253b8 on session ad8fbaba3c6a4caba2aaa62f118253b8
16:54:36.028 INFO – Command request: setTimeout[30000, ] on session ad8fbaba3c6a4caba2aaa62f118253b8
16:54:36.052 INFO – Got result: OK on session ad8fbaba3c6a4caba2aaa62f118253b8
16:54:36.104 INFO – Command request: open[/index.php, ] on session ad8fbaba3c6a4caba2aaa62f118253b8
16:54:36.356 INFO – Got result: OK on session ad8fbaba3c6a4caba2aaa62f118253b8
16:54:36.407 INFO – Command request: click[link=Aquisições, ] on session ad8fbaba3c6a4caba2aaa62f118253b8
16:54:36.426 INFO – Got result: ERROR: Element link=Aquisições not found on session ad8fbaba3c6a4caba2aaa62f118253b8
16:54:36.477 INFO – Command request: testComplete[, ] on session ad8fbaba3c6a4caba2aaa62f118253b8
16:54:36.477 INFO – Killing Firefox…
16:54:36.513 INFO – Got result: OK on session ad8fbaba3c6a4caba2aaa62f118253b8
16:55:30.999 INFO – Command request: getNewBrowserSession[*chrome, http://cableweb/%5D on session null
16:55:30.999 INFO – creating new remote session
16:55:31.000 INFO – Allocated session 38cbb4859dcf4cdfb8c33f7f160c56f7 for http://cableweb/, launching…
16:55:31.060 INFO – Preparing Firefox profile…
16:55:33.334 INFO – Launching Firefox…
16:55:35.379 INFO – Got result: OK,38cbb4859dcf4cdfb8c33f7f160c56f7 on session 38cbb4859dcf4cdfb8c33f7f160c56f7
16:55:35.427 INFO – Command request: setTimeout[30000, ] on session 38cbb4859dcf4cdfb8c33f7f160c56f7
16:55:35.438 INFO – Got result: OK on session 38cbb4859dcf4cdfb8c33f7f160c56f7
16:55:35.490 INFO – Command request: open[/index.php, ] on session 38cbb4859dcf4cdfb8c33f7f160c56f7
16:55:35.691 INFO – Got result: OK on session 38cbb4859dcf4cdfb8c33f7f160c56f7
16:55:35.742 INFO – Command request: click[link=Aquisições, ] on session 38cbb4859dcf4cdfb8c33f7f160c56f7
16:55:35.759 INFO – Got result: ERROR: Element link=Aquisições not found on session 38cbb4859dcf4cdfb8c33f7f160c56f7
16:55:35.810 INFO – Command request: testComplete[, ] on session 38cbb4859dcf4cdfb8c33f7f160c56f7
16:55:35.811 INFO – Killing Firefox…

Houston we have a #FAIL

Apesar do fail isto é apenas o principio, os testes ficaram relativamente bem feitos com o selenium IDE, agora em codigo tenho de resolver situações, que não consigo cobrir com o selenium IDE.

http://seleniumhq.org/docs/appendix_locating_techniques.html

Fecho do ano de 2010

Se 2009 foi um ano de mudanças 2010 não lhe ficou atrás.

Tive uma prenda fantástica em Setembro apesar de não ser o meu aniversário, prenda de 3.296kg e 51 cm de comprimento, algo fantástico e uma esposa que se revelou uma excelente mãe com a ajuda de um excelente pai 😛 , dos 3.296kg para 5.625kg e dos 51cm para os 60cm de hoje foram 3 Meses fantásticos nesse aspecto toda a evolução (adoro a evolução), o agarrar o rir o espernear-se quando quer colo, “levantar-se” a procura e reclamação pela constante atenção, o alimentar-se de duas em duas horas o evitar que os pais(principalmente a mãe) se afastem durante mais que 1 minuto é no fundo fantástico.

Entre várias complicações monetárias no final podemos dizer que tudo correu como tinha de correr 😛 (isto não diz nada). Iva a +2% aí vamos nós. Pedido de factura sempre que compro algo tornou-se um MUST estou farto de pagar pelos outros.

Em termos de trabalho o projecto no qual estou inserido tem corrido bem apesar dos solavancos chegou a um ponto estável da aplicação em que permitiu fazer melhoramentos que não tinha tempo nem oportunidade para fazer no principio e não era prioritário naquele momento.

Apercebi-me que quanto mais codigo mantenho comentado é mais provavel que o que eu estou
a fazer não seja 100% seguro.
Os testes unitários nem sempre ajudam a prever todos os problemas os issues de conectividade foram um caso desses ( bem disse que precisava de um switch para inventar com rate limiting e criar outro tipo de problemas, que um simples desligar de cabo não serve para testar ).

#javascript
Impressionante como evolui na web e daquilo que era, “filho da mãe do javascript e os browsers” passou a “assim com javascript fica muito mais user friendly”.

#php
A ideia no projecto desde o principio era criar um auto Loader mas ainda uma certa falta de direcção do projecto e ainda algumas dúvidas colocaram isto para uma feature implementada mais tarde, acabou por ter uma resolução rápida em uma manhã inspirada(?!).
Limpeza do frontend look and feel que acho que não se adequavam à aplicação e após ter usado algum tempo a aplicação de acordo com as necessidades que haviam surgido apercebemos-nos de pontos a melhorar.

#perl
As falhas de conectividade foram uma constante e aquilo que mais provocou problemas, algo que supostamente seria simples com milhares de registo viu-se complicado. Pensei em algo na tentativa de simplicidade e rapidez de execução e após uns tempos revelou-se uma dor de cabeça em termos de
gestão porque coisas que não deveriam acontecer aconteceram (dammit SQL transactions). Para corrigir resumidamente segmentei codigo, alterei codigo e consegui um bom ganho de performance.

#webservices
A tal regra do if it works don’t touch it, aplica-se aqui. Resincronizar registos de um lado para outro num sistema tipicamente Async é doloroso. Século 21 e alguns sistemas ainda são predominantemente asincronos numa tentativa de ganhar velocidade. Ganha-se velocidade perde-se eficiência e eficácia.
Algo que também se percebeu como já referi anteriomente é que, o que é colocado para testes nem sempre representa o que nos vão enviar para produtivo.

#mysql
Tem respondido bem e na minha opinião nem está optimizado a 100% configurações relativamente basicas mas o novo ano vai puxar por ele (eu pelo menos já fiz codigo para puxar por ele).
InnoDB é algo que deveria ser padrão quando se cria uma tabela.
Calcular uma max+1 de uma tabela nunca me deu tantos problemas como este ano e como método já foi encostado para canto não vá voltar a usa-lo sem querer.
Em falar nisso, temos mais umas tabelas para alterar malta.

#sysadmin
Para uns spam está a deixar de ser um problema eu saí disto à um ano, fiquei com aquilo que se chama a manutenção de serviço, alterar raid 1 para raid 5 é cool mas pode dar chatices, como:
– dear god we have to reboot now
– Resize the disk after reboot
– Where are the files?!
* Comprem a máquina com os slots cheios 😛 ou então don’t migrate usem nova partição ou espetem LVM em cima parece-me mais simples que alterar o raid.
Nem todo o equipamento que se compra caro vale o cash que se paga.
Nem tudo o que parece facilitar facilita.
Backups continuam a ser um must have e um make sure it’s working. Se possível arranjem alguém só para ver isto.

#sap
Just because it’s expensive it doesn’t mean it’s good. It means it has years in the market and many people got problems, you now don’t have to worry about. Also means a huge system with tons of maintenance and complexity above the normal. Scalability, will talk in the future…

#phpunit
Testes unitários são bons quando temos tempo para os fazer e pensar, em muitos casos ajudam a evitar entrarmos nos mesmos erros quando alteramos codigo.
(esquecia-me de falar deste factor importante de 2010 que foram os testes unitários com phpunit)

PHP Unit testing

Desenvolver a aplicação dá trabalho e desenvolver testes aumenta esse trabalho e tempo de desenvolvimento. Mas pode ser muito proveitoso a longo prazo.
Exemplo disto é ter criado vários componentes de uma aplicação e para testar todo o seu funcionamento e resultado correcto de processos usei o phpunit ou até scripts simples de testes.
O PHPUnit permite uma melhor padronização de todos os testes e depois até agrupa-los a uma ferramenta como o phpUnderControl.
Em grandes processos e num ambiente de rápida alteração dos mesmos devido a mudanças de lógica de negócio isto pode ser uma mais valia.
Ou até mesmo para testar a aplicação antes de colocar a mesma em produção pode poupar muito tempo em debuging.

Existem linhas de código de exemplo no site do phpunit para dar um auxilio inicial não acho isto complicado, desde que tenhamos uma noção do que vamos testar e como preparar os dados para esse teste. Tive de usar uma BD de testes padrão e usar o setUp() e tearDown() do phpunit para trabalhar a BD antes do inicio dos testes de modo a que a BD contivesse dados preparados para testar o processo alvo.

Este texto é para encorajar as pessoas a criarem testes unitários para evitarem futuros problemas em grandes processos.