Оцените выражение, которое возвращает логическое значение в Wiremock - критерии соответствия запроса

Попытка использовать Wiremock в качестве инструмента для виртуализации сервисов SOAP.

Критерии сопоставления запросов выглядят примерно так:

Критерии сопоставления:

   {
      "request":{
        "method":"POST",
        "urlPattern":"/myServices/mycontent.asgx",
        "headers":{
          "SOAPAction":{
            "contains":"#SearchMyContent"
          }
        },
        "bodyPatterns":[{
          **"matchesXPath":"//data:MyContentItemCode[contains(text(), 'SD_12345')] and //MyContentItemCode[contains(text(), 'SD_22222')]",**
          "xPathNamespaces":{
            "SOAP-ENV": "http://schemas.xmlsoap.org/soap/envelope/",
            "data":"http://www.ins.com/insi/1.0/insi-data",
            "msg":"http://www.ins.com/insi/1.0/insi-messaging",
            "nc":"http://www.ins.com/insi/1.0/insi-non-compliant",
            "soapenv":"http://schemas.xmlsoap.org/soap/envelope/",
            "srvc":"http://www.ins.com/insi/1.0/insi-services"
        }
        }]
      },
      "response":{
        "status":200,
        "headers":{
          "Content-Type":"text/xml;charset=utf-8"
        },
        "body":"encoded_XML_body"
      }
    } 

По соображениям безопасности я не могу опубликовать здесь весь запрос службы SOAP, но ниже приведен небольшой фрагмент из службы SOAP, который должен быть сопоставлен с xpath в критериях сопоставления.

<srvc:MyContentItemCodeList>
    <data:MyContentItemCode>SD_12345</data:MyContentItemCode>
    <data:MyContentItemCode>SD_22222</data:MyContentItemCode>
</srvc:MyContentItemCodeList>

Как видите, я пытаюсь сопоставить оба тега «data: MyContentItemCode» в моих критериях сопоставления. Однако Wiremock не распознает / не поддерживает это. Это могло быть потому, что xpath возвращает логическое значение. Мои вопросы: есть ли способ сопоставления логических значений в Wiremock.

Я не нашел здесь примера в документации Wiremock: - http://wiremock.org/docs/request-matching/

Когда я отправляю сопоставления на сервер Wiremock, он успешно публикуется, но когда я пытаюсь попасть на сервер Wiremock, я не получаю обратно свой виртуализированный ответ (т. Е. Сопоставление запросов не рассматривается)

Любая помощь / указатели по этому поводу будут оценены.


person Monnie_tester    schedule 25.10.2018    source источник


Ответы (1)


Проблема, с которой вы столкнулись, заключается в том, что вам нужно вернуть элемент / тег в сопоставитель. Это можно сделать с помощью корневого тега. В этом примере я использовал тег «мыльный конверт», на который указывает ваш пример.

Механизм возврата только корневого элемента заключается в подсчете количества элементов, соответствующих вашим критериям. Если оба верны, то также возвращается корневой элемент. Пример ниже делает именно это.

mapping.json

   {
      "request":{
        "method":"POST",
        "urlPattern":"/dtag",
        "bodyPatterns":[{
          "matchesXPath":"/SOAP-ENV:Envelope[count(//data:MyContentItemCode[contains(text(), 'SD_12345')])=1 and count(//data:MyContentItemCode[contains(text(), 'SD_22222')] )=1]",
          "xPathNamespaces":{
            "SOAP-ENV": "http://schemas.xmlsoap.org/soap/envelope/",
            "data":"http://www.ins.com/insi/1.0/insi-data",
            "srvc":"http://www.ins.com/insi/1.0/insi-services"
        }       

        }]
      },
      "response":{
        "status":200,
        "headers":{
          "Content-Type":"text/xml;charset=utf-8"
        },
        "body":"encoded_XML_body"
      }
    } 

Приведенный ниже XML-код отправляется через запрос POST по указанному ниже URL-адресу. Поскольку WireMock довольно разборчив в отношении пространств имен, убедитесь, что у вас есть правильные пространства имен, связанные с тегами в том виде, в каком они появляются в вашем запросе.

Запрос к http://localhost/dtag

<?xml version="1.0"?>

<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
soap:encodingStyle="http://www.w3.org/2003/05/soap-encoding"
xmlns:data="http://www.ins.com/insi/1.0/insi-data"
xmlns:srvc="http://www.ins.com/insi/1.0/insi-services">
    <srvc:MyContentItemCodeList >
    <data:MyContentItemCode>SD_12345</data:MyContentItemCode>
    <data:MyContentItemCode>SD_22222</data:MyContentItemCode>
    </srvc:MyContentItemCodeList>
</soap:Envelope>
person A. Kootstra    schedule 28.10.2018
comment
Спасибо, что ответили на мой вопрос. Это сработало для меня. Ценить это - person Monnie_tester; 06.11.2018