// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= Testando com o PHPUnit e Selenium
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Testando com o PHPUnit e Selenium - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Testando com o PHPUnit e Selenium

O NetBeans IDE para PHP oferece suporte aos testes link:http://www.phpunit.de[+PHPUnit+] automatizados. Graças ao PHPUnit, o NetBeans IDE fornece a cobertura de código para PHP, semelhante à cobertura de código que o IDE fornece ao Python. A saída do teste aparece na mesma janela de saída rica em funcionalidades que os executores de teste JUnit, e Python do IDE utilizam.

O NetBeans IDE também suporta o framework de teste portátil Selenium, em combinação com o PHPUnit. Um plug-in Selenium está disponível na Central de Atualização. A instalação deste plug-in adiciona um servidor Selenium aos servidores registrados do IDE e adiciona opções de teste Selenium aos menus PHP.


image::images/netbeans-stamp-80-74-73.png[title="O conteúdo desta página se aplica ao NetBeans IDE 7.2, 7.3, 7.4 e 8.0"]


*Para seguir este tutorial, são necessários os recursos e o software a seguir.*

|===
|Software ou Recurso |Versão Necessária 

|link:https://netbeans.org/downloads/index.html[+NetBeans IDE+] |Pacote de download do PHP 

|Um mecanismo PHP, incluindo PEAR |Versão 5. 

|Um servidor web |É recomendado o Apache HTTP Server 2.2.
 

|link:http://www.phpunit.de[+PHPUnit+] |Versão 3.4.0 ou superior. 

|link:http://www.phpunit.de/manual/current/en/skeleton-generator.html[+Gerador do Esqueleto do PHPUnit+] |Como versão de PHPUnit. 
|===


[[installing-phpunit]]
== Instalando o PHPUnit

Use PEAR para instalar o PHPUnit, conforme descrito na link:http://www.phpunit.de/manual/current/en/installation.html[+documentação do PHPUnit+] e no Gerador do Esqueleto do PHPUnit, conforme descrito na link:http://www.phpunit.de/manual/current/en/skeleton-generator.html[+documentação do Gerador do Esqueleto+]. Instale o PHPUnit versão 3.4.0 ou superior. Nenhuma configuração especial é necessária. Após o PHPUnit ter sido instalado, o NetBeans poderá reconhecê-lo. Note que é necessário ter o PEAR instalado com seu mecanismo PHP. Note também que a documentação PHPUnit informa que o PHPUnit é normalmente instalado no diretório PEAR local. Eles fornecem um caminho de  ``/usr/lib/php/PHPUnit`` , mas no XAMPP para Windows, é  ``XAMPP_HOME\php\PEAR\PHPUnit`` .

Para verificar se o NetBeans IDE reconhece sua instalação PHPUnit, abra Ferramentas > Opções (No Mac, abra Preferências do NetBeans) e examine a janela PHP. Abra a guia Teste de Unidade. Os caminhos para os scripts do Gerador do Esqueleto e do PHPUnit deverão ser exibidos. Se um script não estiver lá, clique em Pesquisar, ao lado do campo vazio. O IDE procura, no sistema local, o script. Como alternativa, clique em Procurar e procure o script.

image::images/unittesting-options.png[]


[[create-test]]
== Criando e Executando Testes PHPUnit

O NetBeans IDE pode criar e executar testes PHPUnit em todas as classes PHP de um arquivo. Para ter certeza de que o gerador de teste irá funcionar, forneça ao arquivo PHP o mesmo nome que a primeira classe do arquivo.

*Para criar e executar testes PHPUnit para um classe:*

1. Crie um projeto PHP denominado Calculador. Nesse projeto, crie um arquivo denominado  ``calculator.php`` . Nesse arquivo, digite ou cole a classe Calculator a partir do link:http://www.phpunit.de/manual/current/en/skeleton-generator.html[+capítulo Gerador do Esqueleto da documentação do PHPUnit+].

[source,php]
----

<?php
class Calculator
{
    public function add($a, $b)
    {
        return $a + $b;
    }
}
?>
----

[start=2]
. Adicione um bloco de comentário com a link:http://sebastian-bergmann.de/archives/628-Improved-Skeleton-Generator-in-PHPUnit-3.html[+anotação @assert+] e alguma amostra de entrada e saída. Observe que uma afirmação incorreta está incluída neste exemplo.

[source,php]
----

