Nenhum software está livre de bugs. Este é um axioma que se aplica a cada linguagem de programação e a cada aplicativo.

Quando esses bugs são implantados dentro do seu site na produção, você pode sofrer consequências adversas de gravidade variável. Estes são alguns exemplos, que variam de irritantes a prejudiciais economicamente:

  • Suave: Um usuário que não consegue clicar em um link quebrado.
  • Sério: O botão “Enviar” de um formulário de contato não funciona, o que o usuário descobre somente depois de ter composto sua mensagem.
  • Severo: Um gateway de pagamento não configurado corretamente, tornando os usuários incapazes de comprar produtos em sua loja de comércio eletrônicoeCommerce, abandonando assim o site.


Nenhuma ferramenta única é suficiente para lidar com todos os aspectos do teste de um aplicativo de todos os diferentes ângulos possíveis. De fato, além de encontrar bugs, é vital executar testes adicionais para validar outras funções de aplicativo, como por exemplo:

Neste artigo, vamos rever 10 ferramentas criadas pela comunidade de código aberto que podem ajudar a compor uma pilha para testar o código PHP nos plugins do WordPress. Algumas dessas ferramentas foram criadas especificamente para testar código PHP; outras são destinadas a testar código WordPress; e algumas outras ferramentas foram criadas para lidar com algumas funcionalidades genéricas que são úteis para testes.

1. DevKinsta

Detalhes de um site WordPress local no DevKinsta.
Detalhes de um site WordPress local no 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 ela vem com várias ferramentas de desenvolvimento úteis como uma caixa de entrada de e-mail, gerenciador de banco de dados e log para facilitar a solução de problemas.

DevKinsta é normalmente usado por desenvolvedores e designers ao criar seus temas e plugins para WordPress. Mas ele também pode ser usado como um servidor web local para executar testes de integração e funcionalidade. Isto é realizado em conjunto com uma ferramenta HTTP que ajuda você a verificar se o conteúdo da sua resposta e se os cabeçalhos estão corretos.

As principais características do DevKinsta são:

2. PHPUnit

PHPUnit logo.
PHPUnit logo.

PHPUnit é uma estrutura de testes orientada ao programador para PHP. É a estrutura mais popular para executar testes unitários em código PHP, com o objetivo de validar unidades individuais de código fonte.

Os testes PHPUnit permitem aos desenvolvedores encontrar 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, mudanças em algum trecho de código não causaram problemas em outro lugar).

As principais características do PHPUnit são:

  • Novos testes de características
  • Validação de código recém-refaturada
  • Pode ser totalmente automatizado e executado dentro do processo de Integração Contínua de escolha
  • Depuração
  • Documentação automática sobre o uso esperado através de invocação de funcionalidades e restrições
  • Permite a abordagem Test-Driven Development (TDD), na qual os desenvolvedores primeiro criam os primeiros testes, depois a funcionalidade

3. Brain Monkey

Brain Monkey logo.
Brain Monkey logo.

Brain Monkey é um utilitário de teste para PHP e WordPress. Ele fornece ferramentas agnósticas de quadro que permitem a você redefinir métodos PHP e testar o comportamento de qualquer aplicativo PHP. Ele também fornece ferramentas específicas para testar o código WordPress.

As principais características do Brain Monkey são:

  • Permite que os testes unitários interajam com bibliotecas externas, descarregadas
  • Permite a invocação das funções do WordPress sem a necessidade de carregar o ambiente WordPress
  • Pode afirmar que as funções do WordPress (tais como add_filter ou do_action) invocam a funcionalidade como esperado

4. Brain Faker

Brain Faker on GitHub.
Brain Faker on GitHub.

Brain Faker usa Faker (uma popular biblioteca PHP para gerar dados falsos) e Brain Monkey para fornecer uma fácil geração de objetos WordPress falsos e funções relacionadas para você testar, inclusive:

  • WP_Post instâncias, e funções relacionadas com o get_post e get_post_field
  • WP_User e funções relacionadas à simulação, com o get_userdata, get_user_by, user_can, e mais
  • WP_Term instâncias, e funções relacionadas com o get_term e get_term_by
  • WP_Comment instâncias
  • WP_Site instâncias, e funções relacionadas à simulação com o get_site
  • WP_Post_Type instâncias, e funções relacionadas com o get_post_type_object e post_type_exists
  • WP_Taxonomy instâncias, e funções relacionadas com o get_taxonomy e taxonomy_exists
  • WP_Error instâncias

