SOAPUI 4.6.4 Groovy脚本对比JSON响应与文件时遇异常求助
解决SoapUI 4.6.4中Groovy脚本对比JSON响应与本地JSON文件的问题
咱们一步步来解决你碰到的这两个问题哈:
第一个错误:MissingMethodException
你遇到的第一个异常,核心原因是SoapUI 4.6.4配套的Groovy版本里,JsonSlurper并没有parseFile(File, String)这个带编码参数的方法。旧版JsonSlurper的parseFile只能接受单个File对象作为参数,而且对编码的支持有限,所以直接传编码参数就会触发方法不存在的错误。
第二个错误:JsonException(Lexing failed)
当你改用parseText时,犯了一个小错误:你把File对象直接传给了parseText,但parseText需要的是JSON格式的字符串内容,不是文件对象本身。这相当于你在解析"C:\Users\new_2.json"这个字符串(或者File对象的toString结果),这显然不是有效的JSON,所以才会报语法解析失败的错误。
正确的Groovy脚本实现
下面是修正后的脚本,解决了文件读取和编码的问题:
import groovy.json.JsonSlurper import java.io.File import java.nio.charset.StandardCharsets // 获取接口响应的JSON内容并解析 def responseMessage = testRunner.testCase.testSteps["Fi - Request 1"].testRequest.response.contentAsString def jsonResp = new JsonSlurper().parseText(responseMessage) // 读取本地JSON文件(指定UTF-8编码)并解析 def jsonFile = new File("C:/Users/new_2.json") // 先把文件内容读取成UTF-8编码的字符串 def fileContent = jsonFile.getText(StandardCharsets.UTF_8.name()) def inputJSON = new JsonSlurper().parseText(fileContent) // 断言两个JSON对象相等 assert jsonResp.equals(inputJSON), "响应JSON与本地文件JSON内容不一致"
额外注意事项
- 检查JSON文件的语法有效性:你提供的JSON片段结尾有个多余的逗号(
},),如果这是文件的末尾内容,会直接导致JSON语法错误。可以手动检查文件的闭合括号和逗号,确保是标准的JSON格式(如果不方便用在线工具,就逐行核对结构)。 - 解决键顺序导致的断言失败:
equals方法对比JSON对象时会严格检查键的顺序,如果你的响应JSON和本地文件的键顺序不同但内容一致,会触发断言失败。如果需要忽略键顺序,可以把两个JSON转成格式化后的字符串再对比:// 转成格式化字符串后对比(自动统一键顺序) def respFormatted = new groovy.json.JsonBuilder(jsonResp).toPrettyString() def fileFormatted = new groovy.json.JsonBuilder(inputJSON).toPrettyString() assert respFormatted == fileFormatted, "响应JSON与本地文件JSON内容不一致" - 验证文件读取是否正常:如果还是有问题,可以在脚本里加一行日志,查看读取到的文件内容是否正确:
然后在SoapUI的日志面板里查看输出,确认文件内容是否被正确加载。log.info "读取到的本地JSON内容:${fileContent}"
内容的提问来源于stack exchange,提问作者NewToGroovy
相关产品推荐
相关产品推荐

