Gatling extract xpath values ​​error «Префикс пространства имен« soap »не был объявлен» - PullRequest
0 голосов
/ 09 мая 2019

В приведенном ниже сценарии показано правильное тело 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 голосов
/ 10 мая 2019

namespace List должно быть предоставлено для вашего xpath чека, как показано ниже, и мой запрос работает нормально. Эти URL-адреса пространства имен упоминаются в вашем SOAP ответе только в формате XML

.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" ))
...