cancel
Showing results for 
Search instead for 
Did you mean: 

how MOCK read request data from attachement

SOLVED
Contributor

how MOCK read request data from attachement

Hello, 

exists some way, how to read this request in ReadyAPI MOCK service? 

My AUT (Application under test) sends text file in POST. I need to return JSON with somem value form the text file.

But how to do that?

 

My RAW request looks like:

POST http://localhost:9000/rest/submit HTTP/1.1
Content-Type: multipart/form-data; boundary="----=_Part_2_1159636768.1573464138308"
MIME-Version: 1.0
Content-Length: 132451
Host: localhost:9000
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.5.2 (Java/1.8.0_181)


------=_Part_2_1159636768.1573464138308
Content-Type: application/octet-stream; name=example1.tdf
Content-Transfer-Encoding: binary
Content-Disposition: form-data; name="example1.tdf"; filename="example1.tdf"

1.01:1431.02:03001.09:MBI20191107151008-IDE-000651.11:00.001.12:00.00

I must extract this string "MBI20191107151008-IDE-00065" from it = each time will have differed value. And then send his value to the AUT in JSON.

 

How to read it? It is even possible in Soapui?

1 ACCEPTED SOLUTION

Accepted Solutions
Highlighted
Community Hero

Re: how MOCK read request data from attachement

Hi,

 

It is even possible in Soapui?

Yes, I believe that this should be possible in SoapUI.

 

But, considering that the question was posted to the ServiceVirtualization board but not to the SoapUI one, this is what I did using ServiceV:

-- For the POST /rest/submit VirtAction I set dispatch style to Script;

-- Pasted this code to the script dispatch window:

def attachments = mockRequest.getRequestAttachments();
//log.info attachments.size();

//def attachmentName = attachments[0].name;
//log.info "Name: $attachmentName";
//log.info "URL: ${attachments[0].url}";
//log.info "Part: ${attachments[0].part}";
//log.info "Encoding: ${attachments[0].contentEncoding}";

def attachmentInputStream = attachments[0].inputStream;

def textValue = new String(attachmentInputStream.bytes, "UTF-8");
//log.info textValue;
context.setProperty("textFileValue", textValue);
/*
// This part of code will save attachment's content to the file
def attachmentContent = attachmentInputStream
def file = new File("D:\\$attachmentName");
file.append(attachmentInputStream);
*/
attachmentInputStream.close();
//log.info context.getProperty("textFileValue").toString();

-- For the response that will be sent as reply I opened Script section (will be on the right after you click on the response name) and entered this code:

import groovy.json.JsonSlurper
import groovy.json.JsonOutput

def textParam = context.getProperty("textFileValue").toString();
def payload = '{ "id" : "' + textParam + '"}';
//log.info(payload);

def json = new JsonSlurper().parseText(payload.toString());
log.info(json);

mockResponse.responseContent = new JsonOutput().toJson(json);

And I got the value from request attachment as a value of the id json entry in response.

You will need to:

a) Write the code that will extract required value from the textFileValue property; and

b) Define the proper json structure for the payload variable.

 

Hope this will help.

 

P.S. In case you need to implement the same approach but in SoapUI, I believe that it will be not a problem to adopt the above code for SoapUI.

 

Regards,
Alex
[Community Expert Group]
____
[Community Expert Group] members 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. Postings made by [Community Expert Group] members
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.
[Community Expert Group] signature is used with permission by SmartBear Software.
http://smartbear.com/forums/f83/t86934/community-experts/
================================

View solution in original post

1 REPLY 1
Highlighted
Community Hero

Re: how MOCK read request data from attachement

Hi,

 

It is even possible in Soapui?

Yes, I believe that this should be possible in SoapUI.

 

But, considering that the question was posted to the ServiceVirtualization board but not to the SoapUI one, this is what I did using ServiceV:

-- For the POST /rest/submit VirtAction I set dispatch style to Script;

-- Pasted this code to the script dispatch window:

def attachments = mockRequest.getRequestAttachments();
//log.info attachments.size();

//def attachmentName = attachments[0].name;
//log.info "Name: $attachmentName";
//log.info "URL: ${attachments[0].url}";
//log.info "Part: ${attachments[0].part}";
//log.info "Encoding: ${attachments[0].contentEncoding}";

def attachmentInputStream = attachments[0].inputStream;

def textValue = new String(attachmentInputStream.bytes, "UTF-8");
//log.info textValue;
context.setProperty("textFileValue", textValue);
/*
// This part of code will save attachment's content to the file
def attachmentContent = attachmentInputStream
def file = new File("D:\\$attachmentName");
file.append(attachmentInputStream);
*/
attachmentInputStream.close();
//log.info context.getProperty("textFileValue").toString();

-- For the response that will be sent as reply I opened Script section (will be on the right after you click on the response name) and entered this code:

import groovy.json.JsonSlurper
import groovy.json.JsonOutput

def textParam = context.getProperty("textFileValue").toString();
def payload = '{ "id" : "' + textParam + '"}';
//log.info(payload);

def json = new JsonSlurper().parseText(payload.toString());
log.info(json);

mockResponse.responseContent = new JsonOutput().toJson(json);

And I got the value from request attachment as a value of the id json entry in response.

You will need to:

a) Write the code that will extract required value from the textFileValue property; and

b) Define the proper json structure for the payload variable.

 

Hope this will help.

 

P.S. In case you need to implement the same approach but in SoapUI, I believe that it will be not a problem to adopt the above code for SoapUI.

 

Regards,
Alex
[Community Expert Group]
____
[Community Expert Group] members 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. Postings made by [Community Expert Group] members
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.
[Community Expert Group] signature is used with permission by SmartBear Software.
http://smartbear.com/forums/f83/t86934/community-experts/
================================

View solution in original post