Forum Discussion

PrathapR's avatar
PrathapR
Frequent Contributor
4 months ago

How to read mock service responses from files

Hi All,

Have a mock service which expects multiple responses depending on the request path parameter (ex: emp id). For this thought to store responses in a folder at project level as JSON files (Ex: 123456.json). 

I did setup mock service in ReadyAPI, when I'm running this project on local (EX: http://localhost:8080/...) it's working fine with expected responses. But when I run this mock service on a virtual server (by drag and drop to server, http://svrt12345.com:8080/....) it's not reading response files. Not getting any error (getting 200 OK) but empty response.

I tried to keep those test data files in Vert server (svrt123456.com:8080) at same location path where my local has (EX: D:/ReadyAPI/Project1/TestData/12345.json).

API Request: /Countries/US/City/NYC/State/NY/EmpId/12345/EmpS/M/EmpSummary
TestDataFile Path:  ProjectDir/TestData/12345.json (12346.json, 12347.json..)
ReadyAPI Version: 3.54.0

Used below script. I tried keeping this script multiple places like OnRequest script or Response Script or Script Dispatch Style but none of them worked.

import groovy.json.JsonSlurper
import java.nio.file.Files
import java.nio.file.Paths
import  com.eviware.soapui.support.*

// Get the request path
def requestPath = mockRequest.getPath()

// Extract path parameters from the request path
def pathSegments = requestPath.tokenize('/')

def empId = pathSegments[7]

// Access the project object
def projectDir = new File(context.mockService.project.path).getParent()

// 2. Define the folder path relative to the project directoryr
def testDataDirectory = new File(projectDir, 'TestData')

// 3. Construct the full path of the JSON file based on the parameter
def jsonFile = new File(testDataDirectory, "${empId}.json")

// 4. Check if the file exists
if (jsonFile.exists()) {
    // 5. Read the file content and return it as the Mock Response
    def jsonContent = jsonFile.text
	
 // 6. Set the JSON content to the mock response
	//  mockResponse.responseContent = jsonContent;
 context.response = jsonContent;

}else {
   // 7. Log an error and return an error response if the file doesn't exist
    log.error("File not found for Route: ${empId}")

}

 

 

 

If anyone has done this before or knowledge, please share your thoughts. TIA.

  • nmrao's avatar
    nmrao
    Champion Level 3

    PrathapR 

    May be the test data directory structure on Virtual Server is not the same form as on Local machine where it is working with ReadyAPI.

    You could add a log statement in the script to display jsonFile.path which will reveal some clue / leads for failure.