Posts Tagged autotest
Notificações de testes (Novidades)
Posted by alexandre in Linux, Open Source, Ruby on Rails, rails, ruby, tecnologia on junho 15, 2008
Mesmo os testes automatizados rodando perfeitamente com as nofitificações libnotify do gnome eu ainda não fiquei sossegado, afinal aquela mensagem ali na parte de baixo da tela (me lembrando os tempos de windows) não estava muito ao meu agrado, além de que segundos após a mensagem some e não há outro modo a não ser ir até o console para verificar o que havia acontecido (não que seja algo ruim, pois eu particularmente prefiro trabalhar sempre com a janela do editor não cobrindo a tela toda e ter o final da saida da linha de comando de um shell sempre visível). Pesquisando um pouquinho mais sobre o assunto dos testes automatizados e notificações encontrei este post, falando sobre o ruby-libnotify. Hum, vejamos, no post original o autor sugere que instalemos os seguintes componentes via apt-get:
ruby-gnome2 build-essential ruby1.8-dev libnotify-dev.
O detalhe é apenas que a biblioteca ruby-gnome2 (ao menos no Ubuntu) instala toda a parafernalha do Ruby/GTK, coisa que aparentemente não precisamos, uma vez que vamos dar um simples require 'gtk2' em nosso arquivo de configurações. Lendo os comentários do post havia um que dizia que o arquivo gtk2.rb pertencia à biblioteca libgtk2-ruby1.8 (que é instalada juntamente com o restante da parafernalha por ser um requisito da ruby-gnome2). Note que a instalação da libgtk2-ruby1.8 também vai instalar bastante dependências, mas acredito que sejam aproximadamente a metade dos pacotes.
Vamos a instalação e configuração:
primeiro, abra um terminal e vamos aos comandos.
$ sudo apt-get install libgtk2-ruby1.8 build-essential ruby1.8-dev libnotify-dev
ele vai instalar todas as dependências, mas são todos pacotes pequenos
Agora você vai precisar do pacote ruby-libnotify, baixar e instalar com os comandos:
$ wget -c http://rubyforge.org/frs/download.php/27134/ruby-libnotify-0.3.3.tar.bz2
$ tar -jxvf ruby-libnotify-0.3.3.tar.bz2
$ cd ruby-libnotify-0.3.3
$ ruby extconf.rb && make && sudo make install
Isso roda a configuração, compila e instala a extensão.
agora você precisa de uma versão modificada do arquivo .autotest do post anterior: (baixe aqui se tiver problemas com as aspas)
#!/usr/bin/env ruby
#
# Copyright (c) 2007 Thomas Weibel,
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
require 'rnotify'
require 'gtk2'
module Autotest::RNotify
class Notification
attr_accessor :verbose, :image_root, :tray_icon, :notification,
:image_pass, :image_pending, :image_fail
def initialize(timeout = 5000,
image_root = "#{ENV['HOME']}/.autotest_images" ,
verbose = false)
self.verbose = verbose
self.image_root = image_root
puts 'Autotest Hook: loading Notify' if verbose
Notify.init('Autotest') || raise('Failed to initialize Notify')
puts 'Autotest Hook: initializing tray icon' if verbose
self.tray_icon = Gtk::StatusIcon.new
tray_icon.icon_name = 'face-monkey'
tray_icon.tooltip = 'RSpec Autotest'
puts 'Autotest Hook: Creating Notifier' if verbose
self.notification = Notify::Notification.new('X', nil, nil, tray_icon)
notification.timeout = timeout
Thread.new { Gtk.main }
sleep 1
tray_icon.embedded? || raise('Failed to set up tray icon')
end
def notify(icon, tray, title, message)
notification.update(title, message, nil)
notification.pixbuf_icon = icon
tray_icon.tooltip = "Last Result: #{message}"
tray_icon.icon_name = tray
notification.show
end
def passed(title, message)
self.image_pass ||= Gdk::Pixbuf.new("#{image_root}/pass.png", 48,48)
notify(image_pass, 'face-smile', title, message)
end
def pending(title, message)
self.image_pending ||= Gdk::Pixbuf.new("#{image_root}/pending.png",48,48)
notify(image_pending, 'face-surprise', title, message)
end
def failed(title, message)
self.image_fail ||= Gdk::Pixbuf.new("#{image_root}/fail.png", 48,48)
notify(image_fail, 'face-sad', title, message)
end
def quit
puts 'Autotest Hook: Shutting Down...' if verbose
#Notify.uninit
Gtk.main_quit
end
end
Autotest.add_hook :initialize do |at|
@notify = Notification.new
end
Autotest.add_hook :ran_command do |at|
results = at.results.last
unless results.nil?
# Test::Unit
if results.include? 'tests'
output =
results[/(\d+)\s+tests?,\s*(\d+)\s+assertions?,\s*(\d+)\s+failures?(,\s*(\d+)\s+errors)?/]
if output
failures = $~[3].to_i + $~[5].to_i
end
# RSpec
else
output =
results[/(\d+)\s+examples?,\s*(\d+)\s+failures?(,\s*(\d+)\s+pending)?/]
if output
failures = $~[2].to_i
pending = $~[4].to_i
end
end
if failures > 0
@notify.failed("Tests Failed", output)
elsif pending > 0
@notify.pending("Tests Pending", output)
else
unless at.tainted
@notify.passed("All Tests Passed", output)
else
@notify.passed("Tests Passed", output)
end
end
end
end
Autotest.add_hook :quit do |at|
@notify.quit
end
end
opcionalmente você pode baixar diretamente do post do autor, um arquivo zip contendo o .autotest e as imagens
não esqueça que o arquivo deve ficar dentro de sua pasta HOME



