Execução de Testes Automatizados em Estação de Desenvolvimento

De Wiki Expresso V3
Ir para: navegação, pesquisa

Conteúdo

Sobre Essa Funcionalidade

Parte dos testes foram comentados por não estarem funcionando ou porque a implementação do ExpressoV3 é diferente da comunidade Tine20.

Tickets futuros vão tratar os testes comentados, para que mais testes sejam executados.

Versões do Ambiente de Desenvolvimento

Outras versões não foram testadas.

  • Ubuntu 12.04 LTS 32 bits
  • Browser Firefox 24.8.0
  • Apache 2.2
  • libapache-mod-php5 module
  • PHP 5.3.10-1ubuntu3.20 with Suhosin-Patch
  • xDebug 2.2.5
  • Netbeans IDE 8.0.2 ou Zend Eclipse PDT 3.2.0
  • PHPUnit 3.7.38
  • git version 1.7.9.5
  • PostgreSQL 9.1

Ambiente de Desenvolvimento

Como cada desenvolvedor cria seu ambiente de desenvolvimento de uma forma particular, tendo uma ou mais máquinas, alguns detalhes devem ser levados em conta.

Os testes são executados na máquina em que o Netbeans ou Zend Eclipse estiver instalado.

O PHPUnit deve ser instalado na máquina do Netbeans ou Zend Eclipse.

Os config.inc.php deverão existir na máquina do Netbeans ou Zend Eclipse, podendo ser necessário alterar alguns endereços IPs para apontar corretamente para os backends. (Por exemplo: Ser o BD está em outra máquina, pode ser necessário ajustar seu endereço IP).

Durante a execução dos testes, os arquivos de Cache, Sessão, etc serão criados na máquina em que o Netbeans ou Zend Eclipse estiver instalado.

Configuração Inicial dos Testes no Ambiente de Desenvolvimento

1. Configure os usuários de teste:

Conforme descrito em: https://wiki.tine20.org/Personas , os testes usam 5 perfis de usuários, os quais desempenham diferentes papéis durante a execução dos testes.

Id Usuário Nome
pwulf Paul Wulf
jsmith John Smith
sclever Susan Clever
jmcblack James McBlack
rwright Roberta Wright

IMPORTANTE! É necessário fazer o login com cada um desses usuários após a instalação do Expresso.

Crie, a partir do template phpunitconfig.inc.php.dist, o arquivo ...Expresso/tests/tine20/phpunitconfig.inc.php

<?php
// test config settings
return array(
    'docroot'   => '/var/www/PASTA_DA_APLICACAO',
    'locale'    => 'br',
    'username'  => 'admin_user@domain.org.br',
    'password'  => 'SENHA_DO_USUARIO',
    'ip'        => 'ENDERECO_IP ou 127.0.0.1'
    //'personasmapping'  => array(  /Optional
    //    'pwulf'    => 'test-user1',
    //    'jsmith'   => 'test-user2',
    //    'sclever'  => 'test-user3',
    //    'jmcblack' => 'test-user4',
    //    'rwright'  => 'test-user5'
    //),
    'customtests'  =>  array( // Optional paramenter
        'enabled'  =>  true,
        //'prefix'    => 'Yourorganization',   // Optional parameter. If not set, path will be tests/tine20/Custom/....
                                               // Otherwise will be tests/tine20/Yourorganization/....
        //'customAttributes' => array(  // Optional parameter
        //    'Tinebase_Model_FullUser' => array(
        //        'accountDN' => 'ou=corp,dc=example,dc=com', // Optional, writable ldap dn
        //                                                    // for adding, editing and deleting accounts
        //                                                    // you need this if your userDn is not writable
        //    ),
        //),

    ),
);

O parâmetro 'username' deve ser um usuário administrador do Expresso, que consiga usar o sistema, inclusive deve ter conta de e-mail.

O parâmetro, opcional, 'personasmapping', permite realizar o mapeamento dos perfis, descritos na tabela acima, com usuários (test-user1, test-user2, etc) do Expressov3. Sem essa configuração, é necessário criar os usuários pwulf@dominio.serpro.gov.br, jsmith@dominio.gov.br, etc, diretamente no Expressov3.

