Fixture "Webtest" para Fitnesse/Selenium  XML
Índice dos Fóruns » Metodologias de Desenvolvimento e Testes de Software
Autor Mensagem
Alessandro Lazarotti
Virtual Machine Man
[Avatar]

Membro desde: 21/01/2004 14:12:54
Mensagens: 719
Offline

http://fitnesse.info/webtest/

Alguém esta usando ou experimentaram esta fixture para integrar o Fitnesse com o Selenium?
Caso sim, quais foram suas impressões?

... Lezinho
------------------------
twitter: @lazarotti
http://alessandrolazarotti.wordpress.com/
http://jbossbrasil.org/

[Email] [MSN]
s4nchez
Virtual Machine Man
[Avatar]

Membro desde: 05/06/2006 11:35:55
Mensagens: 674
Localização: London, UK
Offline

Apesar de eu ter trabalhado com o autor dessa Fixture e até ter escrito alguns comandos que faltavam, eu não uso ela mais. Manter scripts de Selenium é um pé no saco, e FitNesse ajuda mas não resolve o problema.

O negócio é usar selenium-rc direto com Page Objects. Até escrevi um post sobre isso.

This message was edited 2 times. Last update was at 01/07/2008 17:14:25


Ivan Sanchez | coding dojo | blog | twitter
[WWW]
Alessandro Lazarotti
Virtual Machine Man
[Avatar]

Membro desde: 21/01/2004 14:12:54
Mensagens: 719
Offline

A idéia de PO é bem interessante e natural em projetos que são, por natureza, orientado a objetos. No entanto, algo que gosto do Fit(FitNesse) para os testes de aceitação é propiciar a colaboração e trazer isso em um ambiente informativo executável (colaborativo na visão do cliente + time de desenvolvimento).

Não sou fã tbm da idéia de sair rodando Selenium e capturando Scripts, isso seria uma mão inversa da idéia de acolher os critérios de aceitação "antes".

Por isso, com a fixture do webtest não estou avaliando a utilização de PlainSeleniumTest, mas sim usar a DSL estendida da DoFixture, com o S-RC colaborando. Essas DSLs podem ser levantadas como critérios de aceite junto com o cliente (talvez nao em sua totalidade, mas as mais relevantes) e já estarem disponíveis para testar o comportamento da aplicação, sem precisar capturar script algum.

Na prática Ivan, você já enfrentou algum problema com isso?

... Lezinho
------------------------
twitter: @lazarotti
http://alessandrolazarotti.wordpress.com/
http://jbossbrasil.org/

[Email] [MSN]
s4nchez
Virtual Machine Man
[Avatar]

Membro desde: 05/06/2006 11:35:55
Mensagens: 674
Localização: London, UK
Offline

Já encontrei vários problemas, não por causa do FitNesse, mas por causa de testar a partir da interface com o usuário: compatibilidade entre navegadores, tempo de execução dos testes, dificuldades para fazer setup/teardown em servidores remotos etc.

Hoje em dia eu tento me preocupar mais com regras de negócio do que interface com usuário. Nesse caso posso usar as classes do sistema diretamente nas minhas próprias Fixtures, rodando dentro de transações para facilitar o setup/teardown e tem funcionado que é uma beleza. Se a camada de apresentação não for a parte mais complicada do seu sistema, essa é uma ótima opção.

Ainda tenho testes em Selenium para validar workflows e coisas do tipo, mas tento mantê-los o mais light possível. Quanto mais eu puder evitá-los, melhor!

Ivan Sanchez | coding dojo | blog | twitter
[WWW]
Alessandro Lazarotti
Virtual Machine Man
[Avatar]

Membro desde: 21/01/2004 14:12:54
Mensagens: 719
Offline

Sim, porém este é um ponto que nem mesmo Page Objects resolve, uma vez que se ele realizar chamadas ao Selenium-RC cai no mesmo problema. Esta é uma questão mais relacionadas com "o que testar".

Encaro que os critérios de aceitação para as regras de negócio é super importante, porém a garantia que o resultado da regra (por exemplo) vai "sempre" ser exibido na interface conforme definido pelo cliente também é algo a se considerar. Se o cliente define que uma funcionalidade esta completa SE a página que exibe o cálculo da IRF exibe o resultado após a seleção via AJAX de um cpf ... sendo que este DEVE aparecer em verde caso a restituição seja acima de R$100,00 e azul caso seja abaixo, é arriscado que isso não esteja coberto.

Caso o estado de alguns de seus objetos de negócios sejam conversacionais entre requisições web, por exemplo wizards, tbm acho prudente que a experiência via interface seja mantida (satisfazer um critério de aceitação para este caso "simulando" o ambiente talvez não seja justo).

... Lezinho
------------------------
twitter: @lazarotti
http://alessandrolazarotti.wordpress.com/
http://jbossbrasil.org/

[Email] [MSN]
s4nchez
Virtual Machine Man
[Avatar]

Membro desde: 05/06/2006 11:35:55
Mensagens: 674
Localização: London, UK
Offline

Lezinho wrote:Sim, porém este é um ponto que nem mesmo Page Objects resolve, uma vez que se ele realizar chamadas ao Selenium-RC cai no mesmo problema. Esta é uma questão mais relacionadas com "o que testar".

Concordo. Page Object ajuda na hora escrever/manter os testes, mas não resolve todos os problemas.
Lezinho wrote:
Encaro que os critérios de aceitação para as regras de negócio é super importante, porém a garantia que o resultado da regra (por exemplo) vai "sempre" ser exibido na interface conforme definido pelo cliente também é algo a se considerar. Se o cliente define que uma funcionalidade esta completa SE a página que exibe o cálculo da IRF exibe o resultado após a seleção via AJAX de um cpf ... sendo que este DEVE aparecer em verde caso a restituição seja acima de R$100,00 e azul caso seja abaixo, é arriscado que isso não esteja coberto.

