You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Karate框架中通过对比JSON API验证PDF生成API?

在Karate里验证PDF API和JSON API响应一致性的正确姿势

先纠正个思路问题

直接把PDF和JSON转成字符串硬比对大概率踩坑——PDF转文本时容易带多余的换行、空格,甚至格式乱码,明明内容一致却验证失败。靠谱的做法是把PDF解析成结构化数据(比如JSON或Map),再和JSON API的响应做结构化对比。

一步步实现

1. 复用已有的Feature拿响应

你已经写了PDF和JSON API的Feature,直接在对比验证的Feature里用call调用就行,省得重复写请求逻辑:

Feature: 对比PDF与JSON API的响应验证

  Background:
    * def jsonApiResult = call('classpath:你的json-api.feature')
    * def pdfApiResult = call('classpath:你的pdf-api.feature')

2. 把PDF解析成结构化数据

Karate自带PDF解析工具,用karate.extractPdfText()先把PDF里的文本抠出来,再转成JSON结构——如果PDF里本身就是JSON格式的内容,直接转就行;要是是表格或普通文本,得先清洗再转成对应结构:

Scenario: 验证内容一致性
    # 提取PDF所有文本
    * def pdfRawText = karate.extractPdfText(pdfApiResult.response)
    # 假设PDF里是标准JSON,直接转成JSON对象
    * def pdfStructuredData = karate.fromString(pdfRawText)
    # 要是非JSON文本,先清洗掉多余空格换行再转,比如:
    # * def cleanedPdfText = pdfRawText.replaceAll('\\s+', ' ').trim()
    # * def pdfStructuredData = { content: cleanedPdfText }

3. 用Karate的match做灵活比对

Karate的match功能很强,支持完全比对、部分字段比对、忽略动态字段:

# 完全一致比对
    * match pdfStructuredData == jsonApiResult.response

    # 只比对核心字段(比如id、名称这些关键信息)
    * match pdfStructuredData contains { id: jsonApiResult.response.id, title: jsonApiResult.response.title }

    # 跳过动态生成的字段(比如时间戳、生成ID)
    * match pdfStructuredData == jsonApiResult.response exclude ['timestamp', 'requestId']

4. 处理特殊格式差异

如果PDF和JSON里的日期、数字格式不一样,先转成统一格式再比对:

# 比如PDF里日期是dd/mm/yyyy,JSON是yyyy-mm-dd
    * def pdfNormalizedDate = pdfStructuredData.date.replace('/', '-')
    * match pdfNormalizedDate == jsonApiResult.response.date

非要用字符串比对?那就先洗干净再比

如果你铁了心要转字符串比对,必须先把两者的格式统一,干掉无关差异:

Scenario: 字符串比对(凑合用版)
    * def jsonText = karate.toString(jsonApiResult.response)
    * def pdfText = karate.extractPdfText(pdfApiResult.response)
    # 去掉所有空格、换行,转成小写,消除格式差异
    * def cleanedJson = jsonText.replaceAll('\\s+', '').toLowerCase()
    * def cleanedPdf = pdfText.replaceAll('\\s+', '').toLowerCase()
    * match cleanedJson == cleanedPdf

内容的提问来源于stack exchange,提问作者impend

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 23:07:54