Examples
Smart Diff
Smart Diff captures JSON requests and responses over HTTP and provides categorized differences of a sandbox to the baseline. As a result, the tests using Smart Diff are comprised of making HTTP calls and working with the responses.
HTTP Methods
The http
module has one function for every supported HTTP Method, shown below.
For more details, refer to the starlet
lib/http.
url = "http://localhost:8080/a/b?x=y&z=1"
# GET
http.get(url)
# PUT
http.put(url)
# POST
http.post(url)
# DELETE
http.delete(url)
# HEAD
http.head(url)
# OPTIONS
http.options(url)
# PATCH
http.patch(url)
Capture
For each http
method, adding the keyword parameter capture=True
will cause
the request and response to be captured. Subsequently, when run in association
with a sandbox, a diff between captures of baseline and sandbox will be
presented.
http.get(url, capture=True)
Headers
# also for other http methods
http.get(url, headers={"X-My-Header": "42"})
Query Parameters
You can include the query parameters in the URL, such as
http.get("http://localhost:8080/a/b?c=d&e=f")
or, as a parameter
http.get("http://localhost:8080", params={"c": "d"; "e": "f"})
Produce JSON Body
One can use the json
module to produce a JSON body to a request.
body = {
"field": "value",
"array": [1,2,3],
"bool": true
}
http.put(url, json_body=body)
# (also for other http methods)
JSON numbers are represented as Starlark ints when possible.
lst = [0.0, 1.01]
d = json.encode(lst)
lst2 = json.decode(d)
type(lst2[0]) # "int"
type(lst2[1]) # "float"
Consume JSON Body
resp = http.get(url)
v = resp.json()
# check type of JSON response
j = resp.json()
if type(j) == "dict":
# if the resp body is a JSON list, then v is a list
for k in j:
value = j[k]
pass
elif type(j) == "list":
for item in j:
pass
elif type(j) == "string":
pass
elif type(j) == "int":
pass
elif type(j) == "bool":
pass
elif type(j) == "float":
pass
Smart Checks (Assertions)
Coming Soon!