Ir para o conteúdo principal

Visita de trabalho Teste de API

Este guia fornece abordagens e exemplos de testes específicos para a API de Visitas de Trabalho da Equinix, com base nos princípios gerais de Teste de API.

Visão geral da API de Visitas de Trabalho

A API de Visitas de Trabalho permite agendar e gerenciar programaticamente visitas de trabalho aos data centers Equinix IBX, incluindo:

  • Agendamento de visitas de trabalho por até 14 dias.
  • Gerenciar informações de visitantes e permissões de acesso
  • Atualização de detalhes e contatos da visita de trabalho
  • Requisitos de acesso à gaiola e ao armário de manuseio
  • Gerenciamento de listas de visitantes com usuários registrados e não registrados.

Nota importante: As visitas de trabalho são aplicáveis ​​apenas para visitas com duração de até 14 dias. Visitas de trabalho que excedam 14 dias exigem aprovação de Acesso de Segurança. Este serviço só pode ser agendado por um usuário com permissão para solicitar Serviços de Acesso IBX.

Fluxo de trabalho de teste de visita de trabalho

Antes de testar a API de Visitas de Trabalho, certifique-se de ter:

  • Credenciais de API válidas com permissões para solicitar visitas de trabalho.
  • Acesso às instalações Equinix IBX onde você tem gaiolas.
  • Identificações válidas para os locais de sua visita de trabalho.
  • Compreensão dos requisitos dos visitantes e dos processos de identificação

Como criar um pedido de visita de trabalho

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}")

Como planejar uma visita de trabalho de vários dias

# 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")

Atualizando uma Solicitação de Visita de Trabalho

# 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}")

Testando cenários de erro

Sempre teste o tratamento de erros na implementação da sua 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}"

Melhores práticas para testes de API em visitas de trabalho

  1. Limites de duração das visitas: Certifique-se sempre de que as visitas de trabalho não excedam 14 dias.
  2. Acesso válido à gaiola: Verifique os IDs da gaiola e as permissões da conta antes de realizar o teste.
  3. Informações para visitantes: Teste com visitantes registrados e não registrados.
  4. Validação de Contato: Certifique-se de que as informações de contato e a disponibilidade estejam corretas.
  5. Gerenciamento de fusos horários: Teste com diferentes fusos horários para localidades internacionais.
  6. Acesso ao Armário: Teste com e sem solicitações de abertura do armário.
  7. Tipos de Pedido de Compra: Teste os três tipos de pedido de compra (NOVO, EXISTENTE, ISENTO)
  8. Anexos de Arquivos: Teste o envio de anexos para documentação.
  9. Validação de permissões: Garanta as permissões adequadas para solicitar os Serviços de Acesso IBX.

Considerações sobre automação

Ao criar automações em torno da API de Visitas de Trabalho:

  • Implementar validação para duração máxima de visita de 14 dias.
  • Implementar validação de limite de visitantes (máximo de 50 visitantes não registrados)
  • Inclua um tratamento de erros adequado para problemas de acesso e permissão na gaiola.
  • Implementar receptores de webhook para atualizações de status de visitas de trabalho.
  • Criar registro de auditoria para todas as transações de visitas de trabalho.
  • Verifique se as informações do visitante estão completas antes de criar solicitações.
  • Garantir o correto tratamento dos fusos horários para localidades internacionais.
  • Implementar validação de contato adequada para usuários registrados e não registrados.

Recursos adicionais

Esta página foi útil?