Ask a Question

Adding additiona query parameters to the request via ServiceV option “Route Non Virtualized Request"

SOLVED
Vib
Occasional Contributor

Adding additiona query parameters to the request via ServiceV option “Route Non Virtualized Request"

We are facing issue with the routing scenario of the ServiceV option “Route Non Virtualized Request”.

As per our requirement once the virtual service receives the request, we have to add an additional query parameter and then route live system.

However, we are seeing the query parameters are getting repeated.

 

Below is the example:

 

Request sent to virtual service: POST http://localhost:8090/oauth2?username=ABCD&password=Test123

 

As per the requirement we have to add this additional parameter: env=ENV1 to query string

 

Therefore while routing the ServiceV should do the routing as http://LIVE HOST:PORT/oauth2?username=ABCD&password=Test123&env=ENV1

 

However, we are seeing double query parameters being sent.

1 ACCEPTED SOLUTION

Accepted Solutions
Vib
Occasional Contributor

Re: Adding additiona query parameters to the request via ServiceV option “Route Non Virtualized Requ

I was able to move ahead by adding the below event 

 

MockRunListener.beforeRoute and added the below script, the routing is working as expected.

method.setURI(URI.create(method.getURI().toString() + "&enviornment=ENV1"))

 

Thanks Temil for providing the solution

View solution in original post

13 REPLIES 13
AlexKaras
Community Hero

Re: Adding additiona query parameters to the request via ServiceV option “Route Non Virtualized Requ

Hi,

 

Could you please clarify:

-- What parameter must be added: validator_id=DEX1 or env=ENV1?

-- "double query parameters being sent" - what does this mean? Can you provide an example/screenshot?

-- Considering that "double query parameters being sent", it looks like you were able to add additional parameter to the request before it is routed. Can you let us know how this was done?

 

Regards,
  /Alex [Community Hero]
____
[Community Heroes] are not employed by SmartBear Software but
are just volunteers who have some experience with the tools by SmartBear Software
and a desire to help others. Posts made by [Community Heroes]
may differ from the official policies of SmartBear Software and should be treated
as the own private opinion of their authors and under no circumstances as an
official answer from SmartBear Software.
The [Community Hero] signature is used with permission by SmartBear Software.
https://community.smartbear.com/t5/custom/page/page-id/hall-of-fame
================================
Vib
Occasional Contributor

Re: Adding additiona query parameters to the request via ServiceV option “Route Non Virtualized Requ

Thanks for response and sorry for the confusion

We are trying to add the add the additional parameter as env=ENV1
The incoming request from the client looks like : http://localhost:8090/oauth2?username=ABCD&password=Test123
The requirement is to add addtional parameter env=ENV1 to the incoming request like : http://localhost:8090/oauth2?username=ABCD&password=Test123&env=ENV1

I tried to add the below script to the Events (however it did not work) and then later I tried to add the same script to the "OnRequest Script" where we are trying to extract the query parameters and then passed query property to the "Route to" option as : https://HOSTNAME?${query}&env=ENV1
Please see the screen-shot.However, it did not work.

def incomingRequest = mockRequest.httpRequest
def path = mockRequest.path
def query = mockRequest.queryString
context.setProperty("query", query)

Below is the error what I see in the http logs :

POST /?scope=full&grant_type=password&username=ABCD&password=Test123&env=ENV1/as/token.oauth2?scope=full&grant_type=password&username=ABCD&password=Test123 HTTP/1.1

I am new to the ReadyAPI ServiceV. If you think this can be achieved by a different method please help with it.screenshot of error.png

AlexKaras
Community Hero

Re: Adding additiona query parameters to the request via ServiceV option “Route Non Virtualized Requ

Hi,

 

Thank you for the detailed description and the screenshot.

It is my current understanding that you need this:

-- If the request to your virtualized service contains /oauth2 in the path then extra parameter must be added to the query string and the request must be routed;

-- Otherwise the request must not be routed.

 

If my above understanding is correct, then I would try to follow the scenario described in this help topic: https://support.smartbear.com/readyapi/docs/servicev/routing/conditional.html

I.e.:

-- Set Route Options for the virtual service to either Route to or Route Non-Virtualized Requests according to what works best for you and as per https://support.smartbear.com/readyapi/docs/servicev/routing/about.html#setting-up-routing description;

-- For the required request, set Routing Options to Conditional;

-- Enter this code into the Routing Options script code window that will appear on the right:

if (! mockRequest.path.contains('/oauth2'))
  return false; // do not route the request

mockRequest.queryString += '&env=ENV1';
log.info 'DEBUG: Modified query string - ' + mockRequest.queryString;
return true; // route the request

Does this help?

 

Regards,
  /Alex [Community Hero]
____
[Community Heroes] are not employed by SmartBear Software but
are just volunteers who have some experience with the tools by SmartBear Software
and a desire to help others. Posts made by [Community Heroes]
may differ from the official policies of SmartBear Software and should be treated
as the own private opinion of their authors and under no circumstances as an
official answer from SmartBear Software.
The [Community Hero] signature is used with permission by SmartBear Software.
https://community.smartbear.com/t5/custom/page/page-id/hall-of-fame
================================
Vib
Occasional Contributor

