Latest commit

History

78 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

RestAssured.Net

A simple testing suite for REST based interfaces. The goal is to provide a tool that is simple to use and produces repeatable results.

Download

Nuget

Nuget RestAssured.Net Info

PM> Install-Package RestAssured

Example

Response

{
"ip":"2605:6000:f705:ab00:78e3:1959:78d4:bd76",
"about":"/about",
"Pro!":"http://getjsonip.com"
}

Test

//Create a new test suitenewRestAssured().Given()//Optional, set the name of this suite.Name("JsonIP Test Suite")//Optional, set the header parameters. //Defaults will be set to application/json if none is given.Header("Content-Type","application/json").Header("Accept-Encoding","gzip,deflate").When()//url.Get("http://jsonip.com").Then()//Give the name of the test and a lambda expression to test with//The lambda expression keys off of 'x' which represents the json blob as a dynamic..TestBody("test a", x =>x.about!=null)//Throw an AssertException if the test case is false..Assert("test a");

Structure

The call chains are structured around 4 main parts.

  1. Newing up RestAssured gives you a chainable object to work with
  2. All commands under Given() are setup procedures - Setup Headers - Setup Parameters - Setup Host and Uri Information
  3. All commands under When() are used for configuration the call environment - eg: GET vs POST
  4. All commands under Then() are used for setting up test rules and assertions

Commands

Given

.Given()//Set up the name for a test suite.Name("string")//Set up Http Header//eg: "Accept-Encoding", "gzip, deflate".Header("string","string")//Add query string parameters for any HTTP verb.Query("string","string")//Add parameters for the body of the request if it is POST, PUT or DELETE.Param("string","string")//Allows for a string content such as JSON or XML. Used for POST, PUT and DELETE. The body is overriden if Param() is used.Body("string")//Allows for an object to be serialized to JSON or XML. Used for POST, PUT and DELETE. The body is overriden if Param() is used.Body<T>(Tobject)//Add a file as part of the request. Doing so will convert the body to a multipart/form request. Used for POST, PUT and DELETE//eg: "file name", "file", "image/jpeg", File.ReadAllBytes("pathtofile").File("string","string","string",byte[])//Set the host of the target server//Useful when you want to reuse a test suite between multiple Uris.Host("string")//Set the uri for the target endpoint.Uri("string")//Sets a different port in the request url//e.g. localhost:5000.Port(int)//allows you to use a different http client //e.g. when you are using testserver.HttpClient("httpClient")// sets the default protocol to https instead of http.UseHttps()//Debug the settings.Debug()

When

.When()//Add a load test to the mix. Set the # of threads and # of secs to run.Load(int,int)//Use the GET verb with a url. This will override the above section..Get("string")//Use the GET verb without and rely on url settings from Given() section.Get()//Use the POST verb with a url. This will override the above section..Post("string")//Use the POST verb without and rely on the url settings from Given() section..Post()//Use the PUT verb with a url. This will override the above section..Put("string")//Use the PUT verb without and rely on the url settings from Given() section..Put()//Use the DELETE verb with a url. This will override the above section..Delete("string")//Use the DELETE verb without and rely on the url settings from Given() section..Delete()//Debug the settings.Debug()

Then

.Then()//Write a test to make an assertion against the response body//The response body is the json blob that is returned from a REST call//eg: "test A", x => x.id != null.TestBody("string",Func<dynamic,bool>)//Write a test to make an assertion against the response header//eg: "test B", "content-type", x => x.Contains("json").TestHeader("string","string",Func<string,bool>)//Write a test to make an assertion against the RTT (elasped round trip time) for the call.//eg: "test C", x => x < 1000).TestElaspedTime("string",Func<double,bool>)//Write a test to make an assertion against load test results. Refer to the Reference section below for complete list of keys.//eg: "test D1", "average-ttl-ms", x => x < 1000 && x > 0//eg: "test D2", "total-call", x => x >= 234.TestLoad("string","string",Func<double,bool>)//Write a test to make an assertion against the response status code//eg: "test E", x => x == 200.TestStatus("string",Func<int,bool>)//Assert your test. Failed test will throw an AssertException.Assert("string")//Apply a v3 or v4 json schema to the response. Corrupted schemas will throw an ArgumentException.Schema("string")//Assert your schema against the response. Failed test will throw an AssertException.AssertSchema()//Assert all your test. Failed test will throw an AssertException.AssertAll()//Output all of the test results.WriteAssertions()//Retrieve a value from the response body//eg: x => x.id.Retrieve(Func<dynamic,object>)//Debug the response.Debug()

##Reference

###Keys for TestLoad() Command There are predefined keys for these test.

total-call
total-succeeded
total-lost
average-ttl-ms
maximum-ttl-ms
minimum-ttl-ms

###Request Body The request body type is dynamically determined based on the types of input specified. Here is the strategy for the body construct.

  1. If File is present, create multipart/form
  2. If Param is present, create urlencoded/form
  3. Default to contents in Body.

JSON Schema Support

ResAssured leverages Newtonsoft.Json for its JSON parsing and JSON schema validation support.
Newtonsoft.Json on supports draft 3 and draft 4 of the JSON scheam specification, so we can too!

Utilize these tools to validate your JSON schema

v3 Schema Validator

v4 Schema Validator

More Examples

Breaking up a call chain

//Create a new test suitevarendpoint1=newRestAssured().Given()//Optional, set the name of this suite.Name("JsonIP Test Suite")//Optional, set the header parameters. //Defaults will be set to application/json if none is given.Header("Content-Type","application/json").Header("Accept-Encoding","gzip,deflate");.Host("jsonip.com").Uri("/endpoint1");//Make a copy of the settings from above, but adjust the endpoint.varendpoint2=endpoint1.Given().Clone().Uri("/endpoint2");//Do a GET action with the first endpoint configurationendpoint2.Given().When().Get().Then().TestBody("test 1", x =>x.id!=null).Assert("test 1");//Do a POST action with the second endpoint configurationendpoint2.Given().When().Post().Then().TestBody("test 1", x =>x.id!=null).Assert("test 1");

Load Test

newRestAssured().Given().Name("JsonIP multi thread").When()//Configure a load test with//6 threads that runs for 30 seconds.Load(6,30)//Using this address.Get("http://yourremote.com").Then()//Assert Load Test and Print Results.Debug().TestLoad("good-average","average-ttl-ms", x =>x>100&&x<400).Assert("good-average");

Using Body

newRestAssured().Given().Name("Using body #1").Header("Content-Type","application/json").Body("{ 'id' : 'fuzzywuzzy', 'address' : { 'street1' : '123 Main St', 'city' : 'Brooklyn'}}").When().Post("http://yourremote.com").Then().Debug()
varbody=new{id="fuzzywuzzy",address=new{street1="123 Main St",city="Brooklyn"}};newRestAssured().Given().Name("Using body #2").Header("Content-Type","application/json").Body(body).When().Post("http://yourremote.com").Then().Debug()

Using File

newRestAssured().Given().Name("Uploading a file").Param("id","some identifier")//First parameter is your file name//Second parameter is the name associated to the section of content in the multipart/form//Default to the name "file"//Third parameter describes the content type that is being added in the byte array//Fourth parameter the byte array of content.File("fileName","file","images/jpeg",File.ReadAllBytes(@"c:\path\to\image")).When().Post("http://yourremote.com").Then().Debug()

Retrieving an object

Value returned from http://yourremote.com

{id : 12345,detail : {name : 'stuff'}}

The follow code from the above response value will set id to 12345

varid=newRestAssured().Given().Name("Retrieve an item in the document").When().Get("http://yourremote.com").Then().Retrieve(x =>x.id);

About

A simple testing suite for REST based interfaces

Resources

Stars

118 stars

Watchers

13 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

78 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

RestAssured.Net

A simple testing suite for REST based interfaces. The goal is to provide a tool that is simple to use and produces repeatable results.

Download

Nuget

Nuget RestAssured.Net Info

PM> Install-Package RestAssured

Example

Response

{
"ip":"2605:6000:f705:ab00:78e3:1959:78d4:bd76",
"about":"/about",
"Pro!":"http://getjsonip.com"
}

Test

//Create a new test suitenewRestAssured().Given()//Optional, set the name of this suite.Name("JsonIP Test Suite")//Optional, set the header parameters. //Defaults will be set to application/json if none is given.Header("Content-Type","application/json").Header("Accept-Encoding","gzip,deflate").When()//url.Get("http://jsonip.com").Then()//Give the name of the test and a lambda expression to test with//The lambda expression keys off of 'x' which represents the json blob as a dynamic..TestBody("test a", x =>x.about!=null)//Throw an AssertException if the test case is false..Assert("test a");

Structure

The call chains are structured around 4 main parts.

  1. Newing up RestAssured gives you a chainable object to work with
  2. All commands under Given() are setup procedures - Setup Headers - Setup Parameters - Setup Host and Uri Information
  3. All commands under When() are used for configuration the call environment - eg: GET vs POST
  4. All commands under Then() are used for setting up test rules and assertions

Commands

Given

.Given()//Set up the name for a test suite.Name("string")//Set up Http Header//eg: "Accept-Encoding", "gzip, deflate".Header("string","string")//Add query string parameters for any HTTP verb.Query("string","string")//Add parameters for the body of the request if it is POST, PUT or DELETE.Param("string","string")//Allows for a string content such as JSON or XML. Used for POST, PUT and DELETE. The body is overriden if Param() is used.Body("string")//Allows for an object to be serialized to JSON or XML. Used for POST, PUT and DELETE. The body is overriden if Param() is used.Body<T>(Tobject)//Add a file as part of the request. Doing so will convert the body to a multipart/form request. Used for POST, PUT and DELETE//eg: "file name", "file", "image/jpeg", File.ReadAllBytes("pathtofile").File("string","string","string",byte[])//Set the host of the target server//Useful when you want to reuse a test suite between multiple Uris.Host("string")//Set the uri for the target endpoint.Uri("string")//Sets a different port in the request url//e.g. localhost:5000.Port(int)//allows you to use a different http client //e.g. when you are using testserver.HttpClient("httpClient")// sets the default protocol to https instead of http.UseHttps()//Debug the settings.Debug()

When

.When()//Add a load test to the mix. Set the # of threads and # of secs to run.Load(int,int)//Use the GET verb with a url. This will override the above section..Get("string")//Use the GET verb without and rely on url settings from Given() section.Get()//Use the POST verb with a url. This will override the above section..Post("string")//Use the POST verb without and rely on the url settings from Given() section..Post()//Use the PUT verb with a url. This will override the above section..Put("string")//Use the PUT verb without and rely on the url settings from Given() section..Put()//Use the DELETE verb with a url. This will override the above section..Delete("string")//Use the DELETE verb without and rely on the url settings from Given() section..Delete()//Debug the settings.Debug()

Then

.Then()//Write a test to make an assertion against the response body//The response body is the json blob that is returned from a REST call//eg: "test A", x => x.id != null.TestBody("string",Func<dynamic,bool>)//Write a test to make an assertion against the response header//eg: "test B", "content-type", x => x.Contains("json").TestHeader("string","string",Func<string,bool>)//Write a test to make an assertion against the RTT (elasped round trip time) for the call.//eg: "test C", x => x < 1000).TestElaspedTime("string",Func<double,bool>)//Write a test to make an assertion against load test results. Refer to the Reference section below for complete list of keys.//eg: "test D1", "average-ttl-ms", x => x < 1000 && x > 0//eg: "test D2", "total-call", x => x >= 234.TestLoad("string","string",Func<double,bool>)//Write a test to make an assertion against the response status code//eg: "test E", x => x == 200.TestStatus("string",Func<int,bool>)//Assert your test. Failed test will throw an AssertException.Assert("string")//Apply a v3 or v4 json schema to the response. Corrupted schemas will throw an ArgumentException.Schema("string")//Assert your schema against the response. Failed test will throw an AssertException.AssertSchema()//Assert all your test. Failed test will throw an AssertException.AssertAll()//Output all of the test results.WriteAssertions()//Retrieve a value from the response body//eg: x => x.id.Retrieve(Func<dynamic,object>)//Debug the response.Debug()

##Reference

###Keys for TestLoad() Command There are predefined keys for these test.

total-call
total-succeeded
total-lost
average-ttl-ms
maximum-ttl-ms
minimum-ttl-ms

###Request Body The request body type is dynamically determined based on the types of input specified. Here is the strategy for the body construct.

  1. If File is present, create multipart/form
  2. If Param is present, create urlencoded/form
  3. Default to contents in Body.

JSON Schema Support

ResAssured leverages Newtonsoft.Json for its JSON parsing and JSON schema validation support.
Newtonsoft.Json on supports draft 3 and draft 4 of the JSON scheam specification, so we can too!

Utilize these tools to validate your JSON schema

v3 Schema Validator

v4 Schema Validator

More Examples

Breaking up a call chain

//Create a new test suitevarendpoint1=newRestAssured().Given()//Optional, set the name of this suite.Name("JsonIP Test Suite")//Optional, set the header parameters. //Defaults will be set to application/json if none is given.Header("Content-Type","application/json").Header("Accept-Encoding","gzip,deflate");.Host("jsonip.com").Uri("/endpoint1");//Make a copy of the settings from above, but adjust the endpoint.varendpoint2=endpoint1.Given().Clone().Uri("/endpoint2");//Do a GET action with the first endpoint configurationendpoint2.Given().When().Get().Then().TestBody("test 1", x =>x.id!=null).Assert("test 1");//Do a POST action with the second endpoint configurationendpoint2.Given().When().Post().Then().TestBody("test 1", x =>x.id!=null).Assert("test 1");

Load Test

newRestAssured().Given().Name("JsonIP multi thread").When()//Configure a load test with//6 threads that runs for 30 seconds.Load(6,30)//Using this address.Get("http://yourremote.com").Then()//Assert Load Test and Print Results.Debug().TestLoad("good-average","average-ttl-ms", x =>x>100&&x<400).Assert("good-average");

Using Body

newRestAssured().Given().Name("Using body #1").Header("Content-Type","application/json").Body("{ 'id' : 'fuzzywuzzy', 'address' : { 'street1' : '123 Main St', 'city' : 'Brooklyn'}}").When().Post("http://yourremote.com").Then().Debug()
varbody=new{id="fuzzywuzzy",address=new{street1="123 Main St",city="Brooklyn"}};newRestAssured().Given().Name("Using body #2").Header("Content-Type","application/json").Body(body).When().Post("http://yourremote.com").Then().Debug()

Using File

newRestAssured().Given().Name("Uploading a file").Param("id","some identifier")//First parameter is your file name//Second parameter is the name associated to the section of content in the multipart/form//Default to the name "file"//Third parameter describes the content type that is being added in the byte array//Fourth parameter the byte array of content.File("fileName","file","images/jpeg",File.ReadAllBytes(@"c:\path\to\image")).When().Post("http://yourremote.com").Then().Debug()

Retrieving an object

Value returned from http://yourremote.com

{id : 12345,detail : {name : 'stuff'}}

The follow code from the above response value will set id to 12345

varid=newRestAssured().Given().Name("Retrieve an item in the document").When().Get("http://yourremote.com").Then().Retrieve(x =>x.id);

About

A simple testing suite for REST based interfaces

Resources

Stars

118 stars

Watchers

13 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

78 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

RestAssured.Net

A simple testing suite for REST based interfaces. The goal is to provide a tool that is simple to use and produces repeatable results.

Download

Nuget

Nuget RestAssured.Net Info

PM> Install-Package RestAssured

Example

Response

{
"ip":"2605:6000:f705:ab00:78e3:1959:78d4:bd76",
"about":"/about",
"Pro!":"http://getjsonip.com"
}

Test

//Create a new test suitenewRestAssured().Given()//Optional, set the name of this suite.Name("JsonIP Test Suite")//Optional, set the header parameters. //Defaults will be set to application/json if none is given.Header("Content-Type","application/json").Header("Accept-Encoding","gzip,deflate").When()//url.Get("http://jsonip.com").Then()//Give the name of the test and a lambda expression to test with//The lambda expression keys off of 'x' which represents the json blob as a dynamic..TestBody("test a", x =>x.about!=null)//Throw an AssertException if the test case is false..Assert("test a");

Structure

The call chains are structured around 4 main parts.

  1. Newing up RestAssured gives you a chainable object to work with
  2. All commands under Given() are setup procedures - Setup Headers - Setup Parameters - Setup Host and Uri Information
  3. All commands under When() are used for configuration the call environment - eg: GET vs POST
  4. All commands under Then() are used for setting up test rules and assertions

Commands

Given

.Given()//Set up the name for a test suite.Name("string")//Set up Http Header//eg: "Accept-Encoding", "gzip, deflate".Header("string","string")//Add query string parameters for any HTTP verb.Query("string","string")//Add parameters for the body of the request if it is POST, PUT or DELETE.Param("string","string")//Allows for a string content such as JSON or XML. Used for POST, PUT and DELETE. The body is overriden if Param() is used.Body("string")//Allows for an object to be serialized to JSON or XML. Used for POST, PUT and DELETE. The body is overriden if Param() is used.Body<T>(Tobject)//Add a file as part of the request. Doing so will convert the body to a multipart/form request. Used for POST, PUT and DELETE//eg: "file name", "file", "image/jpeg", File.ReadAllBytes("pathtofile").File("string","string","string",byte[])//Set the host of the target server//Useful when you want to reuse a test suite between multiple Uris.Host("string")//Set the uri for the target endpoint.Uri("string")//Sets a different port in the request url//e.g. localhost:5000.Port(int)//allows you to use a different http client //e.g. when you are using testserver.HttpClient("httpClient")// sets the default protocol to https instead of http.UseHttps()//Debug the settings.Debug()

When

.When()//Add a load test to the mix. Set the # of threads and # of secs to run.Load(int,int)//Use the GET verb with a url. This will override the above section..Get("string")//Use the GET verb without and rely on url settings from Given() section.Get()//Use the POST verb with a url. This will override the above section..Post("string")//Use the POST verb without and rely on the url settings from Given() section..Post()//Use the PUT verb with a url. This will override the above section..Put("string")//Use the PUT verb without and rely on the url settings from Given() section..Put()//Use the DELETE verb with a url. This will override the above section..Delete("string")//Use the DELETE verb without and rely on the url settings from Given() section..Delete()//Debug the settings.Debug()

Then

.Then()//Write a test to make an assertion against the response body//The response body is the json blob that is returned from a REST call//eg: "test A", x => x.id != null.TestBody("string",Func<dynamic,bool>)//Write a test to make an assertion against the response header//eg: "test B", "content-type", x => x.Contains("json").TestHeader("string","string",Func<string,bool>)//Write a test to make an assertion against the RTT (elasped round trip time) for the call.//eg: "test C", x => x < 1000).TestElaspedTime("string",Func<double,bool>)//Write a test to make an assertion against load test results. Refer to the Reference section below for complete list of keys.//eg: "test D1", "average-ttl-ms", x => x < 1000 && x > 0//eg: "test D2", "total-call", x => x >= 234.TestLoad("string","string",Func<double,bool>)//Write a test to make an assertion against the response status code//eg: "test E", x => x == 200.TestStatus("string",Func<int,bool>)//Assert your test. Failed test will throw an AssertException.Assert("string")//Apply a v3 or v4 json schema to the response. Corrupted schemas will throw an ArgumentException.Schema("string")//Assert your schema against the response. Failed test will throw an AssertException.AssertSchema()//Assert all your test. Failed test will throw an AssertException.AssertAll()//Output all of the test results.WriteAssertions()//Retrieve a value from the response body//eg: x => x.id.Retrieve(Func<dynamic,object>)//Debug the response.Debug()

##Reference

###Keys for TestLoad() Command There are predefined keys for these test.

total-call
total-succeeded
total-lost
average-ttl-ms
maximum-ttl-ms
minimum-ttl-ms

###Request Body The request body type is dynamically determined based on the types of input specified. Here is the strategy for the body construct.

  1. If File is present, create multipart/form
  2. If Param is present, create urlencoded/form
  3. Default to contents in Body.

JSON Schema Support

ResAssured leverages Newtonsoft.Json for its JSON parsing and JSON schema validation support.
Newtonsoft.Json on supports draft 3 and draft 4 of the JSON scheam specification, so we can too!

Utilize these tools to validate your JSON schema

v3 Schema Validator

v4 Schema Validator

More Examples

Breaking up a call chain

//Create a new test suitevarendpoint1=newRestAssured().Given()//Optional, set the name of this suite.Name("JsonIP Test Suite")//Optional, set the header parameters. //Defaults will be set to application/json if none is given.Header("Content-Type","application/json").Header("Accept-Encoding","gzip,deflate");.Host("jsonip.com").Uri("/endpoint1");//Make a copy of the settings from above, but adjust the endpoint.varendpoint2=endpoint1.Given().Clone().Uri("/endpoint2");//Do a GET action with the first endpoint configurationendpoint2.Given().When().Get().Then().TestBody("test 1", x =>x.id!=null).Assert("test 1");//Do a POST action with the second endpoint configurationendpoint2.Given().When().Post().Then().TestBody("test 1", x =>x.id!=null).Assert("test 1");

Load Test

newRestAssured().Given().Name("JsonIP multi thread").When()//Configure a load test with//6 threads that runs for 30 seconds.Load(6,30)//Using this address.Get("http://yourremote.com").Then()//Assert Load Test and Print Results.Debug().TestLoad("good-average","average-ttl-ms", x =>x>100&&x<400).Assert("good-average");

Using Body

newRestAssured().Given().Name("Using body #1").Header("Content-Type","application/json").Body("{ 'id' : 'fuzzywuzzy', 'address' : { 'street1' : '123 Main St', 'city' : 'Brooklyn'}}").When().Post("http://yourremote.com").Then().Debug()
varbody=new{id="fuzzywuzzy",address=new{street1="123 Main St",city="Brooklyn"}};newRestAssured().Given().Name("Using body #2").Header("Content-Type","application/json").Body(body).When().Post("http://yourremote.com").Then().Debug()

Using File

newRestAssured().Given().Name("Uploading a file").Param("id","some identifier")//First parameter is your file name//Second parameter is the name associated to the section of content in the multipart/form//Default to the name "file"//Third parameter describes the content type that is being added in the byte array//Fourth parameter the byte array of content.File("fileName","file","images/jpeg",File.ReadAllBytes(@"c:\path\to\image")).When().Post("http://yourremote.com").Then().Debug()

Retrieving an object

Value returned from http://yourremote.com

{id : 12345,detail : {name : 'stuff'}}

The follow code from the above response value will set id to 12345

varid=newRestAssured().Given().Name("Retrieve an item in the document").When().Get("http://yourremote.com").Then().Retrieve(x =>x.id);

About

A simple testing suite for REST based interfaces

Resources

Stars

118 stars

Watchers

13 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

78 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

RestAssured.Net

A simple testing suite for REST based interfaces. The goal is to provide a tool that is simple to use and produces repeatable results.

Download

Nuget

Nuget RestAssured.Net Info

PM> Install-Package RestAssured

Example

Response

{
"ip":"2605:6000:f705:ab00:78e3:1959:78d4:bd76",
"about":"/about",
"Pro!":"http://getjsonip.com"
}

Test

//Create a new test suitenewRestAssured().Given()//Optional, set the name of this suite.Name("JsonIP Test Suite")//Optional, set the header parameters. //Defaults will be set to application/json if none is given.Header("Content-Type","application/json").Header("Accept-Encoding","gzip,deflate").When()//url.Get("http://jsonip.com").Then()//Give the name of the test and a lambda expression to test with//The lambda expression keys off of 'x' which represents the json blob as a dynamic..TestBody("test a", x =>x.about!=null)//Throw an AssertException if the test case is false..Assert("test a");

Structure

The call chains are structured around 4 main parts.

  1. Newing up RestAssured gives you a chainable object to work with
  2. All commands under Given() are setup procedures - Setup Headers - Setup Parameters - Setup Host and Uri Information
  3. All commands under When() are used for configuration the call environment - eg: GET vs POST
  4. All commands under Then() are used for setting up test rules and assertions

Commands

Given

.Given()//Set up the name for a test suite.Name("string")//Set up Http Header//eg: "Accept-Encoding", "gzip, deflate".Header("string","string")//Add query string parameters for any HTTP verb.Query("string","string")//Add parameters for the body of the request if it is POST, PUT or DELETE.Param("string","string")//Allows for a string content such as JSON or XML. Used for POST, PUT and DELETE. The body is overriden if Param() is used.Body("string")//Allows for an object to be serialized to JSON or XML. Used for POST, PUT and DELETE. The body is overriden if Param() is used.Body<T>(Tobject)//Add a file as part of the request. Doing so will convert the body to a multipart/form request. Used for POST, PUT and DELETE//eg: "file name", "file", "image/jpeg", File.ReadAllBytes("pathtofile").File("string","string","string",byte[])//Set the host of the target server//Useful when you want to reuse a test suite between multiple Uris.Host("string")//Set the uri for the target endpoint.Uri("string")//Sets a different port in the request url//e.g. localhost:5000.Port(int)//allows you to use a different http client //e.g. when you are using testserver.HttpClient("httpClient")// sets the default protocol to https instead of http.UseHttps()//Debug the settings.Debug()

When

.When()//Add a load test to the mix. Set the # of threads and # of secs to run.Load(int,int)//Use the GET verb with a url. This will override the above section..Get("string")//Use the GET verb without and rely on url settings from Given() section.Get()//Use the POST verb with a url. This will override the above section..Post("string")//Use the POST verb without and rely on the url settings from Given() section..Post()//Use the PUT verb with a url. This will override the above section..Put("string")//Use the PUT verb without and rely on the url settings from Given() section..Put()//Use the DELETE verb with a url. This will override the above section..Delete("string")//Use the DELETE verb without and rely on the url settings from Given() section..Delete()//Debug the settings.Debug()

Then

.Then()//Write a test to make an assertion against the response body//The response body is the json blob that is returned from a REST call//eg: "test A", x => x.id != null.TestBody("string",Func<dynamic,bool>)//Write a test to make an assertion against the response header//eg: "test B", "content-type", x => x.Contains("json").TestHeader("string","string",Func<string,bool>)//Write a test to make an assertion against the RTT (elasped round trip time) for the call.//eg: "test C", x => x < 1000).TestElaspedTime("string",Func<double,bool>)//Write a test to make an assertion against load test results. Refer to the Reference section below for complete list of keys.//eg: "test D1", "average-ttl-ms", x => x < 1000 && x > 0//eg: "test D2", "total-call", x => x >= 234.TestLoad("string","string",Func<double,bool>)//Write a test to make an assertion against the response status code//eg: "test E", x => x == 200.TestStatus("string",Func<int,bool>)//Assert your test. Failed test will throw an AssertException.Assert("string")//Apply a v3 or v4 json schema to the response. Corrupted schemas will throw an ArgumentException.Schema("string")//Assert your schema against the response. Failed test will throw an AssertException.AssertSchema()//Assert all your test. Failed test will throw an AssertException.AssertAll()//Output all of the test results.WriteAssertions()//Retrieve a value from the response body//eg: x => x.id.Retrieve(Func<dynamic,object>)//Debug the response.Debug()

##Reference

###Keys for TestLoad() Command There are predefined keys for these test.

total-call
total-succeeded
total-lost
average-ttl-ms
maximum-ttl-ms
minimum-ttl-ms

###Request Body The request body type is dynamically determined based on the types of input specified. Here is the strategy for the body construct.

  1. If File is present, create multipart/form
  2. If Param is present, create urlencoded/form
  3. Default to contents in Body.

JSON Schema Support

ResAssured leverages Newtonsoft.Json for its JSON parsing and JSON schema validation support.
Newtonsoft.Json on supports draft 3 and draft 4 of the JSON scheam specification, so we can too!

Utilize these tools to validate your JSON schema

v3 Schema Validator

v4 Schema Validator

More Examples

Breaking up a call chain

//Create a new test suitevarendpoint1=newRestAssured().Given()//Optional, set the name of this suite.Name("JsonIP Test Suite")//Optional, set the header parameters. //Defaults will be set to application/json if none is given.Header("Content-Type","application/json").Header("Accept-Encoding","gzip,deflate");.Host("jsonip.com").Uri("/endpoint1");//Make a copy of the settings from above, but adjust the endpoint.varendpoint2=endpoint1.Given().Clone().Uri("/endpoint2");//Do a GET action with the first endpoint configurationendpoint2.Given().When().Get().Then().TestBody("test 1", x =>x.id!=null).Assert("test 1");//Do a POST action with the second endpoint configurationendpoint2.Given().When().Post().Then().TestBody("test 1", x =>x.id!=null).Assert("test 1");

Load Test

newRestAssured().Given().Name("JsonIP multi thread").When()//Configure a load test with//6 threads that runs for 30 seconds.Load(6,30)//Using this address.Get("http://yourremote.com").Then()//Assert Load Test and Print Results.Debug().TestLoad("good-average","average-ttl-ms", x =>x>100&&x<400).Assert("good-average");

Using Body

newRestAssured().Given().Name("Using body #1").Header("Content-Type","application/json").Body("{ 'id' : 'fuzzywuzzy', 'address' : { 'street1' : '123 Main St', 'city' : 'Brooklyn'}}").When().Post("http://yourremote.com").Then().Debug()
varbody=new{id="fuzzywuzzy",address=new{street1="123 Main St",city="Brooklyn"}};newRestAssured().Given().Name("Using body #2").Header("Content-Type","application/json").Body(body).When().Post("http://yourremote.com").Then().Debug()

Using File

newRestAssured().Given().Name("Uploading a file").Param("id","some identifier")//First parameter is your file name//Second parameter is the name associated to the section of content in the multipart/form//Default to the name "file"//Third parameter describes the content type that is being added in the byte array//Fourth parameter the byte array of content.File("fileName","file","images/jpeg",File.ReadAllBytes(@"c:\path\to\image")).When().Post("http://yourremote.com").Then().Debug()

Retrieving an object

Value returned from http://yourremote.com

{id : 12345,detail : {name : 'stuff'}}

The follow code from the above response value will set id to 12345

varid=newRestAssured().Given().Name("Retrieve an item in the document").When().Get("http://yourremote.com").Then().Retrieve(x =>x.id);

About

A simple testing suite for REST based interfaces

Resources

Stars

118 stars

Watchers

13 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

78 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

RestAssured.Net

A simple testing suite for REST based interfaces. The goal is to provide a tool that is simple to use and produces repeatable results.

Download

Nuget

Nuget RestAssured.Net Info

PM> Install-Package RestAssured

Example

Response

{
"ip":"2605:6000:f705:ab00:78e3:1959:78d4:bd76",
"about":"/about",
"Pro!":"http://getjsonip.com"
}

Test

//Create a new test suitenewRestAssured().Given()//Optional, set the name of this suite.Name("JsonIP Test Suite")//Optional, set the header parameters. //Defaults will be set to application/json if none is given.Header("Content-Type","application/json").Header("Accept-Encoding","gzip,deflate").When()//url.Get("http://jsonip.com").Then()//Give the name of the test and a lambda expression to test with//The lambda expression keys off of 'x' which represents the json blob as a dynamic..TestBody("test a", x =>x.about!=null)//Throw an AssertException if the test case is false..Assert("test a");

Structure

The call chains are structured around 4 main parts.

  1. Newing up RestAssured gives you a chainable object to work with
  2. All commands under Given() are setup procedures - Setup Headers - Setup Parameters - Setup Host and Uri Information
  3. All commands under When() are used for configuration the call environment - eg: GET vs POST
  4. All commands under Then() are used for setting up test rules and assertions

Commands

Given

.Given()//Set up the name for a test suite.Name("string")//Set up Http Header//eg: "Accept-Encoding", "gzip, deflate".Header("string","string")//Add query string parameters for any HTTP verb.Query("string","string")//Add parameters for the body of the request if it is POST, PUT or DELETE.Param("string","string")//Allows for a string content such as JSON or XML. Used for POST, PUT and DELETE. The body is overriden if Param() is used.Body("string")//Allows for an object to be serialized to JSON or XML. Used for POST, PUT and DELETE. The body is overriden if Param() is used.Body<T>(Tobject)//Add a file as part of the request. Doing so will convert the body to a multipart/form request. Used for POST, PUT and DELETE//eg: "file name", "file", "image/jpeg", File.ReadAllBytes("pathtofile").File("string","string","string",byte[])//Set the host of the target server//Useful when you want to reuse a test suite between multiple Uris.Host("string")//Set the uri for the target endpoint.Uri("string")//Sets a different port in the request url//e.g. localhost:5000.Port(int)//allows you to use a different http client //e.g. when you are using testserver.HttpClient("httpClient")// sets the default protocol to https instead of http.UseHttps()//Debug the settings.Debug()

When

.When()//Add a load test to the mix. Set the # of threads and # of secs to run.Load(int,int)//Use the GET verb with a url. This will override the above section..Get("string")//Use the GET verb without and rely on url settings from Given() section.Get()//Use the POST verb with a url. This will override the above section..Post("string")//Use the POST verb without and rely on the url settings from Given() section..Post()//Use the PUT verb with a url. This will override the above section..Put("string")//Use the PUT verb without and rely on the url settings from Given() section..Put()//Use the DELETE verb with a url. This will override the above section..Delete("string")//Use the DELETE verb without and rely on the url settings from Given() section..Delete()//Debug the settings.Debug()

Then

.Then()//Write a test to make an assertion against the response body//The response body is the json blob that is returned from a REST call//eg: "test A", x => x.id != null.TestBody("string",Func<dynamic,bool>)//Write a test to make an assertion against the response header//eg: "test B", "content-type", x => x.Contains("json").TestHeader("string","string",Func<string,bool>)//Write a test to make an assertion against the RTT (elasped round trip time) for the call.//eg: "test C", x => x < 1000).TestElaspedTime("string",Func<double,bool>)//Write a test to make an assertion against load test results. Refer to the Reference section below for complete list of keys.//eg: "test D1", "average-ttl-ms", x => x < 1000 && x > 0//eg: "test D2", "total-call", x => x >= 234.TestLoad("string","string",Func<double,bool>)//Write a test to make an assertion against the response status code//eg: "test E", x => x == 200.TestStatus("string",Func<int,bool>)//Assert your test. Failed test will throw an AssertException.Assert("string")//Apply a v3 or v4 json schema to the response. Corrupted schemas will throw an ArgumentException.Schema("string")//Assert your schema against the response. Failed test will throw an AssertException.AssertSchema()//Assert all your test. Failed test will throw an AssertException.AssertAll()//Output all of the test results.WriteAssertions()//Retrieve a value from the response body//eg: x => x.id.Retrieve(Func<dynamic,object>)//Debug the response.Debug()

##Reference

###Keys for TestLoad() Command There are predefined keys for these test.

total-call
total-succeeded
total-lost
average-ttl-ms
maximum-ttl-ms
minimum-ttl-ms

###Request Body The request body type is dynamically determined based on the types of input specified. Here is the strategy for the body construct.

  1. If File is present, create multipart/form
  2. If Param is present, create urlencoded/form
  3. Default to contents in Body.

JSON Schema Support

ResAssured leverages Newtonsoft.Json for its JSON parsing and JSON schema validation support.
Newtonsoft.Json on supports draft 3 and draft 4 of the JSON scheam specification, so we can too!

Utilize these tools to validate your JSON schema

v3 Schema Validator

v4 Schema Validator

More Examples

Breaking up a call chain

//Create a new test suitevarendpoint1=newRestAssured().Given()//Optional, set the name of this suite.Name("JsonIP Test Suite")//Optional, set the header parameters. //Defaults will be set to application/json if none is given.Header("Content-Type","application/json").Header("Accept-Encoding","gzip,deflate");.Host("jsonip.com").Uri("/endpoint1");//Make a copy of the settings from above, but adjust the endpoint.varendpoint2=endpoint1.Given().Clone().Uri("/endpoint2");//Do a GET action with the first endpoint configurationendpoint2.Given().When().Get().Then().TestBody("test 1", x =>x.id!=null).Assert("test 1");//Do a POST action with the second endpoint configurationendpoint2.Given().When().Post().Then().TestBody("test 1", x =>x.id!=null).Assert("test 1");

Load Test

newRestAssured().Given().Name("JsonIP multi thread").When()//Configure a load test with//6 threads that runs for 30 seconds.Load(6,30)//Using this address.Get("http://yourremote.com").Then()//Assert Load Test and Print Results.Debug().TestLoad("good-average","average-ttl-ms", x =>x>100&&x<400).Assert("good-average");

Using Body

newRestAssured().Given().Name("Using body #1").Header("Content-Type","application/json").Body("{ 'id' : 'fuzzywuzzy', 'address' : { 'street1' : '123 Main St', 'city' : 'Brooklyn'}}").When().Post("http://yourremote.com").Then().Debug()
varbody=new{id="fuzzywuzzy",address=new{street1="123 Main St",city="Brooklyn"}};newRestAssured().Given().Name("Using body #2").Header("Content-Type","application/json").Body(body).When().Post("http://yourremote.com").Then().Debug()

Using File

newRestAssured().Given().Name("Uploading a file").Param("id","some identifier")//First parameter is your file name//Second parameter is the name associated to the section of content in the multipart/form//Default to the name "file"//Third parameter describes the content type that is being added in the byte array//Fourth parameter the byte array of content.File("fileName","file","images/jpeg",File.ReadAllBytes(@"c:\path\to\image")).When().Post("http://yourremote.com").Then().Debug()

Retrieving an object

Value returned from http://yourremote.com

{id : 12345,detail : {name : 'stuff'}}

The follow code from the above response value will set id to 12345

varid=newRestAssured().Given().Name("Retrieve an item in the document").When().Get("http://yourremote.com").Then().Retrieve(x =>x.id);

About

A simple testing suite for REST based interfaces

Resources

Stars

118 stars

Watchers

13 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

78 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

RestAssured.Net