as Imagens utilizadas foram baixadas daqui. para utilizar com o script acima, baixe as imagens e descompacte dentro de um diretório chamado .autotest_images dentro de sua pasta HOME
Notificações de Testes… outra vez
Bem, em um post anterior falei sobre minha jornada até encontrar a solução para as notificações de testes. pois bem, modifica lá, modifica aqui, modifica ali, e acabei com a seguinte versão do meu arquivo ~/.autotest.
outro dia já havia visto algumas alterações feitas pelo Carlos na versao dele do .autotest, mas acabei não mexendo no meu pois, o meu era voltado para o Test::Unit e o dele para o rSpec
Pois bem, hoje ele publicou uma nova versão compatível também com o Test::Unit, então resolvi simplesmente compatibilizar com as duas plataformas. O resultado você pode acompanhar aqui :~/.autotest
Eu particularmente uso o Ubuntu, portanto não testei em outros linux, mas a chance de funcionar é grande uma vez que depende apenas das bibliotecas tratadas no post anterior.
Quem sabe isto não vire um mini-projeto de fácil instalação e multiplataforma [Apenas copie o arquivo para seu diretório Home]
Só falta alguém fazer funcionar no Windows, o que não me parece difícil, visto que existe um pacote chamado snarl que pode resolver este problema. Prometo que assim que eu tiver um tempo e acesso a um Windows (ninguém me força a botar o CD de restore do meu Acer no drive) tentarei fazer por mim mesmo esta compatibilidade para a comunidade.
Well, in the last post I wrote about my journey until find a solution to test notifications with Rails. That’s right, a change here, a change there, and I finally got my working version of ~/.autotest.
Some days ago I already seen some modifications made by Carlos in his version of .autotest, but, I don’t made any change in my version because the mine was written for Test::Unit and his for rSpecToday he published a new version compatible also with Test::Unit, so I decide to simply compatibilize it with both platforms. The result you can see here:~/.autotest
I use Ubuntu, so I have not tested in another distros, but the chance that all will work is very large, since the dependencies are just libraries listed in my last post.
Who knows it can became a mini-project with easy instalation and multiplatform [Just copy the file to your Home directory]
We will wait some people get it working in Windows, it not seems to be difficult, because exists a package named snarl that can help to solve this problem. I promise that when I get time and have access to a Windows machine (nobody will force-me to put the Acer system restore CD in my CD-ROM drive) I willl try to get it working by myself for the community.
Rails2 ZenTest e Libnotify
Após um longo tempo tentando fazer funcionar as notificações dos testes com o Rails no meu recém instalado Ubuntu 8.04 (hardy) sem muito sucesso, finalmente cheguei a uma resposta.
a Combinação foi a seguinte:
1. ZenTest (ZenTest 3.9.2), o Framework de testes propriamente dito.
$sudo gem install ZenTest
2. RedGreen (redgreen 1.2.2), para colorizar o resultado dos testes, fica mais atrativo e fácil de verificar os resultados
$sudo gem install redgreen
3. libnotify-bin, pacote presente nos repositórios do ubuntu para enviar mensagens de notificação ao desktop
$sudo apt-get install libnotify-bin
4. Arquivo de configuração do autotest colocado no meu diretório home ~/.autotest
neste caso:
$gedit ~/.autotest
e coloque o código a seguir:
# ~/.autotest
module Autotest::GnomeNotify
EXPIRATION_IN_SECONDS = 8
FAIL_IMAGE = "gtk-dialog-error"
PENDING_IMAGE = "gtk-dialog-warning"
SUCCESS_IMAGE = "gtk-dialog-info"
# FAIL_IMAGE = "~/Imagens/rails_fail.png"
# PENDING_IMAGE = "~/Imagens/rails_pending.png"
# SUCCESS_IMAGE = "~/Imagens/rails_success.png"
def self.notify title, message, stock_icon
options = "-t #{EXPIRATION_IN_SECONDS * 1000} -i #{stock_icon}"
system "notify-send #{options} '#{title}' '#{message}'"
end
Autotest.add_hook :ran_command do |at|
result = at.results.last
if result
examples = result =~ /(\d+) examples/ ? $1.to_i : 0
failures = result =~ /(\d+) failure/ ? $1.to_i : 0
pendings = result =~ /(\d+) pending/ ? $1.to_i : 0
if failures > 0
notify "Tests Failed", "#{failures} test#{ 's' if failures > 1 } failed", FAIL_IMAGE
elsif pendings > 0
notify "Tests Pending", "#{pendings} test#{ pendings == 1 ? ' is pending' : 's are pending'}", PENDING_IMAGE
else
notify "Tests Passed", "All tests passed", SUCCESS_IMAGE
end
end
end
end
copie e cole o código ou faça o download aqui de um arquivo no formato do openoffice (o wordpress nao permite fazer o upload de qualquer tipo de arquivo) com o conteúdo descrito acima. Copie o conteúdo e cole em seu ~/.autotest.
Dica: Você pode personalizar as imagens, colocando o caminho de uma imagem da sua preferência, assim como eu faço na parte do código do .autotest que está comantada:
# FAIL_IMAGE = "~/Imagens/rails_fail.png" # PENDING_IMAGE = "~/Imagens/rails_pending.png" # SUCCESS_IMAGE = "~/Imagens/rails_success.png"
Feito isto, tive minhas notificações de teste funcionando perfeitamente como podem visualizar neste screenshot:
para fazer os testes, escreva-os, vá até o diretório do seu projeto e
$autotest
isto supondo que você já tenha o ruby e o rails previamente instalado e funcionando perfeitamente
obs o código original foi retirado daqui





