Pular para o conteúdo principal

Automação — comando probat e execução por código

Com práticas de DevOps, a esteira de testes deixa de ser manual: compilação, execução e exportação de resultados rodam de forma automatizada e contínua, com detecção precoce de bugs e regressões. O PROBAT atua dominantemente na fase de testes, mas também apoia as fases de code, build e release — via script de automação, exportação em formatos reconhecidos pelas ferramentas de CI/CD (JUnit, COBERTURA) e extensão do VSCode.

A pasta run/ traz duas formas de automatizar a esteira: um comando probat instalável no Linux/WSL e o fonte main.prw que encadeia a execução por código TLPP.

Instalando o comando probat

Requer Linux ou WSL (Subsistema do Windows para Linux). Na pasta run/ do repositório:

cd /mnt/d/tlpp-probat-samples/run
./install.sh

Depois disso o comando probat funciona de qualquer diretório e sessão do terminal.

Configurando o ambiente (probat_config)

O script de configuração exporta as variáveis que apontam para o seu ambiente (há variantes probat_config_linux.sh e probat_config_windows.sh):

VariávelO que indicaExemplo
APP_DIRDiretório do binário do AppServer/mnt/d/tlppcore/bin_20.3.1.x/
APP_EXENome do executávelappserver.exe ou appserverlinux
APP_ENVAmbiente de compilação/execuçãoTLPPCORE
APP_INIINI usado pelo scriptappserver_SH.ini
APP_INI_EXTINI para envio de eventos externosappserver_SH_external.ini
SRC_DIRFontes do projeto e de testesD:\probat_samples\src
INCLUDES_DIRIncludes TH/CH para compilaçãoD:\tlppcore\includes;D:\tlppcore\includes_dev
TESTS_RESULTXML de resultados gerado ao final.../root/system/testsresults.xml

Usando o comando

ComandoEfeito
probatCompila e executa (defaults: -compile -run -noexternal -nodebug)
probat -versionMostra a versão instalada
probat -nocompileSó executa os testes, sem compilar
probat -norunSó compila, sem executar
probat -externalEnvia os eventos do script para o PROBAT
probat -debugImprime mensagens de debug do script

Os parâmetros podem ser combinados em qualquer ordem:

probat -compile -run
probat -nocompile -run
probat -compile -run -debug
probat -run -external -compile

Saiba mais: Enviando eventos da automação para o PROBAT.

Execução por código — main.prw

O run/main.prw mostra outra forma de encadear a esteira: a descoberta dos fontes de teste é apartada da execução; roda-se primeiro a suite exclusiva, depois todos os testes, e ao final exporta-se tudo com uma chave custom que unifica os resultados:

function U_testRun()

local cKey := "Hgk34Gnm90-" + strTran( time(), ":", "-" )

// Verifica se o modulo PROBAT esta instalado
if ( tlpp.module( 'PROBAT', @jModule ) )

// 1. Descoberta dos fontes de testes
tlpp.probat.discovery()

// 2. Executa a suite que nao roda em modo ALL
tlpp.probat.runOffCoverage( "type:suite", "minha_suite_ok", "custom:"+cKey )

// 3. Executa todos os testes em modo ALL
tlpp.probat.run( "custom:"+cKey )

// 4. Exporta os resultados de todas as execucoes acima
tlpp.probat.export( "type:custom", cKey )

endif
return
FunçãoPapel
tlpp.module('PROBAT', @jModule)Verifica instalação/versão do módulo
tlpp.probat.discovery()Descobre os fontes de teste compilados
tlpp.probat.runOffCoverage(...)Executa um recorte (aqui, uma suite) sem cobertura
tlpp.probat.run(...)Executa todos os testes
tlpp.probat.export(...)Exporta os resultados (formato definido no INI, ex.: JUnit)

A chave custom é o que unifica as execuções na exportação — ver Execução e resultados.

Eventos externos — tlpp.probat.over.*

Disponibilidade

Recurso disponível a partir do AppServer 20.3.1.13 e tlppCore 01.04.04.

Em uma esteira automatizada, cada ferramenta tem seu próprio log — e nenhuma enxerga o das outras. Se um teste falha, o PROBAT mostra; mas se o problema ocorre no script (clone, compilação, subida do servidor), a informação fica descentralizada e o troubleshooting vira caça ao tesouro.

O namespace tlpp.probat.over resolve isso: o processo externo (um shell script, por exemplo) envia seus eventos ao PROBAT usando o mesmo identificador customizado das execuções reais. Na exportação, os eventos externos entram como uma suíte destacada — se o script teve um erro, o resultado final é negativo mesmo com todos os testes passando.

Todas são Main Functions, executáveis pela linha de comando do AppServer. É exatamente o que o parâmetro -external do comando probat aciona.

Início e fim do processo

./appserver.exe -env=ENV_NAME -run=tlpp.probat.over.startScript custom:id123456789ext
./appserver.exe -env=ENV_NAME -run=tlpp.probat.over.endScript custom:id123456789ext

Asserts externos

FunçãoEfeito
over.assertOKRegistra resultado positivo para a execução externa
over.assertErrorRegistra resultado negativo
over.assertWarningRegistra aviso
over.assertExitCodeValida o exit code de um comando — 0 gera positivo, diferente gera negativo
./appserver.exe -env=TLPPCORE -run=tlpp.probat.over.assertOK custom:id123456789ext step:1 "message:command>git clone done"
./appserver.exe -env=TLPPCORE -run=tlpp.probat.over.assertError custom:id123456789ext step:2 "message:command> compile with error"
./appserver.exe -env=TLPPCORE -run=tlpp.probat.over.assertExitCode custom:id123456789ext step:3 exitCode:0 "message:command>tlpp.probat.run"

Mensagens com espaços devem ir com o parâmetro inteiro entre aspas.

Plano de execução (steps)

Opcionalmente, informe ao PROBAT o plano da automação — passo a passo com descrição. Ao usar o plano, o status de cada step passa a ser obrigatório:

# Declara o plano
./appserver.exe -env=TLPPCORE -run=tlpp.probat.over.setPlan custom:id123456789ext "1:git clone" 2:compile "3:run tests"

# Com medição de tempo: par start + end
./appserver.exe -env=TLPPCORE -run=tlpp.probat.over.startStep custom:id123456789ext step:1
./appserver.exe -env=TLPPCORE -run=tlpp.probat.over.endStep custom:id123456789ext 1:ok

# Sem medição de tempo: somente o status
./appserver.exe -env=TLPPCORE -run=tlpp.probat.over.setStep custom:id123456789ext 2:error

O status enviado (ok/error) é determinante para "quebrar" ou não a pipeline. O par startStep + endStep registra também o tempo gasto no passo; o setStep sozinho abre mão do tempo, mantendo o status.

Documentação oficial: 11 - Automação com DevOps e CI/CD e Enviando eventos da automação para o PROBAT.

Exemplos no GitHub

Fontes .tlpp no repositório: Exemplos PROBAT.