A simple testing suite for REST based interfaces. The goal is to provide a tool that is simple to use and produces repeatable results.

Download

Nuget

Nuget RestAssured.Net Info

PM> Install-Package RestAssured

Example

Response

{
"ip":"2605:6000:f705:ab00:78e3:1959:78d4:bd76",
"about":"/about",
"Pro!":"http://getjsonip.com"
}

Test

//Create a new test suitenewRestAssured().Given()//Optional, set the name of this suite.Name("JsonIP Test Suite")//Optional, set the header parameters. //Defaults will be set to application/json if none is given.Header("Content-Type","application/json").Header("Accept-Encoding","gzip,deflate").When()//url.Get("http://jsonip.com").Then()//Give the name of the test and a lambda expression to test with//The lambda expression keys off of 'x' which represents the json blob as a dynamic..TestBody("test a", x =>x.about!=null)//Throw an AssertException if the test case is false..Assert("test a");

Structure

The call chains are structured around 4 main parts.

  1. Newing up RestAssured gives you a chainable object to work with
  2. All commands under Given() are setup procedures - Setup Headers - Setup Parameters - Setup Host and Uri Information
  3. All commands under When() are used for configuration the call environment - eg: GET vs POST
  4. All commands under Then() are used for setting up test rules and assertions

Commands

Given

.Given()//Set up the name for a test suite.Name("string")//Set up Http Header//eg: "Accept-Encoding", "gzip, deflate".Header("string","string")//Add query string parameters for any HTTP verb.Query("string","string")//Add parameters for the body of the request if it is POST, PUT or DELETE.Param("string","string")//Allows for a string content such as JSON or XML. Used for POST, PUT and DELETE. The body is overriden if Param() is used.Body("string")//Allows for an object to be serialized to JSON or XML. Used for POST, PUT and DELETE. The body is overriden if Param() is used.Body<T>(Tobject)//Add a file as part of the request. Doing so will convert the body to a multipart/form request. Used for POST, PUT and DELETE//eg: "file name", "file", "image/jpeg", File.ReadAllBytes("pathtofile").File("string","string","string",byte[])//Set the host of the target server//Useful when you want to reuse a test suite between multiple Uris.Host("string")//Set the uri for the target endpoint.Uri("string")//Sets a different port in the request url//e.g. localhost:5000.Port(int)//allows you to use a different http client //e.g. when you are using testserver.HttpClient("httpClient")// sets the default protocol to https instead of http.UseHttps()//Debug the settings.Debug()

When

.When()//Add a load test to the mix. Set the # of threads and # of secs to run.Load(int,int)//Use the GET verb with a url. This will override the above section..Get("string")//Use the GET verb without and rely on url settings from Given() section.Get()//Use the POST verb with a url. This will override the above section..Post("string")//Use the POST verb without and rely on the url settings from Given() section..Post()//Use the PUT verb with a url. This will override the above section..Put("string")//Use the PUT verb without and rely on the url settings from Given() section..Put()//Use the DELETE verb with a url. This will override the above section..Delete("string")//Use the DELETE verb without and rely on the url settings from Given() section..Delete()//Debug the settings.Debug()

Then

.Then()//Write a test to make an assertion against the response body//The response body is the json blob that is returned from a REST call//eg: "test A", x => x.id != null.TestBody("string",Func<dynamic,bool>)//Write a test to make an assertion against the response header//eg: "test B", "content-type", x => x.Contains("json").TestHeader("string","string",Func<string,bool>)//Write a test to make an assertion against the RTT (elasped round trip time) for the call.//eg: "test C", x => x < 1000).TestElaspedTime("string",Func<double,bool>)//Write a test to make an assertion against load test results. Refer to the Reference section below for complete list of keys.//eg: "test D1", "average-ttl-ms", x => x < 1000 && x > 0//eg: "test D2", "total-call", x => x >= 234.TestLoad("string","string",Func<double,bool>)//Write a test to make an assertion against the response status code//eg: "test E", x => x == 200.TestStatus("string",Func<int,bool>)//Assert your test. Failed test will throw an AssertException.Assert("string")//Apply a v3 or v4 json schema to the response. Corrupted schemas will throw an ArgumentException.Schema("string")//Assert your schema against the response. Failed test will throw an AssertException.AssertSchema()//Assert all your test. Failed test will throw an AssertException.AssertAll()//Output all of the test results.WriteAssertions()//Retrieve a value from the response body//eg: x => x.id.Retrieve(Func<dynamic,object>)//Debug the response.Debug()

##Reference

###Keys for TestLoad() Command There are predefined keys for these test.

total-call
total-succeeded
total-lost
average-ttl-ms
maximum-ttl-ms
minimum-ttl-ms

###Request Body The request body type is dynamically determined based on the types of input specified. Here is the strategy for the body construct.

  1. If File is present, create multipart/form
  2. If Param is present, create urlencoded/form
  3. Default to contents in Body.

JSON Schema Support

ResAssured leverages Newtonsoft.Json for its JSON parsing and JSON schema validation support.
Newtonsoft.Json on supports draft 3 and draft 4 of the JSON scheam specification, so we can too!

Utilize these tools to validate your JSON schema

v3 Schema Validator

v4 Schema Validator

More Examples

Breaking up a call chain

//Create a new test suitevarendpoint1=newRestAssured().Given()//Optional, set the name of this suite.Name("JsonIP Test Suite")//Optional, set the header parameters. //Defaults will be set to application/json if none is given.Header("Content-Type","application/json").Header("Accept-Encoding","gzip,deflate");.Host("jsonip.com").Uri("/endpoint1");//Make a copy of the settings from above, but adjust the endpoint.varendpoint2=endpoint1.Given().Clone().Uri("/endpoint2");//Do a GET action with the first endpoint configurationendpoint2.Given().When().Get().Then().TestBody("test 1", x =>x.id!=null).Assert("test 1");//Do a POST action with the second endpoint configurationendpoint2.Given().When().Post().Then().TestBody("test 1", x =>x.id!=null).Assert("test 1");

Load Test

newRestAssured().Given().Name("JsonIP multi thread").When()//Configure a load test with//6 threads that runs for 30 seconds.Load(6,30)//Using this address.Get("http://yourremote.com").Then()//Assert Load Test and Print Results.Debug().TestLoad("good-average","average-ttl-ms", x =>x>100&&x<400).Assert("good-average");

Using Body

newRestAssured().Given().Name("Using body #1").Header("Content-Type","application/json").Body("{ 'id' : 'fuzzywuzzy', 'address' : { 'street1' : '123 Main St', 'city' : 'Brooklyn'}}").When().Post("http://yourremote.com").Then().Debug()
varbody=new{id="fuzzywuzzy",address=new{street1="123 Main St",city="Brooklyn"}};newRestAssured().Given().Name("Using body #2").Header("Content-Type","application/json").Body(body).When().Post("http://yourremote.com").Then().Debug()

Using File

newRestAssured().Given().Name("Uploading a file").Param("id","some identifier")//First parameter is your file name//Second parameter is the name associated to the section of content in the multipart/form//Default to the name "file"//Third parameter describes the content type that is being added in the byte array//Fourth parameter the byte array of content.File("fileName","file","images/jpeg",File.ReadAllBytes(@"c:\path\to\image")).When().Post("http://yourremote.com").Then().Debug()

Retrieving an object

Value returned from http://yourremote.com

{id : 12345,detail : {name : 'stuff'}}

The follow code from the above response value will set id to 12345

varid=newRestAssured().Given().Name("Retrieve an item in the document").When().Get("http://yourremote.com").Then().Retrieve(x =>x.id);

About

A simple testing suite for REST based interfaces

Resources

Stars

118 stars

Watchers

13 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

78 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

RestAssured.Net

