Meios de testar seu código

Requisitos para continuar

Não executamos o backend na máquina de desenvolvimento.

Por se tratar de um produto de INFRA e depender de vários serviços do linux, não recomendados e em algumas situações não conseguimos executar em máquina local, deve-se rodar sempre em uma VM com CentOS 8 ou em um dos nossos ambientes de teste.

Como funciona a nossa rotina no desenvolvimento do backend

  1. Realizamos alterações no código (correções, novas implementações ou refatorações)
  2. Substituímos o código na VM
  3. Testamos o código dentro da VM

1. Realizar alteração no código

Quando realizamos qualquer modificação no código, seja uma nova funcionalidade ou uma correção, precisamos de alguma maneira testar a parte do backend e/ou a integração com o frontend, para isso o melhor cenário é utilizando uma Máquina Virtual (VM). Antes de movermos o código alterado para alguma VM, precisamos fazer a alteração de acordo com a nossa atividade, durante o nosso desenvolvimento devemos nos atentar a escrever e estruturar um código legível e bem indentado, para isso temos à nossa disposição os linters que servem para melhorar a legibilidade do nosso código, e os testes unitários que nos ajudam a garantir a funcionalidade e corretude de nossas alterações. Após escrever seus testes unitários, podemos executar dois scripts para executar os linters e os testes, ou executar as ferramentas de forma direta.

Para executar os linters, utilizando o script você deve:

  • Entrar no diretório itflex/server/backend
  • Ativar a virtualenv (caso você ainda tenha alguma dúvida a respeito do funcionamento, e como criar acesse a documentação através deste link):
source venv/bin/activate
  • Executar o script/helper:
../helpers/python-lint.sh

Você pode também executar diretamente os linters, para entender como fazer isso, verifique a documentaćão deles aqui

Diferença entre executar o Script e utilizar direto às ferramentas de linter

Nosso script serve unicamente para informar onde estão os erros que os linters irão apontar, utilizar diretamente as ferramentas irá dar a você a opção de conceder a ferramenta de lint o “poder” de corrigir o código para você.

Para executar os testes unitários, utilizando o script você deve:

  • Entrar no diretório itflex/server/backend
  • Ativar a virtualenv (caso você ainda tenha alguma dúvida a respeito do funcionamento, e como criar acesse a documentação através deste link):
source venv/bin/activate
  • Executar o script/helper:
../helpers/python-test.sh

Você pode também executar diretamente os testes através do pytest, segue abaixo algumas formas de executar os testes unitários:

Para executar todos os testes do FwFlex

pytest

Para executar somente os testes de uma pasta

pytest -vv itflex_auth

Para executar um teste em específico de acordo com o nome

pytest -vv itflex_auth -k test_delete_user

Diferença entre executar o Script e utilizar direto a ferramenta de testes

Nosso script executa todos os testes existentes no produto, utilizando diretamente a ferramenta permite que você especifique a pasta de testes do módulo em específico, assim como permite que você especifique qual teste deseja executar.

Com os testes unitários passando, podemos seguir para a próxima etapa.

2. Substituindo o código na VM

Para realizarmos o teste de integração, precisamos substituir o código na VM local ou servidor que será utilizado no teste.

Para que você possa copiar o código para uma VM e acessar ela, você precisa que seu usuário SSH esteja incluído no provisionamento das máquinas. Caso seu usuário ainda não esteja incluso, você pode utilizar o usuário root e a senha semprelinux para acessar as VMs, estas credenciais são as padrões para nossos ambientes de testes.

Você precisa também saber o IP ou Hostname da VM, todos nossos ambientes de testes compartilhados possuem um hostname, você pode verificar quais são estes acessando a documentação sobre os ambientes aqui.

Caso seja sua VM, você pode acessar ela através do seu gerenciador de máquinas virtuais e executar o seguinte comando para identificar o ip e verificar qual o ip da segunda interface de rede:

ip a

Um exemplo de retorno seria este:

2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
   link/ether 6a:3d:29:e1:6f:65 brd ff:ff:ff:ff:ff:ff
   inet 192.168.47.69/24 brd 192.168.47.255 scope global noprefixroute ens18
      valid_lft forever preferred_lft forever

Neste caso o IP da nossa VM é 192.168.47.69

Segue abaixo os passos.

Estrutura do comando para copiar o código para o tmp da VM

scp -r {{ Diretório que deseja copiar }} {{ Seu usuário }}@{{ IP do servidor }}:/tmp
Exemplo
scp -r itflex_auth itflex@192.168.47.69:/tmp

Estrutura do comando para acessar a VM via SSH

ssh {{ Seu usuário }}@{{ IP do servidor }}
Exemplo
ssh itflex@192.168.47.69

Substituindo a pasta no site-packages do python.

Após mover o código para o tmp (diretório do sistema Linux que serve para armazenar os arquivos temporários), precisamos mover nossos arquivos .py para o diretório onde está nosso projeto sendo executado, o site-packages é o diretório de destino dos pacotes Python que são construídos manualmente.

cd /usr/lib/python3.6/site-packages/
rm itflex_auth -Rf && cp /tmp/itflex_auth . -Rf

Todo o código escrito em itflex/server/backend, quando movido para uma VM e executado, se encontra no diretório /usr/lib/python3.6/site-packages.

3. Testando o código na VM

Para facilitar os testes e visualização dos erros, a melhor maneira de debugar é executando o serviço do itflex-admin na mão. Este serviço é gerenciado pelo systemd, é um sistema de inicialização (init system) composto por um conjunto de programas executado em segundo plano no sistema Fedora.

Segue abaixo os passos para executar o itflex-admin na mão.

Primeiro é necessário parar o serviço do itflex-admin

systemctl stop itflex-admin

Iniciar o serviço do itflex-admin na mão

cd /usr/lib/python3.6/site-packages/
python3 -m itflex.run

3.1 Como testar a funcionalidade nova ou que foi alterada

Deve ser testado de duas formas, uma utilizando uma ferramenta de API Client para testar a API e o fluxo do backend como Postman ou Insomnia. Outra é acessar a interface do FwFlex, entrando nas telas e executando a funcionalidade que foi alterada.

Esta segunda forma só é possível quando temos o frontend funcionando para aquela alteração.

Podemos acessar a interface do FwFlex pelas portas 9292 ou 9293 da VM.

3.1.1 Porta 9293

Ao acessar https://{{ Ip do servidor }}:9293, o navegador vai solicitar um certificado SSL para permitir o acesso ao FwFlex. Esse certificado é fornecido pela itflex, para conseguir logar nos servidores de cliente sem usuário e senha.

3.1.2 Porta 9292

Ao acessar https://{{ Ip do servidor }}:9292, vai aparecer a tela de login para informar o usuário e senha. Se o banco estiver vazio, é necessário criar um usuário para ter acesso às telas. Segue abaixo o procedimento para acelerar esta etapa:

  • Copiar o itflex/server/backend/create_user.py para VM.
scp create_user.py {{ Seu usuário }}@{{ Ip do servidor}}:/tmp
  • Executar o script na vm.
python3 /tmp/create_user.py

Se não foi alterado o script, o usuário para login será admin e senha admin123

Esse script ignora algumas validações de objeto, pois insere diretamente no banco os dados.

O script create_user.py só pode ser executado em ambiente de teste, nunca execute em servidor de cliente/produção.