Caso o estado de alguns de seus objetos de negócios sejam conversacionais entre requisições web, por exemplo wizards, tbm acho prudente que a experiência via interface seja mantida (satisfazer um critério de aceitação para este caso "simulando" o ambiente talvez não seja justo).


Nos dois exemplos que você deu a parte mais importante da história está na interface com usuário. Neste caso é sensato fazer os testes de aceitação cobrirem esta parte. Só que há muitos casos onde isso não é tão crítico.

Por exemplo, no caso do cálculo da restituição do IRF mesmo, o "como calcular" é definido no seu modelo, e não na interface. Neste caso eu usaria FitNesse para validar todas estas regras e Selenium apenas para ver se os resultados aparecem na hora e lugar certo.

Perceba que não estou dizendo que Selenium tem que ser abandonado e deve-se testar apenas regras de negócio com FitNesse. O que estou dizendo é que para muitos casos mesmo testes de aceitação não precisam ser feitos a partir da interface com o usuário.

Ivan Sanchez | coding dojo | blog | twitter
[WWW]
s4nchez
Virtual Machine Man
[Avatar]

Membro desde: 05/06/2006 11:35:55
Mensagens: 674
Localização: London, UK
Offline

Apropósito, uma abordagem que pode ser interessante é mesclar testes de interface e negócio em FitNesse. Neste caso ao invés de usar a fixture WebTest eu escreveria minhas próprias fixtures para atuarem como os Page Objects (usando selenium-rc por trás dos panos) para prover uma linguagem única na hora de escrever os testes de aceitação.

Ivan Sanchez | coding dojo | blog | twitter
[WWW]
Alessandro Lazarotti
Virtual Machine Man
[Avatar]

Membro desde: 21/01/2004 14:12:54
Mensagens: 719
Offline

De fato o negócio merece, por si só, uma cobertura dedicada.
Separar os propósitos e finalidades de Acceptance Tests pode ser a fronteira sobre o domínio e a interface. Daí por diante, utilizar Page Objects ou DSLs vai depender de como a equipe esta fazendo o resto da cobertura.

[]'s

... Lezinho
------------------------
twitter: @lazarotti
http://alessandrolazarotti.wordpress.com/
http://jbossbrasil.org/

[Email] [MSN]
esmiralha
JavaEvangelist

Membro desde: 19/07/2006 09:04:42
Mensagens: 402
Offline

s4nchez wrote:Apesar de eu ter trabalhado com o autor dessa Fixture e até ter escrito alguns comandos que faltavam, eu não uso ela mais. Manter scripts de Selenium é um pé no saco, e FitNesse ajuda mas não resolve o problema.

O negócio é usar selenium-rc direto com Page Objects. Até escrevi um post sobre isso.


Gostei muito do post, mas queria fazer uma sugestão. No exemplo do Google, tem uma bola um pouco dividida de asserções entre o Page Object e o Teste. Você não acha que fica mais claro colocar todas as asserções no Teste?

Abraço,
Luiz
s4nchez
Virtual Machine Man
[Avatar]

Membro desde: 05/06/2006 11:35:55
Mensagens: 674
Localização: London, UK
Offline

Nao entendi direito sua sugestao. Voce esta se referindo a esta checagem?



Neste caso eu prefiro lancar uma excecao porque nao estou na pagina que este Page Object representa. E eh melhor saber isso o mais cedo possivel, antes de comecar a usar o PO e ter que identificar todo tipo de comportamento estranho que os outros metodos vao ter se eu estiver na pagina errada.

De qualquer modo eu concordo contigo. Eh sempre melhor fazer o PO somente dar informacoes sobre a interface e encarregar os testes de verificarem estas informacoes.

Ivan Sanchez | coding dojo | blog | twitter
[WWW]
cv
Moderador
[Avatar]

Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline

+1 pra Page Objects. Trabalhava no mesmo projeto que o Simon Stewart quando a gente inventou esse treco, e ajuda MUITO a tornar os testes mais expressivos.

Estamos fazendo uma coisa igual em Ruby hoje em dia, e ta dando bem certo.

Uma unica armadilha que eh facil de cair eh desenhar os seus Page Objects pra so fazer uma coisinha de cada vez: eh facil ter uma pagina moderninha que usa AJAX e que pode estar em zilhoes de estados diferentes, e acabar com zilhoes de page objects diferentes pra representar as possiveis combinacoes. Eh uma armadilha dificil de identificar, mas que fica meio obvia depois que vc ve a explosao de classes no /spec/page
[Email] [WWW] [Yahoo!] [MSN] [ICQ]
greis
HelloWorld
[Avatar]

Membro desde: 05/04/2009 18:22:23
Mensagens: 14
Localização: São Paulo
Offline

Também concordo que os asserts tem que ficar no teste. Mas tem duas alternativas para isso.




O que vocês estão usando?

http://www.seuenium.com.br - o Blog do Seu Enium sobre Selenium.
[WWW]
s4nchez
Virtual Machine Man
[Avatar]

Membro desde: 05/06/2006 11:35:55
Mensagens: 674
Localização: London, UK
Offline

Eu usaria algo como:


Ivan Sanchez | coding dojo | blog | twitter
[WWW]
 
Índice dos Fóruns » Metodologias de Desenvolvimento e Testes de Software
Ir para:   
Powered by JForum 2.1.8 © JForum Team