跳至内容

故障单 API 测试

本指南以通用的 API 测试 原则为基础,为 Equinix 故障单 API 提供具体的测试方法和示例。

故障单 API 概述

故障单 API 允许客户以编程方式与 Equinix 支持团队进行交互,为各种类别的服务影响问题创建支持工单:

  • Cross Connect问题
  • 网络连接问题
  • 电力相关事件
  • 环境问题
  • 硬件故障
  • 安全事件
  • 托管服务支持

故障单问题类型

故障单 API 支持多种问题类别,每种类别都有特定的问题代码:

Problem CategoryDescriptionExample Codes
Cross ConnectPhysical cable connection issuescc01, cc02, cc03
NetworkNetwork connectivity problemsnet01, net02
EnvironmentHVAC, cooling, environmental issuesenv01, env02, env03, env04
HardwareEquipment and hardware failureshdw01
PowerPower-related incidentspwr01, pwr02
SecuritySecurity access and badge issuessec01, sec02
Managed ServicesManaged service support requestsms01-ms13
SmartViewSmartView monitoring issuessv01-sv05

故障单测试工作流程

在测试故障单 API 之前,请确保您已具备以下条件:

  • 具有故障单权限的 Equinix 开发人员帐户
  • 有效的 API 凭证(客户端 ID 和客户端密钥)
  • 获取合适的IBX地点和笼子
  • 了解API身份验证

创建故障单

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 trouble ticket order
base_url = "https://api.equinix.com"
headers = {
"Authorization": f"Bearer {token}",
"Content-Type": "application/json"
}

# Example: Create a network connectivity trouble ticket
request_payload = {
"customerReferenceNumber": "TT-TEST-001",
"ibxLocation": {
"ibx": "CH1",
"cages": [
{
"cage": "CH1:05:000750",
"accountNumber": "12345",
"cabinets": [
"CH1:05:000750:01"
]
}
]
},
"serviceDetails": {
"incidentDateTime": (datetime.utcnow() - timedelta(hours=1)).isoformat() + "Z",
"problemCode": "net01", # Network connectivity issue
"additionalDetails": "TEST: Network connectivity issue - API testing"
},
"contacts": [
{
"contactType": "ORDERING",
"userName": "test_ordering_user"
},
{
"contactType": "NOTIFICATION",
"userName": "test_notification_user"
},
{
"contactType": "TECHNICAL",
"userName": "test_technical_user",
"workPhone": "555-0123",
"workPhonePrefToCall": "ANYTIME"
}
]
}

create_response = requests.post(
f"{base_url}/v1/orders/troubleticket",
headers=headers,
data=json.dumps(request_payload)
)

# Verify response
assert create_response.status_code == 201, f"Failed to create trouble ticket: {create_response.text}"
order_number = create_response.json()["OrderNumber"]

print(f"Successfully created trouble ticket order: {order_number}")

测试地点和问题类型验证

# Test retrieving available locations
locations_response = requests.get(
f"{base_url}/v1/orders/troubleticket/locations",
headers=headers
)

assert locations_response.status_code == 200, f"Failed to retrieve locations: {locations_response.text}"
locations = locations_response.json()["locations"]

print(f"Available locations: {len(locations)}")

# Test retrieving problem types
types_response = requests.get(
f"{base_url}/v1/orders/troubleticket/types",
headers=headers
)

assert types_response.status_code == 200, f"Failed to retrieve problem types: {types_response.text}"
problem_types = types_response.json()["troubleTicketTypes"]

print(f"Available problem types: {len(problem_types)}")

测试错误场景

务必对 API 实现中的错误处理进行测试:

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"]

# Prepare request
base_url = "https://api.equinix.com"
headers = {
"Authorization": f"Bearer {token}",
"Content-Type": "application/json"
}

# Test with invalid problem code
invalid_payload = {
"customerReferenceNumber": "TT-ERROR-TEST-001",
"ibxLocation": {
"ibx": "CH1",
"cages": [{"cage": "CH1:05:000750", "accountNumber": "12345"}]
},
"serviceDetails": {
"incidentDateTime": (datetime.utcnow() - timedelta(hours=1)).isoformat() + "Z",
"problemCode": "INVALID_CODE", # Invalid problem code
"additionalDetails": "TEST: Invalid problem code test"
},
"contacts": [
{"contactType": "ORDERING", "userName": "test_user"},
{"contactType": "NOTIFICATION", "userName": "test_user"}
]
}

error_response = requests.post(
f"{base_url}/v1/orders/troubleticket",
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 "errors" in error_data, "Error response format not as expected"

print("Successfully validated error handling for invalid problem code")
print(json.dumps(error_data, indent=2))

故障单 API 测试最佳实践

重要提示: Equinix 故障单 API 是一个生产系统,会创建真实的支持工单。请务必遵循以下测试最佳实践,以确保不会产生意外的运维工作。

  1. 设置专用测试账号:如果可以,请申请一个单独的测试账号。
  2. 请使用清晰标记的测试请求:始终在描述前加上“测试:”前缀,以便支持人员识别测试请求。
  3. 请使用有效的事件发生时间:确保事件日期/时间格式正确,且不包含未来时间。
  4. 验证位置访问权限:在创建工单之前,请使用位置端点验证 IBX 位置是否可访问。
  5. 使用有效的错误代码进行测试:始终使用类型端点验证错误代码。
  6. 请提供完整的联系信息:确保提供所有必要的联系方式(订购、通知)。
  7. 清理测试资源:与技术支持人员合作,在创建后立即关闭所有测试工单。
  8. 测试错误处理:验证错误处理和响应代码是否正确

自动化考量

在围绕故障单 API 构建自动化流程时:

  • 实现适当的错误处理和API故障重试机制
  • 构建必填字段和数据格式的验证
  • 包括所有工单创建活动的审计日志记录
  • 确保准确记录并格式化事件发生时间。
  • 提交前请验证位置和问题代码信息。
  • 考虑实施生产工单创建审批工作流程
  • 请提供完整的联系信息,以便更快解决问题。

更多资源

此页面有帮助吗?