Unidade de teste de um site

Tenho curiosidade em ver como outros desenvolvedores passam a testar seus sites. PHP especificamente no meu caso, mas isso provavelmente abrange múltiplos idiomas. Eu tenho trabalhado em um site há mais de um ano, e eu realmente gostaria de automatizar muitos dos testes de regressão que faço entre as versões.

Este site específico está em CodeIgniter, então eu tenho alguns testes para meus modelos. Eu gostaria de ir além de apenas testar esses. No entanto, este é um problema, mesmo os desenvolvedores que não MVC tiveram que enfrentar, tenho certeza.

Edit: Eu acho que a funcionalidade que satisfaria muitos dos desejos do teste é a capacidade de afirmar que os parâmetros têm um valor específico no final do processamento do script. No meu caso, muita lógica está no controlador, e essa é a principal área que eu gostaria de testar.

Para teste de unidade real sem testar a UI, você deve testar apenas as funções no modelo. A maior parte da sua funcionalidade deve estar lá de qualquer maneira.

Você pode querer dar uma olhada no Selenium para testar a UI do seu site. Pode gravar suas ações e reproduzi-las, ou você pode editar os scripts diretamente. alt text http://img.bestphpide.com/php/selenium-ide.gif

Você experimentou o Fitnesse ?

Isso ajuda na criação de testes de aceitação. Eles são especialmente úteis para sites, que fazer esse tipo de testes são uma dor.

Há alguns vídeos do Unclebob dentro da página também. O bom é que o Fitnesse não está restrito para testes de sites, então seu conhecimento sobre como usá-lo também pode ser usado com outros aplicativos.

O projeto em que estou trabalhando é uma aplicação de desktop escrita em c ++ que usa testes Fitnesse.

Mas se você quisesse testar unidades os modelos (o que eu acho que você não), eles podem ser criados usando o phpunit lib. Eu acho que o framework ZEND tem uma lib similar para isso.

Você pode querer verificar PHPUnit http://www.phpunit.de/manual/current/en/

Comecei a usá-lo em meus projetos PHP e é muito fácil de trabalhar e muito poderoso. Em particular, aprenda e use mocks: http://www.phpunit.de/manual/3.0/pt/mock-objects.html

Mocking é especialmente importante quando os aplicativos de teste de unidade que fazem operações de database.

Dê uma olhada no TOAST . É construído especialmente para CodeIgniter. Ele usa infra-estrutura de CI, para que você possa executar todos os testes de teste através de um navegador e os resultados são exibidos novamente como uma página da web (HTML). É muito simples de usar.

Sugiro que você teste seus Controladores também. O modelo de teste está ok, mas o modelo é apenas o armazenamento DB. Os controladores contêm toda a “lógica de negócios” e são o lugar onde a maioria das coisas dá errado.

Uma das melhores ideias de que eu já ouvi falar, no que diz respeito ao teste de aplicativos da web, foi criar um script que examinasse todas as páginas do site e verifique se há diferenças com a varredura anterior, permitindo que você aceite alterações e corrija regressões.

De um modo geral, o teste automático de aplicativos GUI (sites são aplicativos GUI) é difícil e geralmente desnecessário. Testes unitários funcionam melhor com bibliotecas simples.

Uso o Canoo WebTest. É o melhor framework de teste de unidade de site gratuito lá fora. É inteiramente scriptable com XML e não requer navegador para que ele possa ser executado a partir de um servidor de compilation.

Nós modificamos Waiter (Ruby). Ele reproduz “scripts” de URLs e preenchimento de formulário para o IE e adicionamos um script “comando” para levar uma captura de canvas; A imagem de captura de canvas é comparada com uma Imagem Conhecida-Boa (ou seja, uma Imagem Mestre) e se essa imagem é diferente, ela é registrada (basicamente uma página da Web de tais resultados está preparada) e “um humano” faz uma revisão do Mestre / Imagem de teste. Obviamente há dois resultados nesse ponto: “A diferença é intencional” ou “Existe uma mudança incorreta”. Em primeiro lugar, a imagem Mestre é substituída pela Nova Imagem; no segundo, vamos corrigir o erro, e a mudança será incluída na próxima corrida de teste