O parâmetro, opcional, 'customtests', permite que sejam criados testes customizados, para em geral, sobrescrever comportamentos de testes originários do Tine20.


Por exemplo, supondo que preciso customizar o funcionamento da classe de teste Tinebase_Group_LdapTest:

Crio a classe Custom_Tinebase_Group_LdapTest para adequar para o Expresso.

Posteriormente, a empresa XYZ, a qual necessita adequar esse teste para suas particularidades, configura o parâmetro prefix => 'Xyz', e cria a classe Xyz_Tinebase_Group_LdapTest.

Caso haja necessidade de alteração de atributos em determinadas classes da aplicação, configura-se a classe dentro do parâmetro 'customAttributes'. A entrada Tinebase_Model_FullUser=>accountDN permite que seja definido o ramo no Ldap onde serão criados os usuários nos testes, necessário em casos em que o baseDn definido no arquivo de configuração da aplicação é somente leitura.

2. Crie o arquivo de configuração XML do PHPUnit

Crie, a partir do template phunit.xml.dist, o arquivo phpunit.xml na pasta ...Expresso/tests :

<phpunit backupGlobals="false"
         backupStaticAttributes="false"
         convertErrorsToExceptions="true"
         convertNoticesToExceptions="false"
         convertWarningsToExceptions="true"
         processIsolation="false"
         stopOnFailure="false"
         syntaxCheck="false"
         colors="true">
    <listeners>
        <listener class="LogListener" file="LogListener.php">
        </listener>
    </listeners> 
</phpunit>

3. Configure as permissões necessárias

Atribua direitos para o usuário do Linux de desenvolvimento poder criar, editar e excluir arquivos na pasta configurada no parâmetro “filesdir” do config.inc.php. Essa pasta não pode ser a mesma usada para cache, sessão ou outra finalidade;


4. Faça download e instale o PHPUnit 3.7.38:

Faça download do .phar (https://phar.phpunit.de/phpunit-3.7.38.phar). De direito de execução ao arquivo. Renomeie o arquivo para phpunit e copie para /usr/bin e /usr/local/bin; Vá para a pasta do Expressov3 e digite phpunit –version. Deve aparecer a versão correta;

5. Configuração do IDE

5.1 Netbeans

Abra o Netbeans IDE e realize as seguintes configurações:

Testes-automatizados-01.png

Em propriedades do projeto, categoria Testando, adicione a pasta …/Expresso/tests , e marque o PHPUnit


Testes-automatizados-02.png

Em PHPUnit, adicione o Bootstrap, a Configuração XML e marque Executar Todos Arquivos de Teste usando PHPUnit


Testes-automatizados-03.png

Em Ferramentas->Opções->PHP->Frameworks e Ferramentas->PHPUnit, incluir o caminho do executável do phpunit nos dois campos

Clique com o botão direito no arquivo “Arquivos de Teste/tine20/AllTests-Expresso.php” e mande executar. Veja se o teste foi aprovado na aba “Resultados do Teste”. A execução dos testes pode levar alguns minutos. Para acompanhar o progresso da execução, entre na aba “Saída”;

Testes-automatizados-04.png

5.2 Eclipse

Existem duas formas de executar o PHPUnit no Eclipse. A primeira é usar a configuração de chamada a programas externos. A segunda é usar um plugin que encapsula o PHPUnit.

5.2.1 Configuração de chamada a programas externos

Entre no menu Run, item External Tools, subitem External Tools Configurations.

Eclipse-testes-automatizados-01.png

Clique no item New Configuration abaixo do nó Program no quadro da esquerda. No quadro da direita, preencha os campos com os seguinte dados:

Eclipse-testes-automatizados-02.png

Name: Run All Expresso Tests

Location: /usr/bin/phpunit (o diretório do PHPUnit de sua estação de trabalho)

Working Directory: ${project_loc}

Arguments: --bootstrap ${project_loc}/tine20/vendor/phpunit/phpunit/PHPUnit/Autoload.php -c ${project_loc}/tests/phpunit.xml ${project_loc}/tests/tine20/AllTests-Expresso.php

Na aba Common marque a caixa de verificação External Tools no quadro Display in favorites menu.

Eclipse-testes-automatizados-03.png

Clique no botão Apply e depois em Close.

Entre no menu Window, item Customize Perspective.

Abra o item Launch na aba Tool Bar Visibility e marque a caixa de verificação External Tools.

Eclipse-testes-automatizados-04.png

Clique em OK. O ícone External Tools aparecerá na barra de ferramentas, à direita do ícone Run.

Abra a lista de itens do ícone External Tools na barra de ferramentas.

Eclipse-testes-automatizados-05.png

Clique em Run All Expresso Tests.

O resultado da execução dos testes aparecerá na aba Console.

Eclipse-testes-automatizados-06.png

5.2.2 Plugin MakeGood [BUG RELATADO]

O plugin MakeGood integra o PHPUnit ao Eclipse provendo duas visões mais amigáveis.

A instalação do plugin é feita pelo menu Help, item Install New Software...

Clique no botão Add à direta em do campo Work with:

Preencha com o URL do update-site: http://eclipse.piece-framework.com

Aceite a licença e instale.

Abra as propriedades do projeto e configure o MakeGood.

Eclipse-testes-automatizados-07.png

Eclipse-testes-automatizados-08.png

AVISO:

Ao utilizar o plugin no ambiente de desenvolvimento do Expresso, o seguinte erro foi reportado pelo Eclipse:

Fatal error: Class 'PHPUnit_Util_Configuration' not found in /opt/zend-pdt/plugins/com.piece_framework.makegood.stagehandtestrunner_3.1.1.v201409021510/resources/php/vendor/piece/stagehand-testrunner/src/DependencyInjection/PHPUnitConfigurationFactory.php on line 70

6. Execução dos testes pelo terminal

phpunit --bootstrap [diretório do expresso]/tine20/vendor/phpunit/phpunit/PHPUnit/Autoload.php -c [diretório do expresso]/tests/phpunit.xml [diretório do expresso]/tests/tine20/AllTests-Expresso.php

Se você estiver no diretório do Expresso, pode copiar a instrução abaixo da forma como está:

phpunit --bootstrap tine20/vendor/phpunit/phpunit/PHPUnit/Autoload.php -c tests/phpunit.xml tests/tine20/AllTests-Expresso.php


No terminal, o histórico da execução se perderá, restando apenas o resultado final. Se quiser armazenar o relatório completo da execução direcione a execução para um arquivo.

phpunit --bootstrap tine20/vendor/phpunit/phpunit/PHPUnit/Autoload.php -c tests/phpunit.xml tests/tine20/AllTests-Expresso.php > /tmp/expressotests.log

7. Instale o Expresso

Realize uma nova instalação do ExpressoV3, com todos módulos/aplicações, para que se tenha um BD sem dados que são preenchidos durante o uso do sistema (Veja procedimento de instalação no Anexo A). Faça um login/logout com cada um dos usuários descritos no passo 1. Faça um backup do BD e guarde para ser usado posteriormente. (Lembre-se que, sempre que atualizações da aplicação alterarem o BD, esse procedimento deverá ser refeito); Nota: Não podem existir registros com valor 'anyone' no campo 'account_type' da tabela 'tine20_preferences'; Nota2: Reforçando que esse BD deve ser limpo, ou seja, sem dados que são preenchidos durante o uso do sistema. Exemplo de backup:

su postgres
pg_dump NOME_BD > dump_expresso.sql
exit


8. Teste a instalação

Certifique-se que a nova instalação do ExpressoV3 esta totalmente funcional antes de iniciar a configuração do PHPUnit, evitando-se assim que problemas já existentes sejam atribuídos ao PHPUnit. Verifique se cada um dos módulos esta funcionando. Se ocorrer problemas, retorne ao passo 6, acima;

Rodando os testes no ambiente de desenvolvimento:

1. Certifique-se que todos os módulos/aplicações usados pelos testes estão instalados e funcionais;


2. Feche todas interfaces(navegador, DAV, ActiveSync, etc) que estão acessando o sistema e apague todos os arquivos temporários (sessão, zend_cache, log, conteúdo da pasta configurada em filesdir, etc...);


3. Certifique-se que a configuração global “sessionIpValidation” esta desabilitada;


4. Certifique-se que a configuração global “storeAclIntoSession” esta desabilitada; (Isso é necessário devido a um bug que será tratado)


5. Faça backup dos arquivos de configuração do Expresso. Isso é necessário porque o teste altera esses arquivos;


6. Restaure o backup do BD. Aquele backup que foi feito logo após a instalação nova do ExpressoV3 (Nota: Sempre que atualizações da aplicação alterarem o BD, será necessário criar um novo backup conforme descrito no passo 1 da configuração inicial dos testes);

Exemplo:

su postgres

psql
# drop database NOME_BD;
# create database NOME_BD with encoding 'UTF-8';
# grant all privileges on database NOME_BD to NOME_USUARIO_DB;
# \q

psql NOME_BD < dump_expresso.sql
exit


7. Execute todos testes unitários pela IDE ou terminal e veja os resultados.


8. Após concluir os testes, apague todos os arquivos temporários;


9. Após concluir os testes, restaure os arquivos de configuração;


ANEXO A: Procedimento para uma Nova Instalação do Expresso

1. O seu usuário deve ser administrador, ou seja, deve pertencer ao grupo Adminsv3. Caso o seu usuário não seja administrador, instale o pacote ldap-utils no seu computador e execute o script manageAdmins.sh que está presente no ticket.


2. Antes de se fazer a instalação, substitua o arquivo de configuração global e de domínio pelos arquivos do ticket.

  • Adeque o arquivo de configuração do domínio para a sua realidade, substituindo as configurações de banco de dados, diretórios temporários e de arquivos para o seu ambiente de desenvolvimento, modifique a senha de setup, etc.
  • No arquivo de configuração de domínio, substitua a configuração userFilter por
&(objectclass=posixaccount)(phpgwaccounttype=u)(uid=<cpf>)

lembrando de substituir o "<cpf>" pelo seu CPF. Isso fará com que o expresso seja instalado com somente um usuário.


3a. Instalação via linha de comando:

Para se fazer a instalação via linha de comando utilize esse comando a partir do diretório tine20:

php setup.php --install "Tinebase,Addressbook,Admin,ActiveSync,Calendar,AppLauncher,Messenger,Expressodriver,Tasks,Webconference,Expressomail" -- acceptedTermsVersion=1 adminLoginName="<cpf>" adminPassword="<senha>"


3b. Instalação via interface gráfica:

Caso o arquivo de configuração de domínio esteja correto, as configurações já serão recuperadas e estarão disponíveis na interface do setup.

Em Autenticação/Contas coloque o seu cpf no campo "Identificação do usuário de administração Inicial" e sua senha nos campos seguintes.

4. Após a instalação

Acesse o setup e em Autenticação/Contas modifique o filtro de usuário para:

&(objectclass=posixaccount)(phpgwaccounttype=u)

ANEXO B: Instalando o PHPUnit 3.7.38 em máquinas Debian

A versão 3.7.38 não está mais disponível para download como arquivo .phar. Por isso é necessário instalar a partir do código-fonte.

1. Remova o phpunit se ele estiver instalado

sudo apt-get remove phpunit

2. Baixe o arquivo compactado de https://github.com/sebastianbergmann/phpunit/releases/tag/3.7.38

3. Descompacte o arquivo

4. Entre na pasta phpunit-3.7.38

5. Rode o composer

composer install

6. Mova a pasta phpunit-3.7.38 para /usr/bin

7. Entre na pasta /usr/bin

cd /usr/bin

8. Dê permissão de execução para o script phpunit

sudo chmod a+x phpunit-3.7.38/composer/bin/phpunit

9. Crie um link simbólico na pasta /usr/bin

sudo ln -s phpunit-3.7.38/composer/bin/phpunit "phpunit"
Ferramentas pessoais
Espaços nominais

Variantes
Ações
Navegação
Ferramentas