<?php
class Calculator
{
    /**
     * @assert (0, 0) == 0
     * @assert (0, 1) == 1
     * @assert (1, 0) == 1
     * @assert (1, 1) == 2
     * @assert (1, 2) == 4
     */
    public function add($a, $b)
    {
        return $a + $b;
    }
}
?>
----

NOTE: Você pode usar autocompletar código da anotação para adicionar aotações `@assert`. Navegue entre os parâmetros com a tecla Tab ou clique em Enter depois de preencher um valor de parâmetro.

image::images/assert-cc.png[]image::images/assert-cc-complete.png[]


[start=3]
. Na janela Projetos, clique com o botão direito do mouse no nó Calulator.php e selecione Ferramentas > Criar Testes PHPUnit. Observe que você pode criar testes para todos os arquivos em um projeto a partir do menu de contexto para o nó Arquivos de Código-Fonte.

image::images/create-tests.png[]


[start=4]
. Na primeira vez que você cria testes, uma caixa de diálogo é aberta perguntando pelo diretório onde deseja armazenar os arquivos de teste. Nesse exemplo, a função Procurar foi utilizada para criar um diretório  ``testes`` . 

image::images/test-directory.png[]

NOTE:  você pode escrever, manualmente, vários testes para um projeto. Se escrever vários testes, você poderá organizá-los em subpastas do diretório de arquivos de teste, como "importante" ou "rápido". Em seguida, você poderá executar testes em uma subpasta clicando com o botão direito do mouse nessa pasta e selecionando Executar Testes.

image::images/test-in-folder.png[]


[start=5]
. O IDE gera uma classe de teste de esqueleto em um arquivo denominado CalculatorTest.php, que aparece em sua janela Projetos e é aberta no editor. 

image::images/test-class-in-project.png[]

Observe que um teste é criado para cada anotação  ``@assert`` .


[source,php]
----

    /**
     * Generated from @assert (1, 1) == 2.
     */
    public function testAdd4()
    {
        $this->assertEquals(
          2,
          $this->object->add(1, 1)
        );
    }
----

[start=6]
. É possível testar um arquivo individual ou todo o projeto. Para testar o projeto, clique com o botão direito do mouse no nó pai do projeto e selecione Testar ou pressione Alt-F6. Para testar o arquivo Calculator.php, clique com o botão direito do mouse no nó do arquivo e selecione Testar ou pressione Ctrl-F6/⌘-F6. Esse exemplo tem somente uma classe em um arquivo, portanto, os resultados são os mesmos. O IDE executa os testes e exibe os resultados na janela Resultados do Teste. 

image::images/test-results-narrow.png[]

Uma versão textual mais detalhada dos resultados é exibida na janela de Saída.

image::images/test-result-output.png[]


== Usando Grupos de Teste

Você pode selecionar quais grupos de testes quer executar quando for executar o conjunto de testes. Por exemplo, você pode ter alguns testes que deseja executar em um ambiente de produção e outros testes que deseja executar nos ambientes de produção e de desenvolvimento. Os testes antigos seriam colocados num grupo  ``produção``  e os testes posteriores nos grupos  ``produção``  e  ``desenvolvimento`` . Quando o conjunto de testes é executado no ambiente de desenvolvimento, seleciona-se somente o grupo de teste de  ``desenvolvimento``  a ser executado.

É preciso ativar os grupos de teste para um projeto PHP, antes de usar os grupos de teste em qualquer arquivo do projeto.

Para marcar um teste como parte de um grupo de teste, anote o método de teste com  ``@group [nome do grupo]`` .

*Para criar e executar grupos de teste:*

1. Na janela Projetos, clique com o botão direito do mouse no nó Calculadora e selecione Propriedades. Serão Exibidas as Propriedades do Projeto.
2. Nas Propriedades do Projeto, selecione a categoria PhpUnit. Selecione Solicitar Grupos de Teste, Antes de Executar os Testes. Clique em OK.

image::images/test-group-properties.png[]


[start=3]
. Abra  ``CalculatorTest.php``  no editor.

[start=4]
. Para os métodos  ``testAdd`` ,  ``testAdd3``  e  ``testAdd5`` , acrescente a anotação  ``@group production`` .

image::images/production-group-annotation.png[]


[start=5]
. para os métodos  ``testAdd2``  e  ``testAdd4`` , adicione as anotações  ``@group production``  e  ``desenvolvimento @group`` . image:images/production-development-group-code.png[]

