Как удалить SOAP Необязательные элементы в запросе - PullRequest
0 голосов
/ 07 июня 2018

Используя каратэ, я бы хотел создать запрос на мыло.В запросе SOAP есть Необязательные элементы, как их удалить, основываясь на набросках сценария: Пример?

Поделились примером для обсуждения.Если уже есть пример кода, пожалуйста, поделитесь, спасибо.

Feature: SOAP request to get Customer Details

  Background:
    Given url 'http://localhost:8080/CustomerService_V2_Ws'

  Scenario Outline:
    * def removeElement =
    """
     function(parameters, inputXml) {
         if (parameters.city = null)
             karate.remove(inputXml, '/Envelope/Header/AutHeader/ClientContext/city');
         if (parameters.zipcode = null)
             karate.remove(inputXml, '/Envelope/Header/AutHeader/ClientContext/zipcode');
         return inputXml;
     }
    """
    * def inputXml = read('soap-request.xml')
    * def updatedXml = removeElement(parameters,inputXml)
    Given request updatedXml
    When soap action ''
    Then status <http_code>

    Examples:
      | CustomerId | ZipCode | City     |
      | 001        | null    | null     |
      | 002        | 41235   | null     |
      | 003        | null    | New York |


**Contents of "soap-request.xml"**
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Header>
      <wsc1:AutHeader xmlns:wsc1="http://example.com/ws/WSCommon_v22">
         <wsc1:SourceApplication>ABC</wsc1:SourceApplication>
         <wsc1:DestinationApplication>SoapUI</wsc1:DestinationApplication>
         <wsc1:Function>CustomerService.readDetails</wsc1:Function>
         <wsc1:Version>2</wsc1:Version>
         <wsc1:ClientContext>
            <wsc1:customerid>10000</wsc1:customerid>
            <!--Optional:-->
            <wsc1:zipcode>11111</wsc1:zipcode>
            <!--Optional:-->
            <wsc1:city>xyz</wsc1:city>
         </wsc1:ClientContext>
      </wsc1:AutHeader>
   </soapenv:Header>
   <soapenv:Body />
</soapenv:Envelope>

1 Ответ

0 голосов
/ 07 июня 2018

Да, я предлагаю использовать встроенные выражения .Когда перед выражением ставится 2 знака хеша, это «удалит, если ноль», которое было разработано для вашего точного варианта использования.Вот пример:

Scenario: set / remove xml chunks using embedded expressions
* def phone = '123456'
# this will remove the <acc:phoneNumberSearchOption> element
* def searchOption = null
* def search = 
"""
<acc:getAccountByPhoneNumber>
    <acc:phoneNumber>#(phone)</acc:phoneNumber>
    <acc:phoneNumberSearchOption>##(searchOption)</acc:phoneNumberSearchOption>        
</acc:getAccountByPhoneNumber>
"""
* match search ==
"""
<acc:getAccountByPhoneNumber>
    <acc:phoneNumber>123456</acc:phoneNumber>
</acc:getAccountByPhoneNumber>
"""

Обратите внимание, что здесь есть еще много примеров: xml.feature

...