Teste Automatizado

Introdução
Os testes automatizados fornecem um meio de garantir que a alta qualidade do SuiteCRM seja mantida. SuiteCRM possui um conjunto de testes automatizado que é alimentado pelas estruturas de teste Codeception e PHPUnit.

 

Suites de teste
SuiteCRM oferece quatro suítes de teste diferentes.

Suite Descrição
install Teste de aceitação para verificar se o assistente de instalação está funcionando corretamente.
acceptance Teste automatizado de navegador, também conhecido como ‘testes de recursos’.
unit Os testes de unidade verificam se uma única unidade de código, por exemplo, um método está funcionando corretamente.
api Testes funcionais que testam as respostas da versão 8 da API.

Estabelecer Este guia assume que você já instalou e configurou uma versão compatível do PHP, MySQL 5.7 e Composer. Você pode configurar o CRM para teste com estas etapas:

  1. Em seu emulador de terminal ou prompt de comando: caminho do cd / para / suitecrm / instância.
  2. Instale dependências com o Composer: instalação do composer.
  3. Crie um banco de dados MySQL chamado Automa_tests, junto com um usuário chamado Automa_tests e a senha Automated_tests. Na interface de linha de comando do MySQL:
  4. mysql -e “CRIAR BANCO DE DADOS automatic_tests CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;”
  5. mysql -u root -p -e “CRIAR USUÁRIO ‘Automated_tests’ @ ‘localhost’ IDENTIFICADO POR ‘Automated_tests’;”
  6. mysql -u root -p -e “GRANT ALL PRIVILEGES ON Automated_tests. * TO ‘Automated_tests’ @ ‘localhost’;”
  7. Configure as variáveis ​​de ambiente, consulte a seção de variáveis ​​de ambiente abaixo para obter mais informações.
  8. Configure seu servidor Apache para que o servidor SuiteCRM esteja disponível em http: // localhost (ou qualquer URL de instância que você configurou na etapa anterior).
  9. Instale o ChromeDriver para que você possa usá-lo para automatizar o navegador Chrome (você também precisará do Chrome ou Chromium instalado): ./vendor/bin/robo chromedriver: instalar Você também precisará de uma instância do ChromeDriver em execução em segundo plano para o conjunto de testes usar. Você pode usar ./vendor/bin/robo chromedriver: run para executar uma instância do ChromeDriver. Isso é necessário para os pacotes de instalação e aceitação.
  10. Você pode atualizar sua versão do ChromeDriver, se necessário, com ./vendor/bin/robo chromedriver: install –reinstall.
  11. Crie dependências de teste com ./vendor/bin/codecept build.
  12. Configure o ambiente de codecepção personalizado para permitir a execução dos testes de instalação e aceitação localmente.
  13. Consulte “Configurando o ambiente de teste” abaixo.
  14. Instale o SuiteCRM.
  15. Isso pode ser feito executando o pacote de instalação ou passando pelo processo de instalação em seu navegador. Ele deve estar disponível em http: //localhost/install.php.
  16. Preencha o banco de dados com dados de teste para o conjunto de testes da API. Substitua DATABASE_NAME pelo nome do banco de dados MySQL configurado, provavelmente automatic_tests se você seguiu as instruções acima.
  17. mysql -u root -p -D DATABASE_NAME -v -e “source tests / _data / api_data.sql”
  18. mysql -u root -p -D DATABASE_NAME -v -e “source tests / _data / demo_users.sql”

Com isso, você deve ser capaz de executar as suítes de teste – observe que os testes de instalação só podem ser executados uma vez atualmente.

 

Variáveis ​​ambientais
Este é o método preferido para armazenar informações confidenciais, pois evita que as informações de segurança sejam enviadas para o repositório git. Você pode automatizar diferentes ambientes de desenvolvimento usando variáveis ​​de ambiente.

 

 

Variáveis ​​de ambiente do conjunto de testes

Instale o Test Suite:

