Configuración
gtool lee ./component-config.yml por defecto; indica otro archivo con --config.
También busca component-config.yaml, gtool-config.yml y gtool-config.yaml.
gtool test falla si no encuentra un archivo de config.
gtool config validate # strict validation
gtool config show --format yml|yaml|json
gtool generate config # writes a commented sample
Estructura completa
version: v1 # only v1 (the default when omitted)
app-technology: golang # required: golang | generic
app-config:
docker-image: users-api:latest # run the app as a container
port: 8080 # 0-65535, inside the container
host-port: auto # auto | number; omitted = same as port (requires port)
health-path: /health # polled before tests, any status = ready (default /)
environment:
DB_HOST: host.docker.internal
DB_PORT: "${mocks.postgresql.port}" # this run's mock port
test-launcher: test-launcher-back # required; only test-launcher-back
test-config:
features-path: ./test/component/features # required by gtool test; must exist
reports-path: ./test/component/reports
tags: "@smoke"
third-party:
mocks: [postgresql, kafka] # see Mock services
mock-config:
postgresql:
port: auto # any port key (port, *-port) accepts auto
user: postgres
password: postgres
scripts-path: ./test/component/mocks-data/postgresql
orchestration:
parallel-mocks: true
startup-timeout: 180s # must be positive
health-check-interval: 3s # must be positive
health-check-retries: 60 # must be positive
cleanup-on-failure: true
observability:
log-level: info # debug | info | warn | error
stress-config: {} # see Stress testing
Los valores que aparecen en orchestration son los valores por defecto:
parallel-mocksarranca los mocks en paralelo en lugar de uno a uno.startup-timeoutlimita el arranque de las fases, incluida la espera alhealth-pathde la app antes de los tests.health-check-intervalyhealth-check-retriescontrolan el sondeo de disponibilidad de cada mock: un mock que no está listo trasretriescomprobaciones hace fallar el arranque.cleanup-on-failuredetiene los mocks ya arrancados cuando otro falla al arrancar. Confalse, un mock que arrancó pero nunca llegó a estar listo se deja en ejecución para inspeccionarlo (gtool s logs); las ejecuciones canceladas siempre limpian, ygtool testdesmonta todo al final igualmente.
Sin docker-image, gtool test avisa y omite la fase de la app, así que los tests
se ejecutan contra una app que hayas arrancado tú.
Las claves canónicas de credenciales de los mocks son user y password; se
sigue aceptando el alias username de couchbase.
Opciones y valores eliminados
orchestration.preserve-logs, test-config.parallel,
observability.structured-logs, metrics-enabled y report-format ya no
existen. Los archivos antiguos siguen cargando, porque los campos
desconocidos se ignoran en todos los niveles salvo las claves de
mock-config. Los valores minio (mock; usa floci), nodejs (tecnología
de la app) y test-launcher-front (launcher) ahora fallan la validación.
Expansión de variables de entorno
Las referencias ${VAR} y $VAR en los valores se expanden desde el entorno
tras parsear:
- las variables no definidas quedan como están;
- una variable definida pero vacía se expande a
""; $$es un$literal.
Puertos dinámicos y ejecuciones concurrentes
port: autoen cualquier clave de puerto de un mock (port,*-port) yhost-port: autoen la app eligen puertos de host libres por ejecución, así varias ejecuciones degtool testcomparten un host (p. ej. un agente de CI).${mocks.<servicio>.<clave-de-puerto>},${app.port}y${app.host-port}enapp-config.environmentse reemplazan con los valores de la ejecución; los mocks que no fijan puerto exponen el valor por defecto del plugin. Un placeholder desconocido es un error.- Cada ejecución de
gtool test/gtool stressetiqueta y nombra sus contenedores con un run ID (GTOOL_RUN_ID, o uno generado), así el teardown de una nunca toca a otra. ConGTOOL_RUN_IDdefinido, los comandosservicesyappactúan sobre los contenedores de esa ejecución; sin él, solo sobre contenedores sin ejecución;--all-runslos amplía a todas.
auto necesita una sola invocación
auto solo funciona en pipelines de una sola invocación (gtool test,
gtool stress). Los comandos separados services up / app start no
pueden compartir los puertos asignados y lo rechazan; usa puertos
explícitos ahí.
Validación
gtool config validate lista los problemas que encuentra, uno por sección
(versión, app, launcher, mocks, ...); mock-config y stress-config listan todos
sus problemas:
app-technologyytest-launcherson obligatorios, y ellos yversiondeben tener un valor soportado.- Las entradas de
third-party.mocksdeben ser una de:mountebank,couchbase,postgresql,kafka,pubsub,gcs,redis,mongodb,mysql,floci. test-config.features-pathdebe existir cuando está definido;gtool testlo exige (sin features es un error).app-config.health-pathdebe empezar por/;host-portrequiereport.- Las claves desconocidas en
mock-config, los puertos inválidos y dos claves de puerto de un mismo mock en el mismo puerto de host son errores. stress-config, si está presente, se valida por completo; consulta Pruebas de estrés.
Sobrescritura por variables de entorno
| Variable | Sobrescribe |
|---|---|
GTOOL_LOG_LEVEL |
observability.log-level |
GTOOL_RUN_ID |
el run ID que delimita los contenedores de la ejecución |
GTOOL_PARALLEL_MOCKS |
orchestration.parallel-mocks (true/false) |
GTOOL_DOCKER_IMAGE |
app-config.docker-image |
El nivel de log se resuelve como
--log-level > --verbose > GTOOL_LOG_LEVEL > observability.log-level.
build-config.yml
Lo usan gtool unit, gtool app start --native y gtool test --stable: