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.

Avalie esse artigo

Relevância
Estilo/Redação

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
Feedback geral
Bugs
Publicidade
Editorial
Marketing
InfoQ Brasil e todo o seu conteúdo: todos os direitos reservados. © 2006-2016 C4Media Inc.
Política de privacidade
BT

We notice you’re using an ad blocker

We understand why you use ad blockers. However to keep InfoQ free we need your support. InfoQ will not provide your data to third parties without individual opt-in consent. We only work with advertisers relevant to our readers. Please consider whitelisting us.