This is a follow on post about Contract, if you've not read any of the previous posts, this should serve as a good introduction.
Having to specify single contract per file is a little painful, especially if you have a few scenarios to be tested. Lets look at a simple example, imagine I want a contract to verify that an endpoint exists and the correct status code will be returned.
1 2 3 4 5 6 7 8 9 10 11 12 | { "info" : { "details": "The server should return the correct status for an endpoint" }, "request" : { "method" : "GET", "path" : "/service/car" }, "response" : { "status" : 200 } } |
If we wanted to expand on this to include multiple endpoints, we would need to duplicate a lot of configuration. With parameters, we can reuse the same contract multiple times.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | { "info" : { "details": "The server should return the correct status for an endpoint" }, "parameters" : [ { "endpointName" : "car", "expectedStatus": 200 }, { "endpointName" : "jeep", "expectedStatus": 200 }, { "endpointName" : "bicycle", "expectedStatus": 404 }, { "endpointName" : "pedestrian", "expectedStatus": 404 } ], "request" : { "method" : "GET", "path" : "/service/${contract.parameters.endpointName}" }, "response" : { "status" : "${contract.parameters.expectedStatus}" } } |
A client, fed this contract will execute 4 requests, one for each parameter group. A server, fed this contract, will expand it into 4 contracts.
Links:
Google group: https://groups.google.com/forum/#!forum/seekay-contracts
Documentation: http://harmingcola.github.io/contract/