the documentation of wiremock says that we can mock a a request that retrieve a file thanks to this code :
{
"request": {
"method": "GET",
"url": "/body-file"
},
"response": {
"status": 200,
"bodyFileName": "path/to/myfile.xml"
}
}
But now I have to find a way to reaaly upload the file other wise I have 500 error on the request.
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/>
<title>Error 500 </title>
</head>
<body>
<h2>HTTP ERROR: 500</h2>
<p>Problem accessing /body-file. Reason:
<pre> java.lang.RuntimeException: java.io.FileNotFoundException: /wiremock-standalone/./__files/path/to/myfile.xml (No such file or directory)</pre>
</p>
<hr />
<i>
<small>Powered by Jetty://</small>
</i>
</body>
Precision : I cannot upload the file directly due to our infrastructure constraints.
Recent Wiremock versions have endpoint to manage stub files (see https://github.com/tomakehurst/wiremock/blob/2.19.0/src/main/java/com/github/tomakehurst/wiremock/admin/AdminRoutes.java#L77)
You can upload a file with a PUT
to /__admin/files/{filename}
. There are stored under ${pwd}/__files
.
A workaround would be to use the "body"
parameter, something like this:
{
{
"request": {
"method": "GET",
"url": "/body-file"
},
"response": {
"status": 200,
"body": "<example><node Id='1' Action='Insert' /></example>"
}
}
(Note the single quotes in '1'
vs. "1"
- you'd need to escape those with \"1\"
.
See http://wiremock.org/docs/stubbing - Specifying the response body section.
If you need JSON payload, it's even nicer with the "jsonBody"
parameter:
{
{
"request": {
"method": "GET",
"url": "/body-file"
},
"response": {
"status": 200,
"jsonBody":
{
"field1": "value1",
"field2" : "value2"
}
}
}
Another nice feature is, quoting:
Stub mappings which have been created can be persisted to the mappings directory via a call to WireMock.saveAllMappings
in Java or posting a request with an empty body to http://<host>:<port>/__admin/mappings/save
.