Variável Descrição
DATABASE_DRIVER MYSQL ou MSSQL.
DATABASE_HOST caminho para o servidor do banco de dados.
DATABASE_NAME nome dobanco de dados.
DATABASE_USER usuário do banco de dados.
DATABASE_PASSWORD senha do banco de dados.

 

Aceitação, API e pacotes de teste de instalação:

Variável Descrição
INSTANCE_URL URL da instância SuiteCRM que o testador precisa acessar.
INSTANCE_ADMIN_USER usuário administrador para fazer login.
INSTANCE_ADMIN_PASSWORD senha de administrador para fazer login.

 

Suítes de teste de API:

Variável Descrição
INSTANCE_CLIENT_ID ID do cliente
INSTANCE_CLIENT_SECRET Segredo do cliente

 

Configurar variáveis ​​de ambiente com tarefa Robô
Abra o terminal e execute o Robô:
./vendor/bin/robo configurar: testes (Bash)

. \ vendor \ bin \ robo configure: testes (prompt de comando)

Isso adicionará interativamente as variáveis ​​de ambiente necessárias ao seu arquivo ~ / .bash_aliases. Você precisa reiniciar seu terminal / prompt de comando para obter as alterações. No macOS / Linux, você pode usar env para ver as variáveis ​​de ambiente atuais.

Observe que essas variáveis ​​se aplicam a todo o dispositivo, portanto, se você tiver mais de um CRM configurado localmente, todos usarão a mesma configuração.

 

Configurando o ambiente de teste
É recomendável que você execute o conjunto de testes com um ambiente personalizado configurado, para garantir que o conjunto de testes saiba onde está a instância de CRM e para permitir que você personalize o ambiente para suportar depuração, se necessário. Copie tests / _envs / custom.dist.yml para tests / _envs / custom.yml e leia os comentários do arquivo para configurar seu ambiente. custom.yml não será rastreado pelo git, então pode ser customizado para funcionar com seu ambiente local sem ser reiniciado ou acidentalmente confirmado.

Você pode executar testes de codecepção em um determinado ambiente, como: ./vendor/bin/codecept executar aceitação –env custom

Observe que o ambiente personalizado deve ser usado apenas com os conjuntos de teste de aceitação e instalação. Há também o ambiente travis-ci-hub.yml, que serve para executar os testes no Travis CI.

Consulte a documentação do Codeception para obter mais informações sobre a configuração do ambiente.

Executando as suítes de teste
Depois de configurados, você pode executar os conjuntos de testes com os seguintes comandos Robô:

Variável Descrição
install ./vendor/bin/robo tests: install
acceptance ./vendor/bin/robo testes: aceitação
unit ./vendor/bin/robo testes: unidade
api ./vendor/bin/robo testes: api

 

Algumas coisas a serem observadas:
– Esses comandos usarão automaticamente o ambiente definido em tests / _envs / custom.yml para os conjuntos de teste de instalação e aceitação.
– Cada um desses comandos leva estes sinalizadores:
–debug: Imprime mais informações durante as execuções de teste, bom para depuração.
–fail-fast: interrompe a execução do conjunto de testes após a primeira falha.

– Cada um deles também pode ser passado para um diretório ou pasta específica se você quiser executar apenas alguns testes específicos, por exemplo, ./vendor/bin/robo tests: unit ./tests/unit/phpunit/modules/.
– A suíte de teste de instalação só pode ser executada uma vez atualmente, e todas as outras suítes de teste dependem do CRM que está sendo instalado.
– Os conjuntos de testes de instalação e aceitação usam testes automatizados de navegador com o Chrome e exigem que o usuário execute um processo ChromeDriver separado simultaneamente com o conjunto de testes. Como alternativa, você ativa a extensão ChromeDriver RunProcess fornecida em custom.dist.yml para que o ChromeDriver inicialize automaticamente sempre que os testes precisarem.

 

 

