Instruction file imported from devsecops-space-org/workshop-devsecops-space-1 (
.github/instructions/python-tests.instructions.md). Copyright stays with the author.
Reglas para tests (tests/)
Tests BDD — tests/step_defs/
- Usar
scenarios()para importar escenarios desde el.feature. - Usar
parsers.parsepara parametrización:@given(parsers.parse('...')). - Fixture
client(TestClient) delconftest.py— no instanciar app directamente. - El template NO incluye fixture de cleanup. Crear una
autouseque llame_reset()antes y después de cada test (ver pytest-bdd-patterns skill). - Datatable tipado como
list[list[str]](NOlist[dict]). Acceso:datatable[1:]+fila[0],fila[1]. - Un archivo por dominio:
test_<dominio>_steps.py. - NUNCA modificar archivos
.featureaprobados.
Tests Funcionales — tests/functional/
- Fixtures disponibles en
tests/functional/conftest.py:api_client:httpx.Clientconbase_urlconfigurado.context:dictlimpio por test para compartir estado entre steps.base_url: URL de la API desplegada (vía--base-url).
- Cada
Dadofuncional debe crear o verificar la precondición vía HTTP cuando la API lo permita; no usar steps noop que solo documenten una asunción de entorno. Dadonegativos ("que no existen X") deben limpiar estado: listar recursos (GET), eliminar cada uno (DELETE), verificar vacío. No solo assertar vacío.Dadopositivos ("que existe X") deben ser idempotentes: verificar si ya existe antes de crear (check-before-create).- Si el
.featurefija una fecha, sala u horario exactos, respétalos; no los cambies dinámicamente para hacer pasar el escenario. - Para datos auxiliares no observables por el usuario, usar fechas estables y
lejanas (por ejemplo
2099-06-01para futuro). - Guardar en
contextsolo claves que se leerán en steps o helpers posteriores. - Al probar filtros o parámetros de consulta, validar también el payload retornado; no asumir que el backend aplicó el filtro solo por responder 200.
- NUNCA hardcodear URLs.
- NUNCA modificar
tests/step_defs/,tests/conftest.py, nisrc/. - NO ejecutar los tests localmente (requieren API desplegada).
Convenciones generales
- Type hints en parámetros y retorno.
- Imports: stdlib → third-party → local.
- Line length ≤ 100.
- Sin imports no utilizados. Sin código comentado.