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?
Solved! Go to Solution.
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.
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.