As principais características do Brain Faker são:

  • Injeta dados falsos mas realistas do WordPress no teste de unidade – o acesso à data modificada 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á apropriado (por exemplo "John Smith"), uma instância de postagem falsa é de autoria de uma instância de usuário falsa, e assim por diante
  • Dados falsos podem ser pré-procedidos ou gerados aleatoriamente
  • Extensível – os desenvolvedores podem fazer troça de classes e funções a partir de seus próprios plugins WordPress

5. Mockery

Mockery on GitHub.
Mockery on GitHub.

O Mockery é uma estrutura de objetos de simulação simples e flexível em PHP destinada a ser usada junto com PHPUnit, PHPSpec, ou qualquer outra estrutura de teste de unidade. Ele oferece um framework de teste duplo capaz de definir todas as possíveis operações e interações de objetos usando uma linguagem específica de domínio (DSL) legível por humanos.

As principais características da Mockery são:

  • Permite a geração flexível de objetos e tocos simulados (que fornecem respostas enlatadas predefinidas a chamadas específicas feitas durante os testes)
  • Melhora as capacidades de isolamento de teste do PHPUnit
  • API flexível para expressar expectativas ridicularizadas, imitando o máximo possível uma descrição de linguagem natural (por exemplo, $mock->shouldReceive('myMethod')->once()->andReturn('Hello world!');)
  • Testes unitários usando objetos in-memory mock para evitar a necessidade de acessar sistemas mais lentos (como bancos de dados, sistemas de arquivos ou serviços externos)
  • Pode simular tanto o comportamento determinista quanto o não determinista

6. Ferramenta de Exportação Nativa WordPress

A ferramenta de exportação do WordPress.
A ferramenta de exportação do WordPress.

A ferramenta nativa de exportação do WordPress faz o download dos dados do site para o seu dispositivo como um arquivo XML, incluindo posts, páginas, tipos de posts personalizados, comentários, campos personalizados, categorias, tags, taxonomias personalizadas, usuários e mídia. O arquivo XML possui um formato personalizado (chamado WordPress eXtended RSS ou arquivo WXR) que pode ser importado para qualquer site WordPress.

Esta ferramenta não foi especificamente projetada para testes. Entretanto, sua utilidade vem de ser capaz de criar instantâneos do banco de dados do WordPress contendo um conjunto de dados adequado, que pode então ser usado para testes. Isto 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 encenação para testar novas funcionalidades.

As principais características 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 testes unitários

7. Guzzle

logo Guzzle.
logo Guzzle

Guzzle é um cliente HTTP PHP que facilita o envio de solicitações HTTP e a integração com serviços web.

O Guzzle é uma ferramenta genérica, então o teste é apenas um de seus possíveis casos de uso. Junto com um servidor web local como o DevKinsta, Guzzle torna possível a execução de testes de integração: Você pode usar o Guzzle para enviar uma solicitação HTTP contra o servidor web de desenvolvimento, depois passar a resposta a um teste de unidade no PHPUnit que verifica o conteúdo e os cabeçalhos estão definidos como esperado.

As principais características do Guzzle são:

  • Satisfaz a Recomendação Padrão PHP “PSR-7” (para interfaces de mensagem HTTP), excluindo o bloqueio do fornecedor
  • Simples e rápido
  • Testes são executados contra 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 logo.
WP-CLI logo.

WP-CLI é a interface de linha de comando para WordPress. Com ela, você pode atualizar plugins, configurar instalações em vários sites e muito mais, sem usar um navegador web.

WP-CLI não é especificamente uma ferramenta de teste, mas o teste está entre seus muitos casos de uso. Por exemplo, depois de rodar 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 capacidades apropriadas, instalar plugins de terceiros necessários e outras tarefas do gênero.

