Visita de trabajo Pruebas API
Esta guía proporciona enfoques y ejemplos de pruebas específicas para la API de visitas de trabajo de Equinix, basándose en los principios generales de Pruebas de API.
Visión general de la API de visitas de trabajo
La API de visitas de trabajo le permite programar y gestionar visitas de trabajo a los centros de datos IBX de Equinix, incluyendo:
- Programación de visitas de trabajo de hasta 14 días
- Gestión de la información de los visitantes y de los permisos de acceso
- Actualización de los datos y contactos de la visita de trabajo
- Requisitos de acceso a jaulas y armarios
- Gestión de listas de visitantes con usuarios registrados y no registrados
Nota importante: Las visitas de trabajo sólo son aplicables para visitas de hasta 14 días de duración. Las visitas de trabajo que superen los 14 días requieren en su lugar la aprobación del Acceso de Seguridad. Este servicio sólo puede ser programado por un usuario con permiso de pedido de Servicios de Acceso IBX.
Flujo de trabajo de pruebas de WorkVisit
Antes de probar la API de visitas de trabajo, asegúrese de que dispone de:
- Credenciales API válidas con permisos de pedido de visitas de trabajo
- Acceso a las ubicaciones IBX de Equinix donde tiene jaulas
- Identificaciones de jaula válidas para sus lugares de visita de trabajo
- Comprensión de los requisitos de los visitantes y los procesos de identificación
Creación de una solicitud de visita de trabajo
import requests
import json
from datetime import datetime, timedelta
# Setup authentication
auth_url = "https://api.equinix.com/oauth2/v1/token"
auth_payload = {
"grant_type": "client_credentials",
"client_id": "YOUR_CLIENT_ID",
"client_secret": "YOUR_CLIENT_SECRET"
}
auth_response = requests.post(auth_url, data=auth_payload)
token = auth_response.json()["access_token"]
# Test creating a work visit request
base_url = "https://api.equinix.com/colocations/v2"
headers = {
"Authorization": f"Bearer {token}",
"Content-Type": "application/json"
}
# Calculate visit dates (future dates)
visit_start = (datetime.utcnow() + timedelta(days=3)).isoformat() + "Z"
visit_end = (datetime.utcnow() + timedelta(days=3, hours=8)).isoformat() + "Z"
# Example: Create a work visit request
work_visit_payload = {
"description": "Monthly routine maintenance and equipment inspection",
"customerReferenceId": "WV-REF-12345",
"purchaseOrder": {
"type": "EXISTING",
"number": "PO-789456"
},
"attachments": [
{
"id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"name": "maintenance_checklist.pdf"
}
],
"contacts": [
{
"type": "TECHNICAL",
"registeredUsers": ["tech.admin@example.com"],
"availability": "WORK_HOURS",
"timezone": "America/New_York"
},
{
"type": "NOTIFICATION",
"registeredUsers": ["notifications@example.com"]
}
],
"details": {
"cages": [
{
"id": "SV1:01:001MC3",
"accountNumber": "12345",
"cabinetId": "SV1:01:001MC3:0101"
}
],
"visitStartDateTime": visit_start,
"visitEndDateTime": visit_end,
"openCabinet": True,
"visitors": [
{
"registeredUsers": ["john.doe@example.com"]
},
{
"firstName": "Jane",
"lastName": "Smith",
"companyName": "Acme Corporation",
"details": [
{
"type": "EMAIL",
"value": "jane.smith@acme.com"
},
{
"type": "MOBILE",
"value": "+1-555-123-4567"
}
]
}
]
}
}
create_response = requests.post(
f"{base_url}/orders/workVisits",
headers=headers,
data=json.dumps(work_visit_payload)
)
# Verify response
assert create_response.status_code == 201, f"Failed to create work visit: {create_response.text}"
# Extract order ID from Location header
order_number = create_response.json()["OrderNumber"]
print(f"Successfully created inbound shipment with order ID: {order_number}")
Creación de una visita de trabajo de varios días
# Example: Create a multi-day work visit (up to 14 days)
multi_day_start = (datetime.utcnow() + timedelta(days=5)).isoformat() + "Z"
multi_day_end = (datetime.utcnow() + timedelta(days=12)).isoformat() + "Z"
multi_day_payload = {
"description": "Data center migration project - Phase 1",
"customerReferenceId": "MIGRATION-PHASE1-2025",
"purchaseOrder": {
"type": "NEW",
"number": "PO-MIGRATION-001",
"amount": 5000,
"startDate": "2025-08-01",
"endDate": "2025-12-31"
},
"contacts": [
{
"type": "TECHNICAL",
"registeredUsers": ["migration.lead@example.com"],
"availability": "ANYTIME",
"timezone": "America/Los_Angeles"
}
],
"details": {
"cages": [
{
"id": "LA1:01:002MC5",
"accountNumber": "67890"
},
{
"id": "LA1:01:003MC1",
"accountNumber": "67890"
}
],
"visitStartDateTime": multi_day_start,
"visitEndDateTime": multi_day_end,
"openCabinet": False,
"visitors": [
{
"firstName": "Michael",
"lastName": "Johnson",
"companyName": "Migration Experts Inc",
"details": [
{
"type": "EMAIL",
"value": "mjohnson@migrationexperts.com"
},
{
"type": "MOBILE",
"value": "+1-310-555-9876"
}
]
},
{
"firstName": "Sarah",
"lastName": "Wilson",
"companyName": "Migration Experts Inc",
"details": [
{
"type": "EMAIL",
"value": "swilson@migrationexperts.com"
}
]
}
]
}
}
multi_day_response = requests.post(
f"{base_url}/orders/workVisits",
headers=headers,
data=json.dumps(multi_day_payload)
)
assert multi_day_response.status_code == 201, f"Failed to create multi-day work visit: {multi_day_response.text}"
print("Successfully created multi-day work visit request")
Actualización de una solicitud de visita de trabajo
# Test updating work visit details
if order_id:
# Update work visit with new contact information
update_payload = {
"contacts": [
{
"type": "NOTIFICATION",
"registeredUsers": ["updated.notifications@example.com", "backup.contact@example.com"]
}
],
"details": {
"visitStartDateTime": (datetime.utcnow() + timedelta(days=4)).isoformat() + "Z",
"visitEndDateTime": (datetime.utcnow() + timedelta(days=4, hours=6)).isoformat() + "Z",
"openCabinet": False
}
}
update_response = requests.patch(
f"{base_url}/orders/workVisits/{order_id}",
headers=headers,
data=json.dumps(update_payload)
)
# Verify update response
assert update_response.status_code in [202, 204], f"Failed to update work visit: {update_response.text}"
print(f"Successfully updated work visit {order_id}")
Pruebas de escenarios de error
Pruebe siempre la gestión de errores de su implementación de API:
# Test with missing required fields
invalid_payload = {
"description": "Invalid request test",
"details": {
"visitStartDateTime": visit_start,
"visitEndDateTime": visit_end
# Missing required 'cages' and 'visitors' fields
}
}
error_response = requests.post(
f"{base_url}/orders/workVisits",
headers=headers,
data=json.dumps(invalid_payload)
)
# Verify error response
assert error_response.status_code == 400, f"Expected error but got: {error_response.status_code}"
error_data = error_response.json()
assert any("cages" in error.get("additionalInfo", {}).get("property", "") for error in error_data), "Expected cages validation error"
# Test with invalid visit duration (over 14 days)
long_visit_payload = {
"description": "Invalid long visit test",
"details": {
"cages": [{"id": "SV1:01:001MC3"}],
"visitStartDateTime": visit_start,
"visitEndDateTime": (datetime.utcnow() + timedelta(days=20)).isoformat() + "Z", # Over 14 days
"visitors": [{"registeredUsers": ["test@example.com"]}]
}
}
long_visit_response = requests.post(
f"{base_url}/orders/workVisits",
headers=headers,
data=json.dumps(long_visit_payload)
)
assert long_visit_response.status_code == 400, f"Expected duration validation error but got: {long_visit_response.status_code}"
# Test with invalid cage ID
invalid_cage_payload = {
"description": "Invalid cage test",
"details": {
"cages": [{"id": "INVALID:CAGE:ID"}],
"visitStartDateTime": visit_start,
"visitEndDateTime": visit_end,
"visitors": [{"registeredUsers": ["test@example.com"]}]
}
}
cage_error_response = requests.post(
f"{base_url}/orders/workVisits",
headers=headers,
data=json.dumps(invalid_cage_payload)
)
assert cage_error_response.status_code in [400, 403], f"Expected cage validation error but got: {cage_error_response.status_code}"
Prácticas recomendadas para pruebas de API en visitas de trabajo
- Límites de duración de las visitas: Asegúrese siempre de que las visitas de trabajo no superen los 14 días
- Acceso válido a la jaula: Verifique las identificaciones de las jaulas y los permisos de las cuentas antes de realizar las pruebas
- Información para visitantes: Prueba con visitantes registrados y no registrados
- Validación de contactos: Asegúrese de que la información de contacto y la configuración de disponibilidad son correctas
- Manejo de zonas horarias: Pruebe con distintas zonas horarias para ubicaciones internacionales
- Acceso a armarios: Prueba con y sin solicitud de apertura de armarios
- Tipos de órdenes de compra: Pruebe los tres tipos de pedido (NUEVO, EXISTENTE, EXENTO)
- Archivos adjuntos: Prueba de carga de archivos adjuntos para la documentación
- Validación de permisos: Asegúrese de que los permisos de pedido de los Servicios de Acceso IBX son correctos
Consideraciones sobre automatización
Al construir la automatización en torno a la API de visitas de trabajo:
- Implantar la validación para una duración máxima de la visita de 14 días
- Incorpore la validación del límite de visitantes (50 visitantes no registrados como máximo)
- Incluya una gestión de errores adecuada para los problemas de acceso y permisos de las jaulas
- Implemente receptores webhook para actualizaciones del estado de las visitas de trabajo
- Construya un registro de auditoría para todas las transacciones de visitas de trabajo
- Valide que la información del visitante esté completa antes de crear solicitudes
- Garantice el manejo adecuado de las zonas horarias para ubicaciones internacionales
- Implemente una validación de contactos adecuada tanto para los usuarios registrados como para los no registrados