【问题标题】:soapUI groovy script groovy.lang.MissingMethodExceptionsoapUI groovy 脚本 groovy.lang.MissingMethodException
【发布时间】:2018-02-21 16:08:00
【问题描述】:

当我尝试在soapUI 测试步骤中解析响应时收到以下异常。还尝试了getXMLHolder 方法。还是没有运气。

我是否缺少导入或库?

groovy.lang.MissingMethodException:没有方法签名: java.lang.String.getNodeValue() 适用于参数类型: (java.lang.String) 值: [//ConversionRateResponse/ConversionRateResult] 第 16 行错误

def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context);
project = testRunner.getTestCase().getTestSuite().getProject().getWorkspace().getProjectByName("FirstProject")
testSuite = project.getTestSuiteByName("TestSuite 1");
testCase = testSuite.getTestCaseByName("TestCase 1");
testCase.setPropertyValue("fromCurrency","EUR")
testCase.setPropertyValue("toCurrency","TRL")
testStep=testCase.testSteps["SOAP Request1"]

def responseHolder=testStep.getPropertyValue("response");

 def refNum = responseHolder.getNodeValue("//ConversionRateResponse/ConversionRateResult")

并且响应如下

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Body>
      <ConversionRateResponse xmlns="http://www.webserviceX.NET/">
         <ConversionRateResult>-1</ConversionRateResult>
      </ConversionRateResponse>
   </soap:Body>
</soap:Envelope>

【问题讨论】:

  • 你能显示回复吗?
  • 相应地编辑了问题。
  • 提取值后是否需要进一步处理?
  • 该值将保存到 Excel 表中
  • 好的。至少对于原始问题,提供了提取所需数据以及如何断言的解决方案。看看能不能解决。

标签: groovy soapui


【解决方案1】:

您可以将Script Assertion 添加到 Soap 请求测试步骤。

这是脚本:

//Check if the response is not empty
assert context.response, 'Response is empty or null'

def rate = new XmlSlurper().parseText(context.response).'**'.find{it.name() == 'ConversionRateResult'}?.text() as Integer
log.info "Conversion rate result is : $rate "

//Check if the result rate is -1, change if needed
assert -1 == rate

【讨论】:

    【解决方案2】:

    我可以看到您使用了 getNodeValue 但在 String 上是错误的

    如果您看到您的错误,它会显示“没有方法签名:java.lang.String.getNodeValue() 适用于参数类型:(java.lang.String) values

    查看下面的代码,我们在正确的地方使用了 getNodeValue

    def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context);
    def response = groovyUtils.getXmlHolder('SOAP Request#Response')
    def refNum=response.getNodeValue("//*:ConversionRateResponse//*:ConversionRateResult")
    log.info refNum
    

    getNodeValue 是一个非常有用的函数,对从 xml 中提取值有很大帮助,类似地,我们有 getDomNode 用于节点而不是值

    【讨论】:

      猜你喜欢
      • 2010-12-19
      • 1970-01-01
      • 2022-08-18
      • 1970-01-01
      • 2016-08-14
      • 1970-01-01
      • 2023-02-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多