Projeto com Patrol Testing
Fora da Caixa é um app desenvolvido para auxiliar no treinamento de Analistas de testes; O app simula um aplicativo bancário com algumas funcionalidades 'implementadas'; Os dados são salvos localmente numa base de dados, e toda vez que o app é removido a base é removida também; Projeto roda em Android e iOS;
detalhes gerais: flutter doctor -v
verificar versão do flutter: flutter --version
local de instalação do flutter: where flutter
verificar versão do dart: dart --version
local de instalação do dart: where dart
Users para logar:
CPF: 929.035.400-39
CPF: 050.209.090-17
CPF: 971.147.000-40
Users para transferir pix:
Os mesmos acima.
Dica 1: cadastre chaves pix para os usuários e use elas;
Dica 2: os CPFs em si já estão cadastrados como chave pix por default;
Senha para logar com os users:
172839
Token válido para cadastrar chave pix:
123456 (qualquer outro é considerado inválido)
Pin válido:
1234
App simula um aplicativo financeiro, com as seguintes funcionalidades:
Login:
Valida usuários válidos e inválidos e informa ao usuário;
Durante o primeiro login solicita ao usuário permissão de Localização;
Transferência pix:
Processo completo de transferência com debito em conta;
Agendamento de transferência pix;
Comprovante de transferência pix;
Cadastro de alguns tipos de chaves pix:
Algumas chaves podem ser cadastradas, outra não;
Histórico de transferências e recebimentos:
Ao tocar no saldo do usuário é possível visualizar o histórico;
Diversos bugs e pontos de melhorias:
Este é um app de treinamento para QAs, nada melhor que alguns bugs para cadastrar :)
flutter build apk --debug
flutter run --release
Fontes abaixo mostram as configurações necessárias
https://pub.dev/packages/patrol
https://patrol.leancode.co/
https://pub.dev/documentation/patrol/latest/
Para obter o package_name (android):
Acesse android/app/build.gradle;
O item applicationId é o package_name para utilizar
c.foradacaixa.foradacaixac
Para obter o bundle_id (ios):
Abra o 'Runner.xcworkspace' do diretório ios no Xcode;
Acesse a tab Build Settings e procure por Product Bundle Identifier
c.foradacaixa.foradacaixac
Para saber o patrol_client instalado:
patrol --version
Se patrol_client não está instalado:
dart pub global activate patrol_cli
Antes de tudo, é preciso criar os diretórios 'integration_test
Em 'test_driver' criar o arquivo integration_test.dart
Em 'integration_test' criar o diretório 'screens'
No diretório 'screens' haverão arquivos estilo 'page_object' (todos com sufixo _screen)
Em 'integration_test criar o diretório 'tests'
No diretório 'tests' haverão arquivos de testes propriamente ditos
Dentro do diretório integration_test/tests é preciso organizar os testes por 'Features':
Login: contém os testes de login (1 teste por arquivo .dart)
Pix: contém os testes de pix (1 teste por arquivo .dart)
Seguindo a sessão 'Integrate with native side' do https://patrol.leancode.co/getting-started
Criado em android/app/src/androidTest/java/c/foradacaixa/foradacaixac o arquivo 'MainActivityTest.java'
Atualizado android/app/build.gradle
Atualizado pubspec.yaml com a seção do patrol
Para rodar os testes da feature Login:
patrol test --target integration_test/tests/login/
Para rodar os testes da feature Pix:
patrol test --target integration_test/tests/pix/
Para ver a lista de devices conectados:
flutter devices
patrol devices
Para rodar em um device físico iOS*:
patrol test --target integration_test/tests/login --release --device 'iPhone de Cristiano'
Para visualizar o resultado dos testes:
Acessar menu Run > Import tests from file
Abrir o arquivo 'test-result.pb' do caminho build/app/outputs/androidTest-results/connected
Outra opção para visualizar os resultados:
build/app/reports/androidTests/connected/index.html
*Dica importante caso o teste em device físico em iOS não funcione:
1 - Abra o Runner.xcworkspace no Xcode;
2 - No Xcode, com o projeto aberto, selecione Runner (TARGETS);
3 - Aba Signing & Capabilities, selecione novamente seu Team;
4 - Rode o projeto via Xcode no modo teste (Product > Test) com o device físico selecionado;
5 - Deixe rodar por um tempo;
6 - Volte para o Android Studio e rode novamente o comando do patrol
Arquivos .sh criados com o auxílio de:
https://github.com/leancodepl/patrol/blob/master/packages/patrol/example/run_android_testlab
https://patrol.leancode.co/ci/firebase-test-lab
Comando para criar os apks com o ponto de entrada (entry points) dos testes desejados:
Testes da Feature Login:
patrol build android --target integration_test/tests/login
Testes da Feature Pix:
patrol build android --target integration_test/tests/pix
Acesse e logue em https://console.firebase.google.com/ com uma conta google.
Adicione um novo projeto e acesso o item de menu Test Lab e clique no botão 'Executar um teste'
Selecione a opção 'Instrumentação' Suba os 2 apks nos locais correspondentes
Selecione o device desejado e confirme
Inicie o teste e aguarde o resultado
Acesse e faça cadastro em https://cloud.google.com/
Acesse Console e em seguida Cloud Storage
É preciso configurar o gcloud CLI na máquina, para isso acesse https://cloud.google.com/sdk/docs/install
Abaixo alguns comandos úteis:
Para visualizar a versão instalada: gcloud -v
Para visualizar todos os devices android disponíveis no gcloud: gcloud firebase test android models list
É preciso estar com o gcloud CLI corretamente configurado na máquina para poder prosseguir
Para utilizar o Firebase Test Lab e o Cloud Storage integrados, utilize o arquivo android_integration_gcloud.sh
Antes de executar o arquivo, é preciso configurá-lo para apontar para seu bucket, além de informar o device desejado
O comando para executar no terminal é ./android_integration_gcloud.sh
Em caso de erro de permissão de arquivo .sh, basta executar o comando abaixo antes para dar permissão:
chmod +x android_integration_gcloud.sh
Se nenhum erro ocorrer:
apks serão gerados e subidos automaticamente no firebase test lab
os testes desse apk serão executados
o resultado da execução do teste será visível no bucket informado no arquivo bem como no terminal
Seguindo a sessão 'Integrate with native side' do https://patrol.leancode.co/getting-started/native
Abrir o ios/Runner.xcworkspace no Xcode
No Xcode, através do caminhho File > New > Target...
Selecionar a opção UI Testing Bundle
Trocar o Product Name para RunnerUITests
Certificar-se que Target to be Tested está setado para Runner
Certificar-se que a Language está setado para Objective-C
Clique em Finish
RunnerUITest.m e RunnerUITestsLaunchTests.m serão criados
Excluir através do Xcode o arquivo RunnerUITestsLaunchTests.m
Certifique-se que o iOS Deployment Target possui a mesma versão para RunnerUITests e Runner (setar ambos para 13.0)
Atualizar o conteúdo de RunnerUITests.m conforme solicitado na página
Atualizar o ios/Podfile conforme solicitado na página
No Android studio:
Criar o arquivo integration_test/example_test.dart
Executar o comando no terminal: flutter build ios --config-only integration_test/example_test.dart
Abrir um terminal no caminho ios e executar: pod install --repo-update
De volta ao Xcode, abrir Runner.xcworkspace:
Certifique-se que as configurações de Build estão corretas (sessão Configurations)
Adicionar novos 'Run Script Phase' no RunnerUITests target na sessão Build Phases:
xcode_backend build
xcode_backend embed_and_thin
Adicione os códigos requeridos nessas duas novas Build Phases
Desabilite a 'execução paralela' conforme mostrado no video da página
Para testar as configurações, selecione um simulador iOS e execute no terminal o comando abaixo:
patrol test -t integration_test/tests/login/successful_login_test.dart
(ou algum outro arquivo de teste)
Arquivos .sh criados com o auxílio de:
https://github.com/leancodepl/patrol/blob/master/packages/patrol/example/run_android_testlab
https://patrol.leancode.co/ci/firebase-test-lab
Para execução em dispositivo físico iOS pode haver problemas de signing.
Apenas conecte o device fisico, selecione, e execute um clean no projeto, o quanto for necessário
Acesse e logue em https://console.firebase.google.com/ com uma conta google.
Adicione um novo projeto e acesso o item de menu Test Lab e clique no botão 'Executar um teste'
Selecione a opção 'XCTest' Suba o .zip e selecione a versão do Xcode correspondente (deve ser a mesma instalada no mac)
Selecione o device desejado e confirme
Inicie o teste e aguarde o resultado
TestLab possui somente devices físicos, então o foco será mostrar as configurações de .sh para device físico
Executar o comando ./ios_integration_gcloud.sh
Em caso de erro de permissão de arquivo .sh, basta executar o comando abaixo antes para dar permissão:
chmod +x ios_integration_gcloud.sh
Se nenhum erro ocorrer:
.zip será gerado e subido automaticamente no firebase test lab
os testes desse .zip serão executados
o resultado da execução do teste será visível no bucket informado no arquivo bem como no terminal
https://medium.com/flutter-community/change-flutter-app-launcher-icon-59c31bcd7554