Updated Stubbing and Request Matching (markdown)

Stef Heyenrath
2018-06-25 19:55:53 +02:00
parent 0bc1ad2da1
commit f5faab808d
+133 -8
@@ -51,11 +51,68 @@ WireMock supports matching of requests to stubs and verification queries using t
* Cookies * Cookies
* Request Body * Request Body
### JSON (JsonMatcher)
Checks if a JSON object is DeepEqual.
### JSON Path #### C#
```csharp
var server = FluentMockServer.Start();
server
.Given(Request
.Create()
.WithPath("/jsonmatcher")
.WithBody(new JsonMatcher("{ \"x\": 42, \"s\": \"s\" }"))
.UsingPost())
.WithGuid("debaf408-3b23-4c04-9d18-ef1c020e79f2")
.RespondWith(Response.Create().WithBody(@"{ ""result"": ""jsonbodytest"" }"));
```
#### JSON Mapping
``` js
{
"Guid": "debaf408-3b23-4c04-9d18-ef1c020e79f2",
"Request": {
"Path": {
"Matchers": [
{
"Name": "WildcardMatcher",
"Pattern": "/jsonbodytest",
"IgnoreCase": false
}
]
},
"Methods": [
"post"
],
"Body": {
"Matcher": {
"Name": "JsonMatcher",
"Pattern": "{ \"x\": 42, \"s\": \"s\" }"
}
}
},
"Response": {
"StatusCode": 200,
"Body": "{ \"result\": \"jsonbodytest\" }",
"UseTransformer": false
}
}
```
```
// matching
{ "x": 1, "s": "s" }
// not matching
{ "x": 2, "s": "x" }
```
### JSON Path (JsonPathMatcher)
Deems a match if the attribute value is valid JSON and matches the JSON Path expression supplied. Deems a match if the attribute value is valid JSON and matches the JSON Path expression supplied.
A JSON body will be considered to match a path expression if the expression returns either a non-null single value (string, integer etc.), or a non-empty object or array. A JSON body will be considered to match a path expression if the expression returns either a non-null single value (string, integer etc.), or a non-empty object or array.
#### C#
```csharp ```csharp
var server = FluentMockServer.Start(); var server = FluentMockServer.Start();
server server
@@ -66,6 +123,39 @@ server
.RespondWith(Response.Create().WithBody("Hello")); .RespondWith(Response.Create().WithBody("Hello"));
``` ```
#### JSON Mapping
``` js
{
"Guid": "e4a600b8-9d6f-453f-90c6-3db2b0885ddb",
"Request": {
"Path": {
"Matchers": [
{
"Name": "WildcardMatcher",
"Pattern": "/jsonpath",
"IgnoreCase": false
}
]
},
"Methods": [
"put"
],
"Body": {
"Matcher": {
"Name": "JsonPathMatcher",
"Pattern": "$.things[?(@.name == 'RequiredThing')]"
}
}
},
"Response": {
"StatusCode": 200,
"BodyDestination": "SameAsSource",
"Body": "{ \"result\": \"JsonPathMatcher !!!\"}",
"UseTransformer": false
}
}
```
``` ```
// matching // matching
{ "things": { "name": "RequiredThing" } } { "things": { "name": "RequiredThing" } }
@@ -80,14 +170,49 @@ Deems a match if the attribute value is valid XML and matches the XPath expressi
An XML document will be considered to match if any elements are returned by the XPath evaluation. An XML document will be considered to match if any elements are returned by the XPath evaluation.
WireMock delegates to [XPath2.Net](https://github.com/StefH/XPath2.Net), therefore it support up to XPath version 2.0. WireMock delegates to [XPath2.Net](https://github.com/StefH/XPath2.Net), therefore it support up to XPath version 2.0.
#### C#
```csharp ```csharp
var server = FluentMockServer.Start(); var server = FluentMockServer.Start();
server server
.Given( .Given(Request.Create()
Request.Create().WithPath("/some/thing").UsingGet() .WithPath("/xpath").UsingPost()
.WithBody(new XPathMatcher("/todo-list[count(todo-item) = 3]")); .WithBody(new XPathMatcher("/todo-list[count(todo-item) = 3]"))
) )
.RespondWith(Response.WithBody("Hello")); .RespondWith(Response.Create().WithBody("XPathMatcher!"));
```
#### JSON Mapping
``` js
{
"Guid": "abc5848e-cedd-42ad-8f58-4ba6df01180f",
"Priority": 0,
"Request": {
"Path": {
"Matchers": [
{
"Name": "WildcardMatcher",
"Pattern": "/xpath",
"IgnoreCase": false
}
]
},
"Methods": [
"post"
],
"Body": {
"Matcher": {
"Name": "XPathMatcher",
"Pattern": "/todo-list[count(todo-item) = 3]"
}
}
},
"Response": {
"StatusCode": 200,
"BodyDestination": "SameAsSource",
"Body": "XPathMatcher!",
"UseTransformer": false
}
}
``` ```
Will match xml below: Will match xml below:
@@ -106,10 +231,10 @@ The RegexMatcher can be used to match using a regular expression.
var server = FluentMockServer.Start(); var server = FluentMockServer.Start();
server server
.Given( .Given(
Request.Create().WithPath("/reg").UsingGet() Request.Create().WithPath("/reg").UsingPost()
.WithBody(new RegexMatcher("H.*o")); .WithBody(new RegexMatcher("H.*o"));
) )
.RespondWith(Response.WithBody("Hello matched with RegexMatcher")); .RespondWith(Response.Create().WithBody("Hello matched with RegexMatcher"));
``` ```
``` ```
@@ -131,7 +256,7 @@ server
Request.Create().WithPath("/reg").UsingGet() Request.Create().WithPath("/reg").UsingGet()
.WithBody(new SimMetricsMatcher("The cat walks in the street.")); .WithBody(new SimMetricsMatcher("The cat walks in the street."));
) )
.RespondWith(Response.WithBody("Matched with SimMetricsMatcher")); .RespondWith(Response.Create().WithBody("Matched with SimMetricsMatcher"));
``` ```
``` ```