[start=6]
. Clique com o botão direito do mouse no nó  ``Calculator.php``  e selecione Teste. Uma caixa de diálogo será aberta, perguntando quais grupos de teste serão executados. Selecione “development” e clique em OK. O IDE só executa os testes anotados com  ``@group development`` .

image::images/select-test-group.png[]

Para obter mais informações sobre os grupos de teste PhpUnit no NetBeans IDE, consulte o post do blog do NetBeans IDE para PHPlink:http://blogs.oracle.com/netbeansphp/entry/using_phpunit_test_groups[+Usando Grupos de Teste da Unidade PHP+].


[[result-windows]]
== Resultados de Teste e Saída do IDE

Os resultados dos testes PHPUnit são exibidos em duas das janelas do IDE, Resultados do Teste e Saída. A janela Resultados do Teste tem um painel gráfico e um painel de texto curto. A janela de Saída fornece um versão textual mais detalhada da saída. Nesta seção você explora as janelas Resultados do teste e Saída em mais detalhes.

Na janela Resultados do Teste, você obtém informações sobre os testes que falharam destas localizações:

* As mensagens no painel IU anexado à entrada da árvore para os testes que falharam
* Texto no painel direito, incluindo links para as linhas do código de teste que falhou
* Texto da dica de ferramenta que aparece quando você passa o cursor sobre o teste que falhou no painel de IU

image::images/test-results-tooltip.png[]

A janela Resultados do teste inclui os seguintes botões no lado esquerdo:

* Reexecutar o teste image:images/rerun-button.png[]
* Mostrar testes com falha image:images/show-failed.png[]
* Mostrar testes que passaram image:images/show-passed.png[]
* Mostrar testes que passaram, mas com erros image:images/show-error.png[]
* Navegue entre mostrar o próximo resultado do teste image:images/next-test-button.png[] ou o resultado do teste anterior image:images/previous-test-button.png[]

A janela de Saída mostra a saída completa do script PHPUnit. Ela pode ser útil quando você não pode identificar a causa de um erro com as informações na janela Resultados do Teste. Como na janela Resultados do Teste, a janela de Saída inclui links para a linha da classe de teste que falhou. Também inclui botões no lado esquerdo para reexecutar o teste e para abrir a janela Opções do PHP. image:images/options-link-button.png[]

image::images/test-result-output.png[]


[[code-coverage]]
== Cobertura de Código

O NetBeans IDE para PHP oferece a cobertura de código junto com o suporte a PHPUnit. (O IDE também oferece cobertura de código para Python). A cobertura do código verifica se todos os seus métodos são cobertos pelos testes PHPUnit. Nesta seção, você vê como funciona a cobertura de código com sua classe Calculator existente.

*Para utilizar a cobertura de código:*

1. Abra Calculator.php e adicione uma função  ``add``  duplicada, denominada  ``add2`` . A classe  ``Calculator``  agora se parece com o seguinte:

[source,php]
----

<?php
class Calculator {
    /**
     * @assert (0, 0) == 0
     * @assert (0, 1) == 1
     * @assert (1, 0) == 1
     * @assert (1, 1) == 2
     * @assert (1, 2) == 4
     */
    public function add($a, $b) {
        return $a + $b;
    }

    public function add2($a, $b) {
        return $a + $b;
    }

}    
?>

----

[start=2]
. Clique com o botão direito do mouse no nó do projeto. No menu de contexto, selecione Cobertura de Código > Coletar e Exibir a Cobertura de Código. Por default, Mostrar Barra do Editor também é selecionado. 

image::images/turn-on-code-coverage.png[]


[start=3]
. O editor agora tem uma barra do editor de cobertura de código na parte inferior. Como a cobertura do código ainda não foi testada, a barra do editor informa 0% de cobertura. (Ela também exibe isso após você clicar em Limpar para limpar os resultados do teste). 
 image::images/editor-bar-before.png[]


[start=4]
. Clique em Testar para testar o arquivo aberto ou em Todos os Testes para executar todos os testes do projeto. Os Resultados do Teste serão Exibidos. Além disso, a barra Cobertura de Código lhe informa qual a porcentagem das instruções de código executáveis é coberta pelos testes. Na janela editor, o código coberto é realçado em verde e o código não coberto é realçado em vermelho.

