BT

Distribuindo Testes de Integração de JavaScript com o Test Swarm

por Dio Synodinos , traduzido por Carlos Mendonça em 30 Abr 2009 |

John Resig, criador da biblioteca JavaScript jQuery, lançou o TestSwarm, uma plataforma para testes de integração contínua distribuída para JavaScript client-side. Frustrado com ambientes de teste de JavaScript tradicionais que não escalam, John criou este novo projeto, que atualmente está em versão alpha privada e que procura proporcionar um sistema para terceirizar testes em browser para grandes grupos de pessoas ou comunidades.

Testar o jQuery em vários browsers é uma tarefa árdua como John explica:

No projeto jQuery, nós tentamos suportar entre todos os principais browser, suas versões atuais, suas versões anteriores e as os próximos betas ou nightly releases (isto é balanceado de acordo com o quão rápido os usuários fazem upgrade de seus browsers - usuários do Safari e do Opera, por exemplo, fazem upgrade rapidamente).

No momento de publicação deste post, esta relação inclui 12 browsers.

  • Internet Explorer 6, 7, 8. (não incluindo o 8 em modo de emulação do 7.)
  • Firefox 2, 3, Nightly.
  • Safari 3.2, 4.
  • Opera 9.6, 10.
  • Chrome 1, 2.

Essa lista contempla, obviamente, só Windows e não inclui OS X ou Linux. Por uma questão de organização no projeto jQuery, nós geralmente só testamos em uma plataforma - mas idealmente nós deveríamos testar o Firefox, Safari e Opera (os únicos browsers multi-plataforma) em todas as plataformas.

O resultado final é que nós precisamos rodar 10 conjuntos de teste em 12 browsers antes e depois de cada commit do núcleo do jQuery. Cross-Browser Testes de JavaScript em múltiplos browsers não escala.

O problema com testes jQuery fica muito pior quando eles requerem interação com o usuário, assim como acontece com qualquer aplicação web pesada com JavaScript:

Algumas ferramentas de teste (como o Yahoo UI, jQuery UI e o Selenium) têm formas de automatizar partes da interação do usuário (você pode escrever testes como ‘Clique este botão e clique nesta outra coisa’). Para a maioria dos casos, isso funciona muito bem. Entretanto, tudo isso é apenas uma aproximação interação real que o usuário pode empregar. Não tem nada melhor do que pessoas reais manualmente rodarem alguns testes facilmente replicáveis (e verificáveis) na mão.

Este é o maior problema de escalabilidade de todos. Pegue o problema anterior de escalar conjuntos de testes automáticos e multiplique pelo número de testes que você quer rodar. 100 testes em 12 browsers rodando a cada commit por um humano é simplesmente insano. Deve haver uma forma melhor já que Cross-Browser Testes de JavaScript em múltiplos browsers não escala.

As soluções atuais como o Selenium Grid têm várias limitações :

  • Até onde eu sei, o Selenium Grid requer que você utilize o Selenium para rodar seus testes. Atualmente, nenhuma das principais bibliotecas JavaScript utilizam Selenium (e uma mudanças profundas seriam necessária para que utilizassem).
  • Ele não é capaz de realizar testes em máquinas não-desktop. Cada servidor precisa rodar o daemon para coordenar as tarefas em lote - isto deixa aparelhos móveis de fora.
  • Ele não é capaz de realizar testes com browsers não suportados. Cada browser necessita de código especial para disparar o carregamento dos browsers pelo Selenium. Portanto, um browser não suportado (como o IE 8, Opera 10, nightly builds do Firefox ou o Chrome) pode não ser capaz de rodar.
  • E principalmente: o Selenium Grid requer que você de fato controle as máquinas nas quais você pode rodar os testes. Isso nem sempre é viável, especialmente em um mundo de desenvolvimento JavaScript Open Source distribuído onde não há recursos para custear máquinas dedicadas para rodar continuamente. Uma solução mais eficiente em termos de custo é necessária.

A solução do John, o Test Swarm, é baseada em um cliente JavaScript que continuamente faz um ping em um servidor central procurando testes para rodar. O servidor coleta conjuntos de testes e os envia para os respectivos clientes:

É assim que eu vejo o TestSwarm funcionando: bibliotecas JavaScript Open Source enviam seus conjuntos de teste para o servidor central e usuários se juntam para ajudar. Usuários da biblioteca podem sentir que eles estão participando e ajudando o projeto (e realmente estão!) simplesmente mantendo algumas janelas de browser abertas a mais durante suas atividades diárias normais.

As bibliotecas também podem fornecer testes manuais para o usuário. Um usuário será notificado quando um novo teste manual estiver disponível (talvez através de um sinal de áudio?) que ele pode rodar rapidamente.

Toda esta ajuda dos usuários não seriam a troco de nada. Haveria listas que contabilizariam os usuários que participam dos testes de mais bibliotecas e poderia ser possível premiar os principais participantes (com camisetas, canecas, livros etc.)

A InfoQ entrou em contato com o John Resig para mais informações.

InfoQ: Através de qual licença o TestSwarn será lançado?

Será lançado através da licença MIT (o software no servidor será PHP e MySQL e o software dos clientes será um JavaScript simples).

InfoQ: Você acha que isso terá valor para outras organizações que não fabricantes de frameworks?

Eu sinceramente penso que isso será útil a outros grupos e fabricantes. Eu imagino que o crescimento funcionará parecido com o seguinte:

  • Começa-se abrindo para as principais bibliotecas JavaScript Open Source (dado que todas possuem conjuntos e regimes de teste estabelecidos).
  • Em seguida, abre-se para qualquer projeto JavaScript Open Soruce;
  • E por fim, abre-se para qualquer organização que esteja confortável em ter seus testes rodados por usuários anônimos.

Obviamente, através disso qualquer organização ou grupo poderá simplesmente fazer download do software servidor e rodar uma instância própria - não há requisitos que dizem que deve haver alguma relação com o servidor Test Swarm principal.

 No seu anúncio original, o John mencionou também uma "corporate"ersão “corporativa” do Test Swarm:

Há muito interesse em uma versão “corporativa” do TestSwarm. Apesar de eu não ter planos para uma solução imediata (a não ser lançar o software como Open Source), eu gostaria de ter espaço para uma expansão futura (talvez os usuário pudessem ser pagos para rodar testes manuais - algo como o Mechanical Turk (da Amazon) para testes JavaScript - não sei ainda, mas acho que há bastante espaço aqui para crescer).

Se você está interessado no Test Swarm, aliste-se para a versão alpha..

Você também pode encontrar informações sobre JavaScript, jQuery, Rich Internet Applications e Integração Contínua aqui mesmo no InfoQ.

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão
Comentários da comunidade

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

Dê sua opinião

Conteúdo educacional

Feedback geral
Bugs
Publicidade
Editorial
InfoQ Brasil e todo o seu conteúdo: todos os direitos reservados. © 2006-2014 C4Media Inc.
Política de privacidade
BT