Forum Discussion

Toananas's avatar
Toananas
Occasional Contributor
4 years ago
Solved

Property Transfer Conditional

Hi guys, 

 

I'd like to perform a conditional Property Transfer from one response to the next request. I need to select the first DefCategoriesDispo with the StatutDispo on true and send the CatCode associated to the next request.

 

Here the response : 

 

<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>
<GetAllDispoSurAgenceV2Response xmlns="http://www.hitech.fr/">
    <GetAllDispoSurAgenceV2Result>


<DefCategoriesDispo>
    <CatId>7</CatId>
    <CatCode>A</CatCode>
    <StatutDispo>false</StatutDispo>
</DefCategoriesDispo>


<DefCategoriesDispo>
    <CatId>8</CatId>
    <CatCode>B</CatCode>
    <StatutDispo>true</StatutDispo>
</DefCategoriesDispo>


<DefCategoriesDispo>
    <CatId>9</CatId>
    <CatCode>C</CatCode>
    <StatutDispo>false</StatutDispo>
</DefCategoriesDispo>


</GetAllDispoSurAgenceV2Result>
</GetAllDispoSurAgenceV2Response>
</soap:Body>
</soap:Envelope>

 

 

Can someone help me please ? 

 

Thanks !

  • nmrao's avatar
    nmrao
    4 years ago

    Toananas 

    For the first request (where you get the response and need to extract the data), add a script assertion with following snippet

     

    assert context.response, 'Response is empty or null'
    //Get DefCategoriesDispo first match with StatutDispo is true
    def catDispo = new XmlSlurper().parseText(context.response).'**'.find {it.name() == 'DefCategoriesDispo' && it.StatutDispo == true}
    
    //Extract data and save them into custom properties
    context.testCase.setPropertyValue('CATID', catDispo.CatId.text())
    context.testCase.setPropertyValue('CATCODE', catDispo.CatCode.text())

    In the next step where ever CatId, CatCode are needed

    use ${#TestCase#CATID}, ${#TestCase#CATCODE} respectively

     

    You can apply the same logic to the rest of the fields.

     

    Say for eg:

    <hit:Categ>${#TestCase#CATID}</hit:Categ>

     

  • nmrao's avatar
    nmrao
    4 years ago
    Sorry didn't check in detail. Thought you posted the solution using existing one.

    You got a trivial error. enclose O between single quotes like 'O'

15 Replies

  • nmrao's avatar
    nmrao
    Champion Level 3
    But there are multiple matches. What do you want to do when more than one match?
    Sample request of next step where you need those values?
    • Toananas's avatar
      Toananas
      Occasional Contributor

      Hi Rao, then so select the first response with "True" or to select one of them randomly. 

      The selected CodeCat goes to <hit:Categ>?</hit:Categ>

      Sure  : 

       

      s<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:hit="http://www.hitech.fr/">
         <soapenv:Header/>
         <soapenv:Body>
            <hit:GetDispoSurAgence>
               <hit:CodeOrigine>?</hit:CodeOrigine>
               <hit:CodeAgence>?</hit:CodeAgence>
               <hit:Categ>?</hit:Categ>
               <hit:Depart>?</hit:Depart>
               <hit:Retour>?</hit:Retour>
            </hit:GetDispoSurAgence>
         </soapenv:Body>
      </soapenv:Envelope>

       

      • nmrao's avatar
        nmrao
        Champion Level 3

        Toananas 

        For the first request (where you get the response and need to extract the data), add a script assertion with following snippet

         

        assert context.response, 'Response is empty or null'
        //Get DefCategoriesDispo first match with StatutDispo is true
        def catDispo = new XmlSlurper().parseText(context.response).'**'.find {it.name() == 'DefCategoriesDispo' && it.StatutDispo == true}
        
        //Extract data and save them into custom properties
        context.testCase.setPropertyValue('CATID', catDispo.CatId.text())
        context.testCase.setPropertyValue('CATCODE', catDispo.CatCode.text())

        In the next step where ever CatId, CatCode are needed

        use ${#TestCase#CATID}, ${#TestCase#CATCODE} respectively

         

        You can apply the same logic to the rest of the fields.

         

        Say for eg:

        <hit:Categ>${#TestCase#CATID}</hit:Categ>