Back to Paddleocr

PaddleOCR API SDK 集成测试报告

TEST_REPORT.md

3.7.04.6 KB
Original Source

PaddleOCR API SDK 集成测试报告

测试分支: feature/api-sdk (PR #18049)
测试环境: macOS Darwin 24.3.0, Python 3.9.6, requests 2.32.5
API Endpoint: https://paddleocr.aistudio-app.com/api/v2/ocr/jobs


测试结果总览

#测试项                结果 耗时说明                       
1OCR URL (PP-OCRv5)          ✅ PASS3.6sURL 输入,默认参数                
2OCR URL + 自定义 Options       ✅ PASS3.6s设置 use_doc_orientation_classify=True      
3Doc Parsing URL (PP-StructureV3)   ✅ PASS3.7s文档版面解析                   
4Submit + Poll 分步调用        ✅ PASS3.7s非阻塞 API:submit → get_result → wait_for_result
5OCR 本地文件上传           ✅ PASS4.3sfile_path 模式                  
6错误处理 (无效 token)        ✅ PASS0.2s正确抛出 AuthError                
7输入校验               ✅ PASS0.0s缺少输入 / 互斥参数均正确拦截          
8Context Manager (with)        ✅ PASS3.6swith 语句正常工作                
9PaddleOCR-VL 模型          ✅ PASS3.6sVL 模型正常返回 markdown             
10PaddleOCR-VL-1.5 模型        ✅ PASS3.6sVL-1.5 模型正常返回 markdown           
11Doc Parsing 文件上传 (PP-StructureV3)✅ PASS4.3s本地文件上传 + 文档解析             

总计: 11 passed, 0 failed


发现的 Bug(已修复验证)

🔴 阻塞性 Bug: fetch_jsonl 请求 BOS 签名 URL 时携带了多余的 Authorization header

文件: paddleocr/_api_client/_http.py (同步) + async_client.py (异步)

现象: 任务提交和轮询均成功,但在最后一步下载 JSONL 结果文件时,SDK 使用带有 Authorization: bearer <paddle_token> 的 session 去请求百度 BOS 对象存储的预签名 URL。BOS 不认识这个 header,返回 400 Bad Request。

根因: HTTPClient.fetch_jsonl() 使用 self._session.get(url) 发起请求,而 session 在初始化时设置了 Authorization header。BOS 的预签名 URL 已经包含了自己的鉴权参数(authorization=bce-auth-v1/...),额外的 Authorization header 导致冲突。

修复: fetch_jsonl 应使用不带 auth header 的独立请求:

python
# 修复前
resp = self._session.get(url, timeout=self._timeout)

# 修复后
resp = requests.get(url, timeout=self._timeout)

影响范围: 所有实际 API 调用(OCR、Doc Parsing、所有模型)在修复前均无法获取结果。这是一个 必须在合入前修复的阻塞性 bug


其他已知问题(非阻塞,可后续迭代)

严重度语言问题
PythonAsyncAPIClient._poll_until_done 使用硬编码 DEFAULT_MAX_WAIT_TIME,忽略用户设置的 timeout
GosubmitURL/submitFile/getJobStatus 未使用 http.NewRequestWithContext,context 取消无法中断 HTTP 请求
TypeScriptpoller.ts 的 sleep 方法 abort listener 未设置 { once: true },长轮询会泄漏 listener
TypeScripthttp.ts 的 fetchJsonl 未检查 resp.ok(同样的 BOS auth 问题可能也存在于 TS SDK)
全部轮询循环先 sleep 再 check,对已完成任务多等 3 秒
PythonCLI argparse 的 store_true 传 False 而非 None,导致多余字段发送给 API

结论

修复 fetch_jsonl 的 auth header 问题后,Python SDK 的核心功能全部正常工作。 4 个模型(PP-OCRv5、PP-StructureV3、PaddleOCR-VL、PaddleOCR-VL-1.5)均可正常调用,URL 输入和文件上传两种模式均可用,错误处理和输入校验逻辑正确。

建议:

  1. ⚠️ 合入前必须修复 fetch_jsonl 的 BOS auth header bug(Python 同步 + 异步,以及 Go/TypeScript SDK 中的同类问题)
  2. 其他问题可以合入后迭代修复