加特林提取xpath值错误“名称空间前缀'soap'尚未声明”

时间:2019-05-09 06:57:57

标签: scala xpath soap gatling

在下面的场景中,我引入了适当的SOAP主体,但是我无法使用xpath expression

提取其值。

我使用此网站形成的路径表达式/*/soap:Body/m:NumberToDollarsResponse/m:NumberToDollarsResult/text() https://codebeautify.org/Xpath-Tester

  val httpConf = http.baseUrl("https://www.dataaccess.com")
  val headerXml = Map("Keep-Alive" -> "115", "Content-Type" -> "application/soap+xml; charset=utf-8")

 val soapXmlScn = scenario("make First Soap Call")
                 .exec(
                   http("Soap API Call With XML")
                   .post("/webservicesserver/numberconversion.wso")
                   .headers(headerXml)
                   .body(StringBody("""<?xml version="1.0" encoding="utf-8"?>
                    <soap20:Envelope xmlns:soap20="http://www.w3.org/2003/05/soap-envelope">
                      <soap20:Body>
                        <NumberToDollars xmlns="http://www.dataaccess.com/webservicesserver/">
                          <dNum>45</dNum>
                        </NumberToDollars>
                      </soap20:Body>
                    </soap20:Envelope>"""))
                   .check(status.is(200))
                   .check(xpath("""//*/soap:Body/m:NumberToDollarsResponse/m:NumberToDollarsResult/text()""").saveAs("doller_value" ))
                 )
                 .exec {
                      session =>
                        println("doller value >>>> " + session("doller_value").as[String].toString)
                        session
                    }

响应正文是

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
  <soap:Body>
    <m:NumberToDollarsResponse xmlns:m="http://www.dataaccess.com/webservicesserver/">
      <m:NumberToDollarsResult>forty five dollars</m:NumberToDollarsResult>
    </m:NumberToDollarsResponse>
  </soap:Body>
</soap:Envelope>

控制台上显示的错误是

12:22:16.880 [ERROR] i.g.c.a.b.SessionHookBuilder$$anon$1 - 'hook-1' crashed with 'j.u.NoSuchElementException: No attribute named 'doller_value' is defined', forwarding to the next one

1 个答案:

答案 0 :(得分:0)

需要为您的List检查提供

命名空间xpath,如下所示,我的请求正常运行。 仅在您的SOAP响应xml中提及这些名称空间URL

.check(xpath("""//soap:Envelope/soap:Body/m:NumberToDollarsResponse/m:NumberToDollarsResult/text()""", List("soap" -> "http://www.w3.org/2003/05/soap-envelope", "m" -> "http://www.dataaccess.com/webservicesserver/")).findAll.saveAs("doller_value" ))