""" NER 服务测试 """ import pytest from fastapi.testclient import TestClient from app.main import app client = TestClient(app) def test_health_check(): """测试健康检查接口""" response = client.get("/health") assert response.status_code == 200 data = response.json() assert data["status"] == "ok" assert "version" in data def test_extract_entities(): """测试实体提取接口""" request_data = { "documentId": "test-doc-001", "text": "2024年5月15日,成都检测公司在成都市高新区完成了环境监测项目的检测工作,使用了噪音检测设备。", "extractRelations": True } response = client.post("/ner/extract", json=request_data) assert response.status_code == 200 data = response.json() assert data["success"] is True assert data["documentId"] == "test-doc-001" assert "entities" in data assert len(data["entities"]) > 0 # 验证提取到的实体类型 entity_types = {e["type"] for e in data["entities"]} assert "DATE" in entity_types or "ORG" in entity_types def test_extract_relations(): """测试关系抽取接口""" request_data = { "documentId": "test-doc-002", "text": "成都检测公司负责环境监测项目", "entities": [ { "name": "成都检测公司", "type": "ORG", "value": "成都检测公司", "position": {"charStart": 0, "charEnd": 6, "line": 1}, "tempId": "e1" }, { "name": "环境监测项目", "type": "PROJECT", "value": "环境监测项目", "position": {"charStart": 8, "charEnd": 14, "line": 1}, "tempId": "e2" } ] } response = client.post("/ner/relations", json=request_data) assert response.status_code == 200 data = response.json() assert data["success"] is True assert "relations" in data def test_empty_text(): """测试空文本""" request_data = { "documentId": "test-doc-003", "text": "", "extractRelations": False } response = client.post("/ner/extract", json=request_data) assert response.status_code == 200 data = response.json() assert data["success"] is True assert len(data["entities"]) == 0 def test_text_too_long(): """测试文本过长""" request_data = { "documentId": "test-doc-004", "text": "a" * 60000, # 超过限制 "extractRelations": False } response = client.post("/ner/extract", json=request_data) assert response.status_code == 400 # 应该返回错误 if __name__ == "__main__": pytest.main([__file__, "-v"])