Re: Adding additiona query parameters to the request via ServiceV option “Route Non Virtualized Requ

Hi Alex,

 

Thanks for your response. I tried the solution provided by you. However I see that the addtional paratmeter is not getting added. Even in the script log the logs is not getting generated. Looks like it is not invoking the script. Please see the attached screenshot.

 

Below is the HTTP log.

 

Mon Nov 25 10:12:26 CST 2019: DEBUG: http-outgoing >>
POST /as/oauth2 HTTP/1.1
Authorization: Basic dnhsVjVWbXpXeEhWWlRW
Accept: */*
Cache-Control: no-cache
User-Agent: PostmanRuntime/7.20.1
Connection: keep-alive
Postman-Token: 2672d906-2c71-4f45-bfeb-3533e526deed
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 76
Host: HOSTNAME
Cookie: PF=vczZKrzF0BnzGeLv7Wbgax

scope=full&grant_type=password&username=ABCD&password=Test123

Mon Nov 25 10:12:26 CST 2019: DEBUG: http-incoming <<
HTTP/1.1 200 OK
Date: Mon, 25 Nov 2019 16:12:26 GMT
X-Frame-Options: SAMEORIGIN
Referrer-Policy: origin
Cache-Control: no-cache, no-store
Pragma: no-cache
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Content-Type: application/json;charset=utf-8
Transfer-Encoding: chunked

57
DEFAULT RESPONSE
0

AlexKaras
Community Hero

Re: Adding additiona query parameters to the request via ServiceV option “Route Non Virtualized Requ

Hi,

 

Thank you for the screenshots.

I think (I am not a ServiceV guru) that the script is not called because of the Route Non-Virtualized Request setting been set in the Route Options combo-box. (Though I am not 100% sure that I got description from the documentation right.)

 

What I would try is:

a) Add something like this as the first script line:

log.info 'DEBUG: Inside the script';

Just to check if the script is called at all;

b) Try to change the Route Non-Virtualized Request setting to Route to one and check if it changes something.

 

P.S. You may check not only the Script Log, but also the Error Log one - sometimes the latter contains script errors while the former remains empty.

 

Regards,
  /Alex [Community Hero]
____
[Community Heroes] are not employed by SmartBear Software but
are just volunteers who have some experience with the tools by SmartBear Software
and a desire to help others. Posts made by [Community Heroes]
may differ from the official policies of SmartBear Software and should be treated
as the own private opinion of their authors and under no circumstances as an
official answer from SmartBear Software.
The [Community Hero] signature is used with permission by SmartBear Software.
https://community.smartbear.com/t5/custom/page/page-id/hall-of-fame
================================
Vib
Occasional Contributor

Re: Adding additiona query parameters to the request via ServiceV option “Route Non Virtualized Requ

Hi Alex,

 

Thank you for your response.

I have tried the options which you have suggested however, its not working as expected.

There are no error logs getting generated as well.

 

Thanks,

Vibhash

AlexKaras
Community Hero

Re: Adding additiona query parameters to the request via ServiceV option “Route Non Virtualized Requ

Hi Vibhash,

 

There are no error logs getting generated as well.

And there is no record in the script log generated by the

log.info 'DEBUG: Inside the script';

line either. Is this correct?

 

I see this as either some mis-configuration of virtual web service or incorrect call of it.

Try to check the HTTP Log (and Transaction Log on the web service configuration page). The log should contain raw request - maybe you will see something wrong there.

Also, can you try to send the same request that you are sending from Postman but using ReadyAPI means (APIs node of your ReadyAPI project)? I would try this as well. If the call from ReadyAPI passes (at least there will be debug message in the script log) than this will mean that attention should be paid to Postman.

 

@sonya_m : Sonya, could you please draw attention of someone from your team to this thread? Hopefully, your guys will spot some obvious thing that we are missing...

 

Regards,
  /Alex [Community Hero]
____
[Community Heroes] are not employed by SmartBear Software but
are just volunteers who have some experience with the tools by SmartBear Software
and a desire to help others. Posts made by [Community Heroes]
may differ from the official policies of SmartBear Software and should be treated
as the own private opinion of their authors and under no circumstances as an
official answer from SmartBear Software.
The [Community Hero] signature is used with permission by SmartBear Software.
https://community.smartbear.com/t5/custom/page/page-id/hall-of-fame
================================
Vib
Occasional Contributor

Re: Adding additiona query parameters to the request via ServiceV option “Route Non Virtualized Requ

Hi Alex,

 

I tried to execute the same request from ReadyAPI and I see the same behavior as I was seeing from POSTMAN.

The additional parameter is not getting appended while routing the request to LIVE system. Even the transcationlog only shows the parameters which I am passing intially. The additional parameter is not getting appended.

 

Once again thank you for looking into it.

TSanchez_1
Moderator

Re: Adding additiona query parameters to the request via ServiceV option “Route Non Virtualized Requ

You can try to set "Route to" value to property expansion and then change it in your script. For example you can set "Route to" is set to ${#MockService#route_endpoint}, and then you can add to your script:

Temil Sanchez
Ready API Product Owner
cancel
Showing results for 
Search instead for 
Did you mean: