advpl-specialist
Referencia Interna

ADVPR Test Automation

Automacao de testes sem interface no Protheus com o robo ADVPR (Advanced Protheus Robot) e a classe FWTestHelper

ADVPR Test Automation

ADVPR (Advanced Protheus Robot) e a ferramenta oficial de automacao de testes do Protheus, desenvolvida internamente em ADVPL. Ela permite automatizar casos de teste sem uso de interface grafica, com foco em regra de negocio — eliminando a dependencia de telas e tornando a execucao mais rapida, estavel e paralelizavel.

O comando /advpl-specialist:advpr gera scripts de automacao ADVPR seguindo os padroes desta skill automaticamente.

O que e o ADVPR

  • Executa testes de regra de negocio sem interface, em tempo menor que ferramentas baseadas em UI.
  • Roda em paralelo com outras atividades na mesma maquina.
  • Utiliza ADVPL, linguagem familiar aos desenvolvedores TOTVS.
  • Funciona em diferentes versoes do Protheus e e independente de alteracoes no ERP pela TOTVSTec/Framework.
  • Requer a aplicacao do patch de Setup disponivel em http://advpr.totvs.com.br:8080/#/setup.

Execucao

Com interface — FWMyTestRunner

Apos aplicar o patch, execute o robo pela funcao FWMyTestRunner inserida no programa inicial do SmartClient. A tela exibe os casos de teste habilitados (esquerda) e os detalhes de cada execucao (direita). O resultado e indicado por legenda: verde para aprovado, vermelho para reprovado.

Headless (sem interface) — FwExecSuite

A execucao oficial (esteira SmartTest) e sempre sem interface. Qualquer tela, alerta ou pergunta durante a execucao causa TimeOut e interrompe a suite.

appserver.exe -run=FwExecSuite -env=<environment> <suite> 0

Exemplo para a rotina MATA103:

C:\P12\P12\Bin\appserver\appserver.exe -run=FwExecSuite -env=P12 MATA103 0

Acompanhe a execucao pela Console do Servidor.

Causas de TimeOut: execucao superior a 8 horas, apresentacao de interface, Access Violation ou falha ao gerar o resultado final.

Estrutura do Script

A automacao consiste em tres fontes que se relacionam hierarquicamente:

TestSuite  →  agrupa um ou mais TestGroups
  └── TestGroup  →  agrupa um ou mais TestCases
        └── TestCase  →  implementa os casos de teste individuais
FonteHerda deResponsabilidade
TestSuiteFWDefaultTestSuiteConfiguracao de pre-condicoes globais (ambiente, parametros, filial)
TestGroupFWDefaultTestSuiteAgrupamento e ordenacao dos TestCases
TestCaseFWDefaultTestCaseImplementacao de cada caso de teste conforme especificacao

Exemplo minimo — TestSuite

#Include "TOTVS.CH"

CLASS FINA040TestSuite FROM FWDefaultTestSuite
  DATA aParam
  METHOD FINA040TestSuite() CONSTRUCTOR
  METHOD SetUpSuite()
  METHOD TearDownSuite()
ENDCLASS

METHOD FINA040TestSuite() CLASS FINA040TestSuite
  _Super:FWDefaultTestSuite()
  Self:AddTestSuite(FINA040TestGroup():FINA040TestGroup())
Return

METHOD SetUpSuite() CLASS FINA040TestSuite
  Local oHelper := FWTestHelper():New()
  oHelper:UTOpenFilial("T1","D MG 01 ")
  oHelper:UTSetParam("MV_LOCALIZ","S",.T.)
  oHelper:Activate()
Return oHelper

METHOD TearDownSuite() CLASS FINA040TestSuite
  Local oHelper := FWTestHelper():New()
  oHelper:UTRestParam(::aParam)
  oHelper:UTCloseFilial()
Return oHelper

Exemplo minimo — TestCase

#Include "TOTVS.CH"

CLASS FINA040TestCase FROM FWDefaultTestCase
  DATA oHelper
  METHOD FINA040TestCase() CONSTRUCTOR
  METHOD FIN040_001()
ENDCLASS

METHOD FINA040TestCase() CLASS FINA040TestCase
  _Super:FWDefaultTestSuite()
  ::AddTestMethod("FIN040_001",,"Inclusao de titulo")
Return

METHOD FIN040_001() CLASS FINA040TestCase
  Local oHelper := FWTestHelper():New()
  Private lMsErroAuto    := .F.
  Private lAutoErrNoFile := .T.

  oHelper:Activate()
  oHelper:UTSetValue("aCab","E1_PREFIXO","AUT")
  oHelper:UTSetValue("aCab","E1_VALOR",1000)
  oHelper:UTCommitData({|x,y| FINA040(x,y)}, oHelper:GetaCab(), 3)
  oHelper:UTCheckDB("SE1","E1_VALOR",1000)
  oHelper:AssertTrue(oHelper:lOk,"")
Return oHelper

Regras de Nomenclatura

RegraDetalhe
Tamanho da classeMaximo de 25 caracteres (excluindo o sufixo TestSuite/TestGroup/TestCase)
Nome do arquivo .prwDeve ser identico ao nome da classe
Nome do metodo de testeExatamente 10 caracteres com o numero do caso (ex.: FIN040_001)
TestGroup e TestCaseDevem ter o mesmo nome do TestSuite; caso contrario, cadastrar todos os TestCases separadamente em "Donos de Programa"

