Testes de API REST
O PROBAT traz utilitários no namespace tlpp.rest para testar endpoints REST de dentro dos próprios testes — sem cliente HTTP externo. O host é configurado pela chave REST no INI (ver Configuração).
Endpoint alvo
O repositório publica um endpoint mínimo em src/api/resource.tlpp:
#include "tlpp-core.th"
#include "tlpp-rest.th"
namespace api
@Get("/test/sample")
function U_testRestGeneral()
oRest:setResponse( '{"response":"ok"}' )
return
tlpp.rest.runTestSimple — um protocolo
Executa a requisição e devolve header, body e status code por referência:
@TestFixture()
function U_testRestSimple()
local cEndPoint := '/test/sample'
local cMethod := 'GET'
local cBodyOut := ''
local cHeadRet := ''
local cBodyRet := ''
local nStatusCode := 0
local nServiceRet := -1
local xValue
local xExpected
nServiceRet := tlpp.rest.runTestSimple( ;
@cHeadRet ,; // HTTP header returned by the service
@cBodyRet ,; // Retorno do servico
@nStatusCode ,; // HTTP Status Code of the service
cEndPoint ,;
cMethod ,;
cBodyOut ;
)
if ( nServiceRet >= 0 )
xValue := cHeadRet
xExpected := "HTTP.([\w:\/.]+)([200 OK]+)"
assertIsRegexPartial( xValue, xExpected )
xValue := cBodyRet
xExpected := '{"response":"ok"}'
assertJson( xValue, xExpected )
xValue := nStatusCode
xExpected := 200
assertEquals( xValue, xExpected )
else
assertError( "could not run the REST service" )
endif
return .T.
Exemplo no GitHub
tlpp.rest.runRestMultiProtocol — vários protocolos/URLs
Executa o mesmo endpoint contra uma lista de URLs (HTTP/HTTPS, portas diferentes) em dois modos:
- Assert automático — você informa o valor esperado e o nome da função de assert (ex.:
'assertJson') e o utilitário valida internamente cada resposta - Assert manual — o utilitário devolve um array com as respostas e você roda os asserts no próprio teste
// Mode 1 (automatic assert)
xExpected := '{"response":"ok"}'
tlpp.rest.runRestMultiProtocol(;
cEndPoint ,;
cMethod ,;
cGETParms ,;
cBodyOut ,;
nTimeOut ,;
aHeadOut ,;
@cHeadRet ,;
xExpected ,;
'assertJson' ,; // assert usado internamente
'automatic assert' ,;
aUrls ;
)
// Mode 2 (assert in test source)
aService := tlpp.rest.runRestMultiProtocol( cEndPoint, cMethod, cGETParms,;
cBodyOut, nTimeOut, aHeadOut,;
@cHeadRet, "", Nil, "", aUrls,;
.F. ) // nao executa asserts internamente
for nIndex := 1 to len( aService )
assertIsRegexPartial( aService[nIndex][3], "HTTP.([\w:\/.]+)([200 OK]+)", 'manual assert' )
assertJson( aService[nIndex][2], '{"response":"ok"}', 'manual assert' )
next
Exemplo no GitHub
totvs/tlpp-probat-samples — test/api/test_rest_multiProtocol.tlpp
Exemplos no GitHub
Fontes .tlpp no repositório: Testes API REST.