Outras opções de configuração

Docker
Você também pode executar o conjunto de testes usando o Docker, se preferir.

Variáveis ​​de ambiente de configuração (Docker Compose):
Você pode adicionar um arquivo .env à configuração do Docker Compose:
DATABASE_DRIVER=MYSQL
DATABASE_NAME=automated_tests
DATABASE_HOST=localhost
DATABASE_USER=automated_tests
DATABASE_PASSWORD=automated_tests
INSTANCE_URL=http://path/to/instance
INSTANCE_ADMIN_USER=admin
INSTANCE_ADMIN_PASSWORD=admin
INSTANCE_CLIENT_ID=suitecrm_client
INSTANCE_CLIENT_SECRET=secret

 

em seguida, faça referência a ele em seu contêiner php (docker-compose.yml):

version: '3'
 services:
   php:
       image: php:7.0-apache
       restart: always
       ports:
         - 9001:80
       environment:
        - DATABASE_DRIVER: $DATABASE_DRIVER
        - DATABASE_NAME: $DATABASE_NAME
        - DATABASE_HOST: $DATABASE_HOST
        - DATABASE_USER: $DATABASE_USER
        - DATABASE_PASSWORD: $DATABASE_PASSWORD
        - INSTANCE_URL: $INSTANCE_URL
        - INSTANCE_ADMIN_USER: $INSTANCE_ADMIN_USER
        - INSTANCE_ADMIN_PASSWORD: $INSTANCE_ADMIN_PASSWORD
        - INSTANCE_CLIENT_ID: $INSTANCE_CLIENT_ID
        - INSTANCE_CLIENT_SECRET: $INSTANCE_CLIENT_SECRET

 

Usando Docker Compose com o Selenium Hub
Em seu ambiente de desenvolvimento de selênio, é recomendável que você empregue docker compose para configurar um hub de selênio com um nó de selênio. Isso garantirá que sua versão do Chrome ou Firefox seja mantida atualizada com a versão mais recente. Além disso, você também pode executar várias versões do PHP na mesma máquina host.

Você pode configurar o selênio usando docker compose. Certifique-se de ter o seguinte em seu arquivo docker-compose.yml.

version: '3'
 services:
     selenium-hub:
       image: selenium/hub
       restart: always
       ports:
         - 4444:4444
     selenium-node-chrome:
       image: selenium/node-chrome-debug
       restart: always
       ports:
         - 5900:5900
       links:
         - selenium-hub:hub
       environment:
               - "HUB_PORT_4444_TCP_ADDR=selenium-hub"
               - "HUB_PORT_4444_TCP_PORT=4444"
     selenium-node-firefox:
       image: selenium/node-firefox-debug
       restart: always
       ports:
         - 5901:5900
       links:
         - selenium-hub:hub
       environment:
               - "HUB_PORT_4444_TCP_ADDR=selenium-hub"
               - "HUB_PORT_4444_TCP_PORT=4444"

Nota: você também pode escolher imagens diferentes para os nós, por exemplo, os nós sem suporte de vnc

 

Outras dicas
Adicione fornecedor / bin ao seu PATH
Isso tornará mais fácil executar o codeception e os outros comandos que residem no diretório vendor / bin /. Você pode adicionar a localização do fornecedor / bin à sua variável de ambiente PATH.

Adicionando fornecedor / bin ao PATH (Bash):
exportar PATH = $ PATH: / path / to / instance / vendor / bin
Adicionando fornecedor / bin ao PATH (Prompt de Comando):
defina PATH =% PATH%; C: \ path \ to \ instance \ vendor \ bin

Isso permite que você chame os comandos codecept e robo sem precisar prefixar o comando com sua localização. Ao executar qualquer um deles, você deve se certificar de que seu diretório de trabalho atual é o mesmo que sua instância SuiteCRM.

cd / caminho / para / suitecrm / instância /

aceitação de execução de codecept ou testes robô: aceitação