A Classe FWTestHelper

FWTestHelper e o nucleo do framework ADVPR. Instancie com FWTestHelper():New() e ative com oHelper:Activate(). A referencia completa esta em skills/advpr-test-automation/api-fwtesthelper.md com aproximadamente 113 metodos organizados nos seguintes grupos:

GrupoExemplos de metodos
Ciclo de vidaNew, Activate, Deactivate
AssertivasAssertTrue, AssertFalse, AssertHelp
Parametros, filial e dataUTSetParam, UTRestParam, UTOpenFilial, UTCloseFilial, ChangeFil, UTDateCurrent
Entrada de dados e execucaoUTSetValue, UTAddLine, UTCommitData, UTChangePergunte, UTFindReg, UTSchedule
Consulta e validacao em baseUTCheckDB, UTQueryDB, UTSelectDB, UTCountRows, UTClearDB, UTDeleteDB
AuditoriaUTAuditField, UTAuditTable, UTCheckAudit
Webservice, REST e EAIUTSetAPI, UTGetWS, UTPostWS, UTPutWS, UTDeleteWS, UTClientWSDL, UTEAIActivate, UTVldEAI
SmartLinkUTGetTenantID, UTExecSmtLink, UTVldSmtLink, UTSetConfigSendSmtLink
Smart ViewUTParamSmartView, UTGenerateSmartView, UTCompareSmartView, UTSchemaSmartView
NF-e e TSSGeraChvNfe, UTXMLReplace, UTXMLGETVALUE, UTExecPredecessor

Tipos de Rotina Suportados

Tipo de RotinaArquivo de Padrao
MVC (Model-View-Controller)patterns-mvc.md
ExecAuto / MSExecAutopatterns-execauto.md
Preparacao de Rotina (desvio de tela)patterns-routine-prep.md
Relatoriospatterns-reports.md
Processamento em lotepatterns-processing.md
TOTVS Message (EAI)patterns-totvs-message.md
Webservice (REST e SOAP)patterns-webservice.md
SmartLinkpatterns-smartlink.md
Smart Viewpatterns-smartview.md

Boas Praticas

Proibicoes

  • Variaveis Private, publicas e estaticas nos scripts — podem impactar outros testes do projeto.
  • Loops (While/DbSkip, For/Next) — oneram a execucao.
  • RecLock/MsUnLock — terminantemente proibido; grava direto no banco sem avaliar regra de negocio.
  • Comandos de banco direto: Select, RetSQLName, D_E_L_E_T_, ChangeQuery, DbUseArea, DbCloseArea, TCGenQry fora dos metodos ADVPR designados.
  • Posicionamento manual: DbSelectArea, DbSetOrder, DbSeek — usar UTFindReg no lugar.
  • PutMV — nao alterar SXs diretamente; usar UTSetParam com UTRestParam na restauracao.
  • CHs de produto e strings de localizacao de arquivos nos fontes de teste.

Restauracoes Obrigatorias

O que foi alteradoComo restaurar
Parametros via UTSetParamUTRestParam apos o commit
Filial via ChangeFilChangeFil de volta para a filial do Setup
Data base alterada manualmentedDataBase := DATE() apos o commit
SIGAMAT via UTAlterSM0UTRestSM0
SX3 via UTAtuSX3UTRestSX3
Compartilhamento via UTUpdCompUTRestComp
Registry via UTSetRouteMockUTRestRegistry

Para envio de mensagens, sempre use help() em vez de telas customizadas. Isso dispensa o uso de IsBlind para execucao automatica.

GPS de Testes

O GPS de Testes e uma funcionalidade integrada ao ADVPR que indica quais suites e casos de teste passam por um determinado trecho de codigo, com base na ultima cobertura coletada. Util para identificar quais testes executar antes e apos uma alteracao, evitando colaterais indesejados.

Como usar: informar o nome do programa (sem extensao), a linha inicial e a linha final. O resultado lista TestSuites, TestCases e TestMethods que cobrem aquelas linhas. Os dados podem ser exportados para .csv.

Arquivos de Suporte

Esta skill inclui os seguintes arquivos de referencia:

ArquivoConteudo
reference.mdConceito, execucao, estrutura dos tres fontes e nomenclatura
best-practices.mdProibicoes e restauracoes obrigatorias
api-fwtesthelper.mdReferencia completa da classe FWTestHelper (~113 metodos)
patterns-mvc.mdPadrao para rotinas MVC
patterns-execauto.mdPadrao para ExecAuto/MSExecAuto
patterns-routine-prep.mdPreparacao de rotinas com desvio de tela
patterns-reports.mdAutomacao de relatorios
patterns-processing.mdRotinas de processamento em lote
patterns-totvs-message.mdIntegracao TOTVS Message (EAI)
patterns-webservice.mdWebservice REST e SOAP
patterns-smartlink.mdSmartLink
patterns-smartview.mdSmart View
gps-de-testes.mdGPS de Testes — cobertura por trecho de codigo

Nesta pagina