test_ner_e2e.sh 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. #!/bin/bash
  2. # NER 服务端到端测试脚本
  3. # 测试流程:NER 服务健康检查 -> 实体提取 -> 关系抽取 -> 文档 NER
  4. set -e
  5. # 配置
  6. NER_SERVICE_URL="${NER_SERVICE_URL:-http://localhost:8001}"
  7. JAVA_SERVICE_URL="${JAVA_SERVICE_URL:-http://localhost:5232}"
  8. echo "=========================================="
  9. echo "NER 服务端到端测试"
  10. echo "=========================================="
  11. echo "NER 服务地址: $NER_SERVICE_URL"
  12. echo "Java 服务地址: $JAVA_SERVICE_URL"
  13. echo ""
  14. # 测试 1: Python NER 服务健康检查
  15. echo ">> 测试 1: Python NER 服务健康检查"
  16. response=$(curl -s -X GET "$NER_SERVICE_URL/health")
  17. echo "响应: $response"
  18. if echo "$response" | grep -q '"status":"ok"'; then
  19. echo "✅ Python NER 服务健康检查通过"
  20. else
  21. echo "❌ Python NER 服务健康检查失败"
  22. exit 1
  23. fi
  24. echo ""
  25. # 测试 2: 实体提取
  26. echo ">> 测试 2: 实体提取"
  27. response=$(curl -s -X POST "$NER_SERVICE_URL/ner/extract" \
  28. -H "Content-Type: application/json" \
  29. -d '{
  30. "documentId": "test-doc-001",
  31. "text": "2024年5月15日,成都检测公司在成都市高新区完成了环境监测项目的检测工作,项目负责人张经理使用了噪音检测设备进行测量,测量结果显示噪音值为50分贝。",
  32. "extractRelations": true
  33. }')
  34. echo "响应: $response"
  35. if echo "$response" | grep -q '"success":true'; then
  36. entity_count=$(echo "$response" | grep -o '"entityCount":[0-9]*' | grep -o '[0-9]*')
  37. relation_count=$(echo "$response" | grep -o '"relationCount":[0-9]*' | grep -o '[0-9]*')
  38. echo "✅ 实体提取成功: entityCount=$entity_count, relationCount=$relation_count"
  39. else
  40. echo "❌ 实体提取失败"
  41. exit 1
  42. fi
  43. echo ""
  44. # 测试 3: 关系抽取
  45. echo ">> 测试 3: 关系抽取"
  46. response=$(curl -s -X POST "$NER_SERVICE_URL/ner/relations" \
  47. -H "Content-Type: application/json" \
  48. -d '{
  49. "documentId": "test-doc-002",
  50. "text": "成都检测公司负责环境监测项目",
  51. "entities": [
  52. {
  53. "name": "成都检测公司",
  54. "type": "ORG",
  55. "value": "成都检测公司",
  56. "position": {"charStart": 0, "charEnd": 6, "line": 1},
  57. "tempId": "e1"
  58. },
  59. {
  60. "name": "环境监测项目",
  61. "type": "PROJECT",
  62. "value": "环境监测项目",
  63. "position": {"charStart": 8, "charEnd": 14, "line": 1},
  64. "tempId": "e2"
  65. }
  66. ]
  67. }')
  68. echo "响应: $response"
  69. if echo "$response" | grep -q '"success":true'; then
  70. echo "✅ 关系抽取成功"
  71. else
  72. echo "❌ 关系抽取失败"
  73. exit 1
  74. fi
  75. echo ""
  76. # 测试 4: Java NER 服务健康检查(如果 Java 服务已启动)
  77. echo ">> 测试 4: Java 服务健康检查"
  78. if curl -s -f "$JAVA_SERVICE_URL/actuator/health" > /dev/null 2>&1; then
  79. response=$(curl -s "$JAVA_SERVICE_URL/actuator/health")
  80. echo "响应: $response"
  81. echo "✅ Java 服务健康检查通过"
  82. # 测试 5: 通过 Java 服务调用 NER
  83. echo ""
  84. echo ">> 测试 5: 通过 Java 服务调用 NER"
  85. response=$(curl -s -X POST "$JAVA_SERVICE_URL/api/ner/extract" \
  86. -H "Content-Type: application/json" \
  87. -d '{
  88. "documentId": "test-doc-003",
  89. "text": "2024年6月1日,湖北环保局在武汉市武昌区开展了水质检测工作。"
  90. }')
  91. echo "响应: $response"
  92. if echo "$response" | grep -q '"code":200'; then
  93. echo "✅ 通过 Java 服务调用 NER 成功"
  94. else
  95. echo "⚠️ 通过 Java 服务调用 NER 可能失败(请检查日志)"
  96. fi
  97. else
  98. echo "⚠️ Java 服务未启动,跳过 Java 服务测试"
  99. fi
  100. echo ""
  101. echo "=========================================="
  102. echo "测试完成!"
  103. echo "=========================================="