A simple testing suite for REST based interfaces. The goal is to provide a tool that is simple to use and produces repeatable results.

Download

Nuget

Nuget RestAssured.Net Info

PM> Install-Package RestAssured

Example

Response

{
"ip":"2605:6000:f705:ab00:78e3:1959:78d4:bd76",
"about":"/about",
"Pro!":"http://getjsonip.com"
}

Test

//Create a new test suitenewRestAssured().Given()//Optional, set the name of this suite.Name("JsonIP Test Suite")//Optional, set the header parameters. //Defaults will be set to application/json if none is given.Header("Content-Type","application/json").Header("Accept-Encoding","gzip,deflate").When()//url.Get("http://jsonip.com").Then()//Give the name of the test and a lambda expression to test with//The lambda expression keys off of 'x' which represents the json blob as a dynamic..TestBody("test a", x =>x.about!=null)//Throw an AssertException if the test case is false..Assert("test a");

Structure

The call chains are structured around 4 main parts.

  1. Newing up RestAssured gives you a chainable object to work with
  2. All commands under Given() are setup procedures - Setup Headers - Setup Parameters - Setup Host and Uri Information
  3. All commands under When() are used for configuration the call environment - eg: GET vs POST
  4. All commands under Then() are used for setting up test rules and assertions

Commands

Given

.Given()//Set up the name for a test suite.Name("string")//Set up Http Header//eg: "Accept-Encoding", "gzip, deflate".Header("string","string")//Add query string parameters for any HTTP verb.Query("string","string")//Add parameters for the body of the request if it is POST, PUT or DELETE.Param("string","string")//Allows for a string content such as JSON or XML. Used for POST, PUT and DELETE. The body is overriden if Param() is used.Body("string")//Allows for an object to be serialized to JSON or XML. Used for POST, PUT and DELETE. The body is overriden if Param() is used.Body<T>(Tobject)//Add a file as part of the request. Doing so will convert the body to a multipart/form request. Used for POST, PUT and DELETE//eg: "file name", "file", "image/jpeg", File.ReadAllBytes("pathtofile").File("string","string","string",byte[])//Set the host of the target server//Useful when you want to reuse a test suite between multiple Uris.Host("string")//Set the uri for the target endpoint.Uri("string")//Sets a different port in the request url//e.g. localhost:5000.Port(int)//allows you to use a different http client //e.g. when you are using testserver.HttpClient("httpClient")// sets the default protocol to https instead of http.UseHttps()//Debug the settings.Debug()

When

.When()//Add a load test to the mix. Set the # of threads and # of secs to run.Load(int,int)//Use the GET verb with a url. This will override the above section..Get("string")//Use the GET verb without and rely on url settings from Given() section.Get()//Use the POST verb with a url. This will override the above section..Post("string")//Use the POST verb without and rely on the url settings from Given() section..Post()//Use the PUT verb with a url. This will override the above section..Put("string")//Use the PUT verb without and rely on the url settings from Given() section..Put()//Use the DELETE verb with a url. This will override the above section..Delete("string")//Use the DELETE verb without and rely on the url settings from Given() section..Delete()//Debug the settings.Debug()

Then

.Then()//Write a test to make an assertion against the response body//The response body is the json blob that is returned from a REST call//eg: "test A", x => x.id != null.TestBody("string",Func<dynamic,bool>)//Write a test to make an assertion against the response header//eg: "test B", "content-type", x => x.Contains("json").TestHeader("string","string",Func<string,bool>)//Write a test to make an assertion against the RTT (elasped round trip time) for the call.//eg: "test C", x => x < 1000).TestElaspedTime("string",Func<double,bool>)//Write a test to make an assertion against load test results. Refer to the Reference section below for complete list of keys.//eg: "test D1", "average-ttl-ms", x => x < 1000 && x > 0//eg: "test D2", "total-call", x => x >= 234.TestLoad("string","string",Func<double,bool>)//Write a test to make an assertion against the response status code//eg: "test E", x => x == 200.TestStatus("string",Func<int,bool>)//Assert your test. Failed test will throw an AssertException.Assert("string")//Apply a v3 or v4 json schema to the response. Corrupted schemas will throw an ArgumentException.Schema("string")//Assert your schema against the response. Failed test will throw an AssertException.AssertSchema()//Assert all your test. Failed test will throw an AssertException.AssertAll()//Output all of the test results.WriteAssertions()//Retrieve a value from the response body//eg: x => x.id.Retrieve(Func<dynamic,object>)//Debug the response.Debug()

##Reference

###Keys for TestLoad() Command There are predefined keys for these test.

total-call
total-succeeded
total-lost
average-ttl-ms
maximum-ttl-ms
minimum-ttl-ms

###Request Body The request body type is dynamically determined based on the types of input specified. Here is the strategy for the body construct.

  1. If File is present, create multipart/form
  2. If Param is present, create urlencoded/form
  3. Default to contents in Body.

JSON Schema Support

ResAssured leverages Newtonsoft.Json for its JSON parsing and JSON schema validation support.
Newtonsoft.Json on supports draft 3 and draft 4 of the JSON scheam specification, so we can too!

Utilize these tools to validate your JSON schema

v3 Schema Validator

v4 Schema Validator

More Examples

Breaking up a call chain

//Create a new test suitevarendpoint1=newRestAssured().Given()//Optional, set the name of this suite.Name("JsonIP Test Suite")//Optional, set the header parameters. //Defaults will be set to application/json if none is given.Header("Content-Type","application/json").Header("Accept-Encoding","gzip,deflate");.Host("jsonip.com").Uri("/endpoint1");//Make a copy of the settings from above, but adjust the endpoint.varendpoint2=endpoint1.Given().Clone().Uri("/endpoint2");//Do a GET action with the first endpoint configurationendpoint2.Given().When().Get().Then().TestBody("test 1", x =>x.id!=null).Assert("test 1");//Do a POST action with the second endpoint configurationendpoint2.Given().When().Post().Then().TestBody("test 1", x =>x.id!=null).Assert("test 1");

Load Test

newRestAssured().Given().Name("JsonIP multi thread").When()//Configure a load test with//6 threads that runs for 30 seconds.Load(6,30)//Using this address.Get("http://yourremote.com").Then()//Assert Load Test and Print Results.Debug().TestLoad("good-average","average-ttl-ms", x =>x>100&&x<400).Assert("good-average");

Using Body

newRestAssured().Given().Name("Using body #1").Header("Content-Type","application/json").Body("{ 'id' : 'fuzzywuzzy', 'address' : { 'street1' : '123 Main St', 'city' : 'Brooklyn'}}").When().Post("http://yourremote.com").Then().Debug()
varbody=new{id="fuzzywuzzy",address=new{street1="123 Main St",city="Brooklyn"}};newRestAssured().Given().Name("Using body #2").Header("Content-Type","application/json").Body(body).When().Post("http://yourremote.com").Then().Debug()

Using File

newRestAssured().Given().Name("Uploading a file").Param("id","some identifier")//First parameter is your file name//Second parameter is the name associated to the section of content in the multipart/form//Default to the name "file"//Third parameter describes the content type that is being added in the byte array//Fourth parameter the byte array of content.File("fileName","file","images/jpeg",File.ReadAllBytes(@"c:\path\to\image")).When().Post("http://yourremote.com").Then().Debug()

Retrieving an object

Value returned from http://yourremote.com

{id : 12345,detail : {name : 'stuff'}}

The follow code from the above response value will set id to 12345

varid=newRestAssured().Given().Name("Retrieve an item in the document").When().Get("http://yourremote.com").Then().Retrieve(x =>x.id);

About

A simple testing suite for REST based interfaces

Resources

Stars

118 stars

Watchers

13 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

78 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

RestAssured.Net