WARNING: se os arquivos de testes forem gerados novamente DEPOIS da adição da função add2, os testes PHPUnit não serão executados. Isso ocorre porque o PHPUnit cria duas funções testAdd2 conflitantes. Não diferencie funções acrescentando números no final, caso pretenda usar o PHPUnit em mais de uma função como essa. Consulte a link:http://www.phpunit.de/ticket/701[+documentação do PHPUnit+].

image::images/editor-bar-after.png[]


[start=5]
. Na Barra do Editor, clique em Relatório... O relatório de Cobertura de Código será aberto, mostrando os resultados de todos os testes executados em seu projeto. Os botões no relatório permitem limpar os resultados, reexecutar todos os testes ou desativar a cobertura de código (clique em Concluído). 

image::images/code-coverage-report.png[]


[start=6]
. Você pode adicionar outra classe ao seu projeto, deletar e recriar os arquivos de teste e examinar novamente o relatório de cobertura de código. Sua nova classe será listada. No relatório a seguir, a classe  ``Calculator``  tem novamente uma função que não está incluída nos testes. 

image::images/code-coverage-report2.png[]


[[project-specific-configurations]]
== Utilizando Configurações Específicas do Projeto

No IDE, você pode selecionar as configurações personalizadas a seguir no seu projeto:

* Um arquivo bootstrap
* Um arquivo de configuração XML
* Um conjunto de testes
* Um script PHPUnit personalizado

*Para definir uma configuração específica de projeto:*

1. Clique com o botão direito do mouse no nó do projeto ou no nó Arquivos de Teste do projeto e selecione Propriedades. Isso abre a caixa de diálogo Propriedades.

image::images/project-ctxmenu.png[]


[start=2]
. Selecione a categoria PHPUnit. Uma caixa de diálogo será aberta, na qual você pode selecionar um arquivo bootstrap personalizado, um arquivo de configuração XML ou um arquivo de conjunto de testes.

image::images/proj-properties.png[]


[start=3]
. Se não estiver familiarizado com a estrutura dos arquivos bootstrap ou de configuração XML, você poderá usar o NetBeans IDE para gerar um esqueleto para você. Você também pode localizar instruções sobre como utilizar a caixa de diálogo clicando em Ajuda 

image::images/proj-properties-selected.png[]

A _opção bootstrap_ é necessária em projetos que utilizam um carregador de classe personalizado, por exemplo, implementando a função mágica  ``__autoload()`` . Você também pode utilizar a opção bootstrap se for necessário incluir um arquivo com antecedência, como um arquivo que defina as constantes globais utilizadas por várias classes no projeto.

O _arquivo de configuração XML_ permite definir as opções utilizadas em uma chamada da linha de comandos. Há uma introdução completa no link:http://www.phpunit.de/manual/3.3/en/appendixes.configuration.html[+manual do PHPUnit+]. Você também pode utilizar o arquivo de configuração XML para definir variáveis globais e definições do  ``php.ini``  dos casos de teste. Você pode definir a opção bootstrap também no arquivo de configuração XML.

Se você definir um _conjunto de testes personalizado_, esse conjunto será executado sempre que você selecionar Executar > Testar Projeto. Isso é particularmente útil quando você desejar executar somente um subconjunto dos testes ou caso queira utilizar as funcionalidades adicionadas recentemente de PHPUnit que devem ser adicionadas manualmente, como Provedores de Dados. Observe que você pode definir quantos conjuntos de testes quiser e executá-los de forma separada clicando com o botão direito do mouse no explorador de projetos e selecionando "executar". Para evitar confusões, o NetBeans lhe avisa se estiver utilizando um Conjunto de Testes personalizado. A notificação pode ser localizada nos Resultados do Teste e na janela de Saída.

Você pode usar um _script de PHPUnit personalizado_ para um projeto, em vez de o srcipt default selecionado em Ferramentas > Opções. O sript de PHPUnit personalizado pode incluir quaisquer mudanças de linha de comandos descritas no link:http://www.phpunit.de/manual/3.7/en/textui.html[+manual de PHPUnit+].

 


[[selenium]]
== Executando Testes no Framework Selenium

O Selenium é um framework de teste de software portátil para aplicações Web. Os testes podem ser escritos como tabelas HTML ou codificados em diversas linguagens de programação populares e podem ser executados diretamente na maioria dos browsers modernos da Web. O Selenium pode ser implantado no Windows, Linux e Macintosh. Para obter mais detalhes, consulte o link:http://docs.seleniumhq.org[+Web site do Selenium+].

