10 ferramentas de teste PHP para plugins WordPress
Publicados: 2022-08-05Nenhum software está livre de bugs. Este é um axioma que se aplica a todas as linguagens de programação e a todas as aplicações.
Quando esses bugs são implantados em seu site em produção, você pode sofrer consequências adversas de gravidade variável. Estes são alguns exemplos, que vão de irritantes a economicamente prejudiciais:
- Leve: Um usuário que não consegue clicar em um link quebrado.
- Grave: O botão “Enviar” de um formulário de contato não funciona, o que o usuário descobre apenas depois de redigir sua mensagem.
- Grave: Um gateway de pagamento não configurado corretamente, tornando os usuários incapazes de comprar produtos em sua loja de comércio eletrônico, abandonando assim o site.
Nenhuma ferramenta é suficiente para lidar com todos os aspectos do teste de um aplicativo de todos os ângulos possíveis. De fato, além de encontrar bugs, é vital executar testes adicionais para validar outras funções do aplicativo, como:
- Acessibilidade e usabilidade
- Desempenho aceitável
- Tráfego e movimentação de carga
Neste artigo, revisaremos 10 ferramentas criadas pela comunidade de código aberto que podem ajudar a compor uma pilha para testar o código PHP em plugins do WordPress. Algumas dessas ferramentas foram projetadas especificamente para testar código PHP; outros destinam-se a testar o código do WordPress; e algumas outras ferramentas foram criadas para lidar com algumas funcionalidades genéricas que são úteis para testes.
1. DevKinsta
DevKinsta é uma suíte de desenvolvimento local para sites WordPress. Apenas fornecendo alguns detalhes básicos, uma instância local de um site WordPress é instalada imediatamente e vem com várias ferramentas de desenvolvimento úteis, como uma caixa de entrada de e-mail, gerenciador de banco de dados e registro para facilitar a solução de problemas.
O DevKinsta é normalmente usado por desenvolvedores e designers ao criar seus temas e plugins do WordPress. Mas também pode ser usado como servidor web local para execução de testes de integração e funcionalidade. Isso é feito em conjunto com uma ferramenta HTTP que ajuda a verificar se o conteúdo e os cabeçalhos da resposta estão corretos.
Os principais recursos do DevKinsta são:
- Fácil de criar um novo ambiente WordPress e excluí-lo quando não for mais necessário
- Permite testar em qualquer versão suportada de PHP e WordPress e qualquer combinação deles
- Integra-se perfeitamente ao MyKinsta, onde os usuários podem criar um backup externo de seus sites e dados
2. Unidade PHP
PHPUnit é uma estrutura de teste orientada ao programador para PHP. É o framework mais popular para execução de testes unitários em código PHP, com o objetivo de validar unidades individuais de código fonte.
Os testes PHPUnit permitem que os desenvolvedores encontrem problemas o mais cedo possível dentro do ciclo de desenvolvimento, ajudando a garantir que nenhuma regressão de código tenha sido introduzida (ou seja, alterações em algum pedaço de código não causaram problemas em outro lugar).
Os principais recursos do PHPUnit são:
- Teste de novos recursos
- Validação de código recém-refatorada
- Pode ser totalmente automatizado e executado dentro do processo de Integração Contínua de sua escolha
- Depuração
- Documentação automática sobre o uso esperado por meio de invocação e restrições de funcionalidade
- Permite a abordagem de Desenvolvimento Orientado a Testes (TDD) na qual os desenvolvedores primeiro criam os primeiros testes, depois a funcionalidade
3. Macaco Cérebro
Brain Monkey é um utilitário de teste para PHP e WordPress. Ele fornece ferramentas independentes de estrutura que permitem redefinir métodos PHP e testar o comportamento de qualquer aplicativo PHP. Ele também fornece ferramentas específicas para testar o código do WordPress.
Os principais recursos do Brain Monkey são:
- Permite que testes de unidade interajam com bibliotecas externas descarregadas
- Permite a invocação de funções do WordPress sem a necessidade de carregar o ambiente WordPress
- Pode afirmar que as funções do WordPress (como
add_filter
oudo_action
) invocam a funcionalidade conforme o esperado
4. Falsificador de Cérebros
O Brain Faker usa o Faker (uma biblioteca PHP popular para gerar dados falsos) e o Brain Monkey para fornecer fácil geração de objetos falsos do WordPress e funções relacionadas para você testar, incluindo:
- Instâncias
WP_Post
e funções relacionadas simuladas comoget_post
eget_post_field
- Instâncias
WP_User
e funções relacionadas simuladas comoget_userdata
,get_user_by
,user_can
e muito mais - Instâncias
WP_Term
e funções relacionadas simuladas comoget_term
eget_term_by
- Instâncias
WP_Comment
- Instâncias
WP_Site
e funções relacionadas simuladas comoget_site
- Instâncias
WP_Post_Type
e funções relacionadas simuladas comoget_post_type_object
epost_type_exists
- Instâncias
WP_Taxonomy
e funções relacionadas simuladas comoget_taxonomy
etaxonomy_exists
- Instâncias
WP_Error
Os principais recursos do Brain Faker são:
- Injeta dados falsos, mas realistas do WordPress no teste de unidade — acessar a data de modificação de uma postagem falsa se comportará como uma data (por exemplo
2022-04-17T13:06:58+00:00
), o nome de um usuário será adequado (por exemplo,"John Smith"
), uma instância de postagem falsa é criada por uma instância de usuário falsa e assim por diante - Dados falsos podem ser fornecidos previamente ou gerados aleatoriamente
- Extensível — os desenvolvedores podem simular classes e funções de seus próprios plugins do WordPress
5. Zombaria
Mockery é uma estrutura de objeto simulado PHP simples, porém flexível, destinada a ser usada em conjunto com PHPUnit, PHPSpec ou qualquer outra estrutura de teste de unidade. Ele oferece uma estrutura dupla de teste capaz de definir todas as operações e interações de objetos possíveis usando uma Linguagem Específica de Domínio (DSL) legível por humanos.
Os principais recursos do Mockery são:
- Permite a geração flexível de mock objects e stubs (que fornecem respostas predefinidas para chamadas específicas feitas durante os testes)
- Aprimora os recursos de isolamento de teste do PHPUnit
- API flexível para expressar expectativas simuladas, imitando o máximo possível uma descrição em linguagem natural (por exemplo,
$mock->shouldReceive('myMethod')->once()->andReturn('Hello world!');
) - Testes de unidade usando objetos simulados na memória para evitar a necessidade de acessar sistemas mais lentos (como bancos de dados, sistemas de arquivos ou serviços externos)
- Pode zombar de comportamento determinista e não determinístico
6. Ferramenta de exportação nativa do WordPress
A ferramenta de exportação nativa do WordPress baixa os dados do WordPress do site para o seu dispositivo como um arquivo XML, incluindo postagens, páginas, tipos de postagem personalizados, comentários, campos personalizados, categorias, tags, taxonomias personalizadas, usuários e mídia. O arquivo XML apresenta um formato personalizado (chamado WordPress eXtended RSS ou arquivo WXR) que pode ser importado para qualquer site WordPress.
Esta ferramenta não foi projetada especificamente para testes. No entanto, sua utilidade vem da capacidade de criar instantâneos do banco de dados do WordPress contendo um conjunto de dados adequado, que pode ser usado para testes. Isso significa que o site WordPress em produção, que contém dados reais, pode ser exportado e importado para uma instância de desenvolvimento ou teste para testar novas funcionalidades.
Os principais recursos da ferramenta de exportação do WordPress são:
- Criação de dados de teste usando um site WordPress real
- Arquivo de exportação compartilhável de todo o banco de dados
- Útil tanto para integração quanto para teste de unidade
7. Beba
Guzzle é um cliente PHP HTTP que facilita o envio de solicitações HTTP e a integração com serviços da web.
Guzzle é uma ferramenta genérica, então testar é apenas um de seus possíveis casos de uso. Juntamente com um servidor web local como o DevKinsta, o Guzzle possibilita a execução de testes de integração: você pode usar o Guzzle para enviar uma solicitação HTTP para o servidor web de desenvolvimento e, em seguida, passar a resposta para um teste de unidade no PHPUnit que verifica o conteúdo e os cabeçalhos são definidos como esperado.
Os principais recursos do Guzzle são:
- Satisfaz a recomendação padrão do PHP “PSR-7” (para interfaces de mensagens HTTP), impedindo o bloqueio do fornecedor
- Simples e rápido
- Os testes são executados em um site WordPress real, aumentando a confiabilidade
- Pode ser executado de dentro do PHPUnit para facilidade e velocidade
- Os testes de integração podem ser automatizados e adicionados ao processo de Integração Contínua
8. WP-CLI
WP-CLI é a interface de linha de comando do WordPress. Com ele, você pode atualizar plugins, configurar instalações multisite e muito mais, sem usar um navegador da web.
O WP-CLI não é especificamente uma ferramenta de teste, mas o teste está entre seus muitos casos de uso. Por exemplo, depois de ativar um novo servidor web de desenvolvimento, você pode executar um script bash contendo comandos WP-CLI para importar dados de teste para o site WordPress, criar os usuários com as funções e recursos apropriados, instalar os plug-ins de terceiros necessários e outras tarefas desse tipo.
Como o script com os comandos WP-CLI pode ser armazenado em seu repositório Git, o processo de execução de testes de integração pode ser automatizado e integrado ao seu processo de Integração Contínua:
- Use a ferramenta de exportação do WordPress para gerar dados de teste reais e armazene-os no repositório Git.
- Use o DevKinsta para iniciar um servidor web com uma nova instância do WordPress.
- Use o WP-CLI para importar os dados de teste para o site WordPress (o DevKinsta pode ser operado via WP-CLI).
- Crie um teste de unidade no PHPUnit fazendo com que o Guzzle execute uma solicitação HTTP no servidor da Web para verificar o conteúdo e os cabeçalhos da resposta.
Os principais recursos do WP-CLI são:
- Permite a execução remota de comandos na instância do WordPress por meio de uma interface de linha de comando
- Extensível com outras ferramentas
- Aprimora os recursos da pilha de testes
- Permite automação total do processo
9. XDebug
XDebug é uma extensão para PHP que fornece uma variedade de recursos para melhorar a experiência de desenvolvimento PHP, incluindo depuração, melhorias no relatório de erros do PHP, rastreamento, criação de perfil e análise de cobertura de código.
O XDebug não o ajudará a testar seu código, mas ajudará a descobrir onde está o bug. A combinação do XDebug com o PHPUnit é particularmente eficaz: se um teste falhar e você não conseguir encontrar a origem do problema, poderá usar o XDebug para adicionar pontos de interrupção no código de teste de unidade. Ao executar o teste de unidade novamente, o script PHP será pausado em cada um desses pontos de interrupção, permitindo que você inspecione o estado atual da execução (pilha de chamadas, valores de propriedade e objeto, etc.) e tente descobrir o que está errado.
Os principais recursos do XDebug são:
- Integrações de recursos para editores PHP populares, incluindo VS Code, PHPStorm e Sublime
- Perfis quanto tempo é gasto em cada chamada de função e quanta memória ela consome
- Muito mais poderoso do que simplesmente usar
var_dump
para depurar código - Permite a modificação de valores de variáveis em tempo real ao pausar em pontos de interrupção
10. PHPStan
PHPStan é uma ferramenta de análise estática para PHP, projetada para encontrar bugs no código antes mesmo de escrever testes.
O objetivo do PHPStan é reduzir o número de testes que os desenvolvedores precisam escrever. Essa ferramenta é a primeira executada na pilha de testes, capturando preventivamente o maior número possível de bugs. Apenas os bugs que não podem ser deduzidos da análise estática (por exemplo, aqueles com lógica defeituosa) devem ser validados por meio de testes de unidade.
O PHPStan funciona escaneando toda a base de código e procurando por incompatibilidades. Por exemplo, o valor de resposta de uma função que retorna um float não pode ser atribuído a um parâmetro de função do tipo integer. Sempre que o código contém tal ocorrência, isso é um bug em potencial, e o PHPStan irá alertá-lo sobre isso durante o estágio de desenvolvimento, bem enquanto você está escrevendo o código do aplicativo.
Os principais recursos do PHPStan são:
- Automação e integração em seu processo de Integração Contínua existente
- Localiza muitos bugs complicados, como incompatibilidades de tipo
- Verifica toda a base de código, encontrando bugs em partes raramente executadas do código
- Organizado em níveis de complexidade crescente para permitir a integração gradual
- Apresenta extensões para os frameworks e CMSs PHP mais populares, incluindo Symfony, Laravel, Doctrine, Nette e WordPress
Resumo
O custo de ter bugs entrando despercebidos em seu aplicativo em produção pode ser prejudicial para sua reputação e renda, então você deve tentar erradicá-los antes que eles afetem seus usuários.
Em aplicativos complexos, é quase impossível ter 100% de confiança de que ele não conterá bugs. Por isso, você deve configurar um processo para localizar e remover o maior número possível de bugs durante o ciclo de desenvolvimento inicial.
Com um kit de ferramentas de teste bem projetado, você pode minimizar bastante as chances de seu aplicativo se comportar de maneiras inesperadas. A comunidade de código aberto criou e disponibilizou muitas ferramentas para testar os diferentes aspectos de um aplicativo, o que você pode – e deve! — use para produzir uma pilha de testes abrangente.
Neste artigo, revisamos 10 ferramentas para ajudá-lo a atingir suas metas de teste de código PHP em um plug-in do WordPress.
Quais dessas ferramentas você usou para seu projeto mais recente? Deixe-nos saber o que você construiu com ele na seção de comentários abaixo!