Forum Discussion

lucym's avatar
lucym
New Contributor
8 years ago

Property Expansions in JSONPath expression in Property Transfer step

Hello SmartBear community

 

I'm new to using SoapUI and have got stuck on trying to use property expansions (for Test Case level parameters) in a Property Transfer step. I want to look up a value returned in a service response using the following JSONPath:

 

$.roles[?(@.service_name=='MyServiceName')].id

 

But I would like to parameterize the step to run for different environments, e.g.

 

$.roles[?(@.service_name=='${#TestCase#ServiceName}')].id

 

This doesn't seem to work - neither does the expression $.roles[?(@.service_name==${#TestCase#ServiceName})].id. I get the error "Array index [Ljava.lang.String;@1b02ce3 not found in path".

 

I have checked the property name is correct by using the same property expansion in my request (where it is expanded correctly), and I've checked my JSONPath expression works with a hard-coded value.

 

Any idea of where I am going wrong here?

 

Thanks
Lucy

  • Hi Lucy,

     

    Property expansions in JSONPath in Property Transfer are supported in Ready! API, but not in the open-source SoapUI. As a workaround you can use XPath instead. Change the source property from Response to ResponseAsXml and use this:

    //*:roles/*[*:service_name='${#TestCase#ServiceName}']/*:id

     

    In Ready! API 2.0, both your examples work if you add [0] at the end:

    $.roles[?(@.service_name=='${#TestCase#ServiceName}')].id[0]
    $.roles[?(@.service_name==${#TestCase#ServiceName})].id[0]
  • HKosova's avatar
    HKosova
    SmartBear Alumni (Retired)

    Hi Lucy,

     

    Property expansions in JSONPath in Property Transfer are supported in Ready! API, but not in the open-source SoapUI. As a workaround you can use XPath instead. Change the source property from Response to ResponseAsXml and use this:

    //*:roles/*[*:service_name='${#TestCase#ServiceName}']/*:id

     

    In Ready! API 2.0, both your examples work if you add [0] at the end:

    $.roles[?(@.service_name=='${#TestCase#ServiceName}')].id[0]
    $.roles[?(@.service_name==${#TestCase#ServiceName})].id[0]
    • lucym's avatar
      lucym
      New Contributor

      Thanks Helen! That worked perfectly.

    • AlexRider's avatar
      AlexRider
      New Contributor

      Hi.

      I tried to translate the line but in return I get "null".
      Current line:
      $[?(@.case_id=='${#Properties_case#case_ids_getClient_rez}')].id[0]
      String after:
      //*[*:case_id='${#Properties_case#case_ids_getClient_rez}']/*:id
      What I doing wrong?

  • nmrao's avatar
    nmrao
    Champion Level 3
    Would you mind showing how the look like?