O NetBeans IDE tem um plug-in que inclui um servidor Selenium. Com esse plug-in, você pode executar testes Selenium nos projetos PHP, aplicações Web ou Maven. Para executar testes Selenium no PHP, é preciso instalar o pacote Testing Selenium em seu mecanismo PHP.

*Para executar testes Selenium no PHP:*


1. Abra um prompt de comando e execute o comando  ``pear install Testing_Selenium-beta`` . É preciso ter `` PHP_HOME/php/PEAR``  em seu Caminho. Se o comando obtiver êxito, o prompt exibirá  ``install ok: channel://pear.php.net/Testing_Selenium-0.4.3`` .

[start=2]
. No IDE, abra Ferramentas > Plug-ins e instale o Módulo Selenium para PHP.

[start=3]
. Na janela Projetos, clique com o botão direito do mouse no nó do projeto Calculador. Selecione Novo > Outro. O Assistente de Novo Arquivo será aberto. Selecione Selenium e clique em Próximo. 

image::images/new-selenium.png[]

[start=4]
. Na primeira vez que você cria um teste Selenium, será exibida uma caixa de diálogo solicitando que você defina um diretório para os arquivos de teste Selenium. Esse diretório deverá ser separado do diretório dos arquivos de teste PHPUnit. Caso contrário, os testes Selenium serão executados cada vez que você executar testes de unidade. A execução de testes funcionais como o Selenium, normalmente leva mais tempo do que a execução de testes de unidade, portanto, você provavelmente não desejará executar esses testes cada vez que executar testes de unidade.

[start=5]
. Aceite os defaults na página Nome e Localização e clique em Finalizar. O novo arquivo de teste Selenium será aberto no editor e aparecerá na janela Projetos. 

image::images/selenium-test-in-project.png[]


[start=6]
. O item Executar Testes Selenium está agora adicionado ao menu de contexto do projeto. Clique nesse item e os resultados do teste Selenium serão exibidos na janela Resultados do Teste, da mesma forma que os resultados de testes PHPUnit.


[[more-exercises]]
== Mais Exercícios

A seguir, encontam-se mais algumas ideias para você explorar:

* Adicione uma segunda classe a Calculator.php, como uma classe  ``Calculator2``  que multiplica $a e $b. Delete e gere novamente os testes.
* Se você experimentar o link:./wish-list-tutorial-main-page.html[+Tutorial de Criação de uma Aplicação CRUD+] de várias partes, crie um teste Selenium para o projeto final.
link:/about/contact_form.html?to=3&subject=Feedback:PHPUnit and Selenium on NB 6.7[+Enviar Feedback neste Tutorial+]


Para enviar comentários e sugestões, obter suporte e manter-se informado sobre os desenvolvimentos mais recentes das funcionalidades de desenvolvimento PHP do NetBeans IDE, link:../../../community/lists/top.html[+junte-se à lista de correspondência users@php.netbeans.org+]. Esta lista é espelhada nos link:http://forums.netbeans.org/[+fóruns do NetBeans IDE+].


== Consulte Também

Para obter mais informações sobre como testar o PHP no NetBeans IDE , consulte os seguintes recursos:

* link:http://blogs.oracle.com/netbeansphp/entry/phpunit_support_added[+Blog do NetBeans para o PHP: Suporte PHPUnit Adicionado+]
* link:http://blogs.oracle.com/netbeansphp/entry/ui_for_phpunit_support[+Blog do NetBeans para o PHP: IU para Suporte a PHPUnit+]
* link:http://blogs.oracle.com/netbeansphp/entry/code_coverage_for_php_why[+Blog do NetBeans para PHP: Cobertura de Código para PHP - Porque não?+]
* link:http://blogs.oracle.com/netbeansphp/entry/recent_improvements_in_phpunit_support[+Blog do NetBeans para PHP: Melhorias Recentes no Suporte ao PHPUnit+]
* link:http://wiki.netbeans.org/SeleniumPluginPHP[+Wiki do NetBeans IDE: Plug-in Selenium para o PHP+]
* link:./debugging.html[+Depurando o Código-Fonte do PHP no NetBeans IDE+]

link:../../trails/php.html[+Voltar à Trilha do Aprendizado PHP+]

