NORTE es una simulación bancaria académica con cuentas, movimientos y transferencias ficticias. Ese dominio ofrece un ejemplo claro para practicar pruebas de integración. Una transferencia correcta requiere que el débito, el abono y el registro del movimiento queden reflejados juntos.
Definir qué debe ocurrir
Una prueba útil parte de un estado inicial conocido. Por ejemplo, dos cuentas de prueba tienen 100 y 20 soles. Al transferir 30 soles, los saldos esperados son 70 y 50 y debe quedar el movimiento correspondiente. Si la solicitud supera el saldo disponible, las dos cuentas deben conservar su saldo y no se debe registrar una transferencia exitosa.
También conviene probar importes inválidos, una cuenta destino inexistente y solicitudes de una persona sin autorización sobre la cuenta de origen. La prueba debe comprobar la respuesta HTTP y el efecto sobre los datos.
Probar a través de Flask
El cliente de pruebas de Flask permite enviar solicitudes sin levantar un servidor. Este fragmento ilustra una API de ejemplo. La ruta, el nombre de los campos y el código de error son decisiones del contrato de esa API.
def test_rechaza_transferencia_sin_saldo(cliente, cuenta_origen, cuenta_destino):
respuesta = cliente.post(
"/api/transferencias",
json={"destino": cuenta_destino.id, "importe_centimos": 15000},
)
assert respuesta.status_code == 409
assert saldo_en_bd(cuenta_origen.id) == 10000
assert saldo_en_bd(cuenta_destino.id) == 2000
El ejemplo envía 150 soles desde una cuenta con 100. El código 409 representa el rechazo previsto por este contrato ilustrativo. Las comprobaciones de saldo detectan cambios parciales aunque la respuesta HTTP sea la esperada.
Incluir fallos y solicitudes simultáneas
Si el abono falla después del débito, la transacción debe revertir el débito. Para reproducirlo, fuerza un error controlado en un entorno de pruebas y vuelve a consultar ambas cuentas. Si dos solicitudes pueden consumir el mismo saldo, prueba también la concurrencia con el mismo motor de base de datos que usaría la aplicación. La transacción agrupa los cambios, pero el resultado concurrente depende de cómo se valida y actualiza el saldo.
Ver el caso de estudio de NORTE