Como o script com os comandos WP-CLI pode ser armazenado em seu repositório Git, o processo para executar os testes de integração pode então ser automatizado e integrado dentro do seu processo de Integração Contínua:

  1. Use a ferramenta de exportação do WordPress para gerar dados de teste reais, e armazene-os no repositório Git.
  2. Use o DevKinsta para lançar um servidor web com uma nova instância WordPress.
  3. Use WP-CLI para importar os dados de teste para o site WordPress (o DevKinsta pode ser operado via WP-CLI).
  4. Crie um teste unitário no PHPUnit tendo o Guzzle executando uma solicitação HTTP contra o servidor web para verificar seu conteúdo de resposta e cabeçalhos.

As principais características da WP-CLI são:

  • Permite a execução remota de comandos contra instância do WordPress através de uma interface de linha de comando
  • Extensível com outras ferramentas
  • Aumenta a capacidade da pilha de testes
  • Permite a automação total do processo

9. XDebug

XDebug logo.
XDebug logo.

XDebug é uma extensão do PHP que fornece uma gama de recursos para melhorar a experiência de desenvolvimento do PHP, incluindo depuração, melhorias no relatório de erros do PHP, rastreamento, perfilamento e análise de cobertura de código.

XDebug não vai ajudá-lo a testar seu código, mas vai ajudar a descobrir onde o bug está. Combinar o XDebug com PHPUnit é particularmente eficaz: Se um teste falhar e você não conseguir encontrar a fonte do problema, você pode usar o XDebug para adicionar pontos de interrupção no código de teste da 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 propriedades e objetos, etc.) e tente descobrir o que está errado.

As principais características do XDebug são:

  • Integrações de recursos para editores PHP populares, incluindo VS Code, PHPStorm e Sublime
  • Perfila 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 variáveis em tempo real ao fazer uma pausa nos pontos de parada

10. PHPStan

logo PHPStan.
logo 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 têm que escrever. Esta ferramenta é a primeira executada na pilha de testes, capturando de forma preemptiva o maior número possível de bugs. Somente aqueles bugs que não podem ser deduzidos da análise estática (por exemplo, aqueles com lógica defeituosa) devem ser validados através de testes unitários.

PHPStan funciona escaneando toda a base de código e procurando por desajustes. Por exemplo, o valor de resposta de uma função que retorna uma flutuação não pode ser atribuído a um parâmetro de função do tipo inteiro. Sempre que o código contém tal ocorrência, isso é um bug potencial, e o PHPStan irá alertá-lo durante o estágio de desenvolvimento, enquanto você está escrevendo o código do aplicativo.

As principais características do PHPStan são:

  • Automação e integração dentro do seu processo de Integração Contínua existente
  • Localiza muitos bugs complicados, tais como erros de tipo
  • Faz varredura em toda a base de código, encontrando bugs em partes de código raramente executadas
  • Organizado em níveis de complexidade crescente para permitir a integração gradual
  • Apresenta extensões para os mais populares frameworks PHP e CMSs, incluindo Symfony, Laravel, Doctrine, Nette, e WordPress

Resumo

O custo de ter bugs passando despercebido em seu aplicativo na produção pode ser prejudicial para sua reputação e renda, então você deve tentar erradicá-los antes que afetem seus usuários.

Em aplicativos complexos, é quase impossível ter 100% de confiança de que não conterá bugs. Por causa disso, você deve configurar um processo para encontrar 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 muito as chances do seu aplicativo se comportar de maneira inesperada. 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! – fazer uso para produzir uma pilha de testes abrangente.

Neste artigo, revisamos 10 ferramentas para ajudá-lo a atingir seus objetivos de testar o código PHP em um plugin do WordPress.

Qual dessas ferramentas você usou para seu último projeto? Deixe-nos saber o que você construiu com ele na seção de comentários abaixo!

Leonardo Losoviz

Leo writes about innovative web development trends, mostly concerning PHP, WordPress and GraphQL. You can find him at leoloso.com and twitter.com/losoviz.