A simple testing suite for REST based interfaces. The goal is to provide a tool that is simple to use and produces repeatable results.

Download

Nuget

Nuget RestAssured.Net Info

PM> Install-Package RestAssured

Example

Response

{
"ip":"2605:6000:f705:ab00:78e3:1959:78d4:bd76",
"about":"/about",
"Pro!":"http://getjsonip.com"
}

Test

//Create a new test suitenewRestAssured().Given()//Optional, set the name of this suite.Name("JsonIP Test Suite")//Optional, set the header parameters. //Defaults will be set to application/json if none is given.Header("Content-Type","application/json").Header("Accept-Encoding","gzip,deflate").When()//url.Get("http://jsonip.com").Then()//Give the name of the test and a lambda expression to test with//The lambda expression keys off of 'x' which represents the json blob as a dynamic..TestBody("test a", x =>x.about!=null)//Throw an AssertException if the test case is false..Assert("test a");

Structure

The call chains are structured around 4 main parts.

  1. Newing up RestAssured gives you a chainable object to work with
  2. All commands under Given() are setup procedures - Setup Headers - Setup Parameters - Setup Host and Uri Information
  3. All commands under When() are used for configuration the call environment - eg: GET vs POST
  4. All commands under Then() are used for setting up test rules and assertions

Commands

Given

.Given()//Set up the name for a test suite.Name("string")//Set up Http Header//eg: "Accept-Encoding", "gzip, deflate".Header("string","string")//Add query string parameters for any HTTP verb.Query("string","string")//Add parameters for the body of the request if it is POST, PUT or DELETE.Param("string","string")//Allows for a string content such as JSON or XML. Used for POST, PUT and DELETE. The body is overriden if Param() is used.Body("string")//Allows for an object to be serialized to JSON or XML. Used for POST, PUT and DELETE. The body is overriden if Param() is used.Body<T>(Tobject)//Add a file as part of the request. Doing so will convert the body to a multipart/form request. Used for POST, PUT and DELETE//eg: "file name", "file", "image/jpeg", File.ReadAllBytes("pathtofile").File("string","string","string",byte[])//Set the host of the target server//Useful when you want to reuse a test suite between multiple Uris.Host("string")//Set the uri for the target endpoint.Uri("string")//Sets a different port in the request url//e.g. localhost:5000.Port(int)//allows you to use a different http client //e.g. when you are using testserver.HttpClient("httpClient")// sets the default protocol to https instead of http.UseHttps()//Debug the settings.Debug()

When

.When()//Add a load test to the mix. Set the # of threads and # of secs to run.Load(int,int)//Use the GET verb with a url. This will override the above section..Get("string")//Use the GET verb without and rely on url settings from Given() section.Get()//Use the POST verb with a url. This will override the above section..Post("string")//Use the POST verb without and rely on the url settings from Given() section..Post()//Use the PUT verb with a url. This will override the above section..Put("string")//Use the PUT verb without and rely on the url settings from Given() section..Put()//Use the DELETE verb with a url. This will override the above section..Delete("string")//Use the DELETE verb without and rely on the url settings from Given() section..Delete()//Debug the settings.Debug()

Then

.Then()//Write a test to make an assertion against the response body//The response body is the json blob that is returned from a REST call//eg: "test A", x => x.id != null.TestBody("string",Func<dynamic,bool>)//Write a test to make an assertion against the response header//eg: "test B", "content-type", x => x.Contains("json").TestHeader("string","string",Func<string,bool>)//Write a test to make an assertion against the RTT (elasped round trip time) for the call.//eg: "test C", x => x < 1000).TestElaspedTime("string",Func<double,bool>)//Write a test to make an assertion against load test results. Refer to the Reference section below for complete list of keys.//eg: "test D1", "average-ttl-ms", x => x < 1000 && x > 0//eg: "test D2", "total-call", x => x >= 234.TestLoad("string","string",Func<double,bool>)//Write a test to make an assertion against the response status code//eg: "test E", x => x == 200.TestStatus("string",Func<int,bool>)//Assert your test. Failed test will throw an AssertException.Assert("string")//Apply a v3 or v4 json schema to the response. Corrupted schemas will throw an ArgumentException.Schema("string")//Assert your schema against the response. Failed test will throw an AssertException.AssertSchema()//Assert all your test. Failed test will throw an AssertException.AssertAll()//Output all of the test results.WriteAssertions()//Retrieve a value from the response body//eg: x => x.id.Retrieve(Func<dynamic,object>)//Debug the response.Debug()

##Reference

###Keys for TestLoad() Command There are predefined keys for these test.

total-call
total-succeeded
total-lost
average-ttl-ms
maximum-ttl-ms
minimum-ttl-ms

###Request Body The request body type is dynamically determined based on the types of input specified. Here is the strategy for the body construct.

  1. If File is present, create multipart/form
  2. If Param is present, create urlencoded/form
  3. Default to contents in Body.

JSON Schema Support

ResAssured leverages Newtonsoft.Json for its JSON parsing and JSON schema validation support.
Newtonsoft.Json on supports draft 3 and draft 4 of the JSON scheam specification, so we can too!

Utilize these tools to validate your JSON schema

v3 Schema Validator

v4 Schema Validator

More Examples

Breaking up a call chain

//Create a new test suitevarendpoint1=newRestAssured().Given()//Optional, set the name of this suite.Name("JsonIP Test Suite")//Optional, set the header parameters. //Defaults will be set to application/json if none is given.Header("Content-Type","application/json").Header("Accept-Encoding","gzip,deflate");.Host("jsonip.com").Uri("/endpoint1");//Make a copy of the settings from above, but adjust the endpoint.varendpoint2=endpoint1.Given().Clone().Uri("/endpoint2");//Do a GET action with the first endpoint configurationendpoint2.Given().When().Get().Then().TestBody("test 1", x =>x.id!=null).Assert("test 1");//Do a POST action with the second endpoint configurationendpoint2.Given().When().Post().Then().TestBody("test 1", x =>x.id!=null).Assert("test 1");

Load Test

newRestAssured().Given().Name("JsonIP multi thread").When()//Configure a load test with//6 threads that runs for 30 seconds.Load(6,30)//Using this address.Get("http://yourremote.com").Then()//Assert Load Test and Print Results.Debug().TestLoad("good-average","average-ttl-ms", x =>x>100&&x<400).Assert("good-average");

Using Body

newRestAssured().Given().Name("Using body #1").Header("Content-Type","application/json").Body("{ 'id' : 'fuzzywuzzy', 'address' : { 'street1' : '123 Main St', 'city' : 'Brooklyn'}}").When().Post("http://yourremote.com").Then().Debug()
varbody=new{id="fuzzywuzzy",address=new{street1="123 Main St",city="Brooklyn"}};newRestAssured().Given().Name("Using body #2").Header("Content-Type","application/json").Body(body).When().Post("http://yourremote.com").Then().Debug()

Using File

newRestAssured().Given().Name("Uploading a file").Param("id","some identifier")//First parameter is your file name//Second parameter is the name associated to the section of content in the multipart/form//Default to the name "file"//Third parameter describes the content type that is being added in the byte array//Fourth parameter the byte array of content.File("fileName","file","images/jpeg",File.ReadAllBytes(@"c:\path\to\image")).When().Post("http://yourremote.com").Then().Debug()

Retrieving an object

Value returned from http://yourremote.com

{id : 12345,detail : {name : 'stuff'}}

The follow code from the above response value will set id to 12345

varid=newRestAssured().Given().Name("Retrieve an item in the document").When().Get("http://yourremote.com").Then().Retrieve(x =>x.id);

About

A simple testing suite for REST based interfaces

Resources

Stars

118 stars

Watchers

13 watching

Forks

Releases

Packages

Used by

Contributors

Languages