@ -0,0 +1,2 @@ |
|||
__pycache__ |
|||
*.pyc |
@ -0,0 +1,126 @@ |
|||
# provoj |
|||
|
|||
Simple library to check the endpoints of an RESTful API. |
|||
|
|||
### Usage |
|||
Import the provoj library, and the requests library |
|||
```python |
|||
import provoj |
|||
import requests |
|||
``` |
|||
|
|||
Define a new test |
|||
```python |
|||
test = provoj.NewTest("Testing some websites") |
|||
``` |
|||
|
|||
Check if two variables are equal |
|||
```python |
|||
a = "hello" |
|||
b = "world" |
|||
test.equal("comparing a and b", a, b)# test.equal(check description, variable1, variable2) |
|||
``` |
|||
|
|||
Check if two variables are not equal |
|||
```python |
|||
a = "hello" |
|||
b = "world" |
|||
test.notequal("comparing a and b", a, b)# test.notequal(check description, variable1, variable2) |
|||
``` |
|||
|
|||
Check if first variable is bigger than the second |
|||
```python |
|||
a = 2 |
|||
b = 3 |
|||
test.bigger("comparing a and b", a, b)# test.bigger(check description, variable1, variable2) |
|||
``` |
|||
|
|||
Check if first variable is smaller than the second |
|||
```python |
|||
a = 2 |
|||
b = 3 |
|||
test.smaller("comparing a and b", a, b)# test.smaller(check description, variable1, variable2) |
|||
``` |
|||
|
|||
Check if the length of a variable |
|||
```python |
|||
animals = ["cat", "dog", "racoon"] |
|||
test.length("checking the length of the array animals", animals, 3)# test.length(check description, variable1, length) |
|||
``` |
|||
|
|||
Check for request status |
|||
```python |
|||
r = requests.get("https://api.github.com/users/arnaucode/repos") |
|||
test.status("get api.github.com/users/arnaucode/repos", r)# test.status(check description, request_response) |
|||
``` |
|||
|
|||
### Full example |
|||
```python |
|||
import provoj |
|||
import requests |
|||
|
|||
|
|||
test1 = provoj.NewTest("testing some function") |
|||
|
|||
a = "hello" |
|||
b = "world" |
|||
c = "hello" |
|||
test1.equal("comparing a and b", a, b) |
|||
test1.notequal("comparing a and b", a, b) |
|||
test1.equal("comparing a and c", a, c) |
|||
|
|||
x = 2 |
|||
y = 3 |
|||
test1.bigger("comparing x and y", x, y) |
|||
test1.smaller("comparing x and y", x, y) |
|||
|
|||
test1.length("checking length", a, 2) |
|||
test1.length("checking length", a, 5) |
|||
|
|||
animals = ["cat", "dog", "racoon"] |
|||
test1.length("checking the length of the array animals", animals, 3) |
|||
|
|||
test1.printScores() |
|||
|
|||
|
|||
t2 = provoj.NewTest("Testing some websites") |
|||
|
|||
r = requests.get("https://www.github.com") |
|||
t2.rStatus("get github", r) |
|||
|
|||
r = requests.get("https://arnaucode.com") |
|||
t2.rStatus("get arnaucode.com", r) |
|||
|
|||
r = requests.get("https://arnaucode.com/fake") |
|||
t2.rStatus("get arnaucode.com/fake_path", r) |
|||
|
|||
r = requests.get("https://arnaucode.com/blog") |
|||
t2.rStatus("get arnaucode.com/blog", r) |
|||
|
|||
t2.printScores() |
|||
|
|||
|
|||
tGithub = provoj.NewTest("Github API tests") |
|||
|
|||
r = requests.get("https://api.github.com") |
|||
tGithub.rStatus("get api.github", r) |
|||
r = requests.get("https://api.github.com/users/arnaucode") |
|||
tGithub.rStatus("get https://api.github.com/users/arnaucode", r) |
|||
jsonResp = r.json() |
|||
tGithub.equal("checking quantity of followers", jsonResp["followers"], 100) |
|||
tGithub.equal("checking quantity of public_repos", jsonResp["public_repos"], 77) |
|||
|
|||
r = requests.get("https://api.github.com/users/arnaucode/repos") |
|||
tGithub.rStatus("get https://api.github.com/users/arnaucode/repos", r) |
|||
jsonResp = r.json() |
|||
tGithub.length("checking length of repos", jsonResp, 30) |
|||
tGithub.equal("checking first repo", jsonResp[0]["name"], "argos") |
|||
tGithub.equal("checking second repo", jsonResp[1]["name"], "coffeeminer") |
|||
tGithub.equal("checking third repo", jsonResp[2]["name"], "bc") |
|||
|
|||
tGithub.printScores() |
|||
``` |
|||
|
|||
Output example: |
|||
|
|||
![provoj](https://raw.githubusercontent.com/arnaucode/provoj/master/provoj-example.gif "provoj") |
@ -0,0 +1,65 @@ |
|||
import provoj |
|||
import requests |
|||
|
|||
|
|||
test1 = provoj.NewTest("testing some function") |
|||
|
|||
a = "hello" |
|||
b = "world" |
|||
c = "hello" |
|||
|
|||
test1.equal("comparing a and b", a, b) |
|||
test1.notequal("comparing a and b", a, b) |
|||
|
|||
test1.equal("comparing a and c", a, c) |
|||
|
|||
x = 2 |
|||
y = 3 |
|||
test1.bigger("comparing x and y", x, y) |
|||
test1.smaller("comparing x and y", x, y) |
|||
|
|||
test1.length("checking length", a, 2) |
|||
test1.length("checking length", a, 5) |
|||
|
|||
animals = ["cat", "dog", "racoon"] |
|||
test1.length("checking the length of the array animals", animals, 3) |
|||
|
|||
test1.printScores() |
|||
|
|||
|
|||
t2 = provoj.NewTest("Testing some websites") |
|||
|
|||
r = requests.get("https://www.github.com") |
|||
t2.rStatus("get github", r) |
|||
|
|||
r = requests.get("https://arnaucode.com") |
|||
t2.rStatus("get arnaucode.com", r) |
|||
|
|||
r = requests.get("https://arnaucode.com/fake") |
|||
t2.rStatus("get arnaucode.com/fake_path", r) |
|||
|
|||
r = requests.get("https://arnaucode.com/blog") |
|||
t2.rStatus("get arnaucode.com/blog", r) |
|||
|
|||
t2.printScores() |
|||
|
|||
|
|||
tGithub = provoj.NewTest("Github API tests") |
|||
|
|||
r = requests.get("https://api.github.com") |
|||
tGithub.rStatus("get api.github", r) |
|||
r = requests.get("https://api.github.com/users/arnaucode") |
|||
tGithub.rStatus("get https://api.github.com/users/arnaucode", r) |
|||
jsonResp = r.json() |
|||
tGithub.equal("checking quantity of followers", jsonResp["followers"], 100) |
|||
tGithub.equal("checking quantity of public_repos", jsonResp["public_repos"], 77) |
|||
|
|||
r = requests.get("https://api.github.com/users/arnaucode/repos") |
|||
tGithub.rStatus("get https://api.github.com/users/arnaucode/repos", r) |
|||
jsonResp = r.json() |
|||
tGithub.length("checking length of repos", jsonResp, 30) |
|||
tGithub.equal("checking first repo", jsonResp[0]["name"], "argos") |
|||
tGithub.equal("checking second repo", jsonResp[1]["name"], "coffeeminer") |
|||
tGithub.equal("checking third repo", jsonResp[2]["name"], "bc") |
|||
|
|||
tGithub.printScores() |
@ -0,0 +1,112 @@ |
|||
import math |
|||
import datetime |
|||
|
|||
class NewTest(object): |
|||
def __init__(self, title=None): |
|||
# define the scores dictionary, and initialize |
|||
self.scores = {} |
|||
self.scores["success"] = 0 |
|||
self.scores["error"] = 0 |
|||
self.time = datetime.datetime.now() |
|||
if title != None: |
|||
self.title = title |
|||
print("") |
|||
pc.blue("- " + title) |
|||
else: |
|||
self.title = "" |
|||
print("") |
|||
pc.blue("- unnamed test") |
|||
def equal(self, action, a, b): |
|||
if a != b: |
|||
pc.error(action + " - Error, '" + str(a) + "' should be equal to '" + str(b) + "'") |
|||
self.scores["error"] += 1 |
|||
else: |
|||
pc.checked(action) |
|||
self.scores["success"] += 1 |
|||
def notequal(self, action, a, b): |
|||
if a == b: |
|||
pc.error(action + " - Error, '" + str(a) + "' should be not equal to '" + str(b) + "'") |
|||
self.scores["error"] += 1 |
|||
else: |
|||
pc.checked(action) |
|||
self.scores["success"] += 1 |
|||
def bigger(self, action, a, b): |
|||
if a < b: |
|||
pc.error(action + " - Error, '" + str(a) + "' should be bigger than '" + str(b) + "'") |
|||
self.scores["error"] += 1 |
|||
else: |
|||
pc.checked(action) |
|||
self.scores["success"] += 1 |
|||
def smaller(self, action, a, b): |
|||
if a > b: |
|||
pc.error(action + " - Error, '" + str(a) + "' should be smaller than '" + str(b) + "'") |
|||
self.scores["error"] += 1 |
|||
else: |
|||
pc.checked(action) |
|||
self.scores["success"] += 1 |
|||
|
|||
def length(self, action, a, l): |
|||
if len(a) != l: |
|||
pc.error(action + " - Error, actual length is '" + str(len(a)) + "', expected to be '" + str(l) + "'") |
|||
self.scores["error"] += 1 |
|||
else: |
|||
pc.checked(action) |
|||
self.scores["success"] += 1 |
|||
|
|||
def rStatus(self, action, r, verbose=False): |
|||
if r.status_code < 200 or r.status_code > 299: |
|||
if verbose: |
|||
pc.error(action + " - Error " + str(r.status_code) + ": " + r.text) |
|||
else: |
|||
pc.error(action + " - Error " + str(r.status_code)) |
|||
|
|||
self.scores["error"] += 1 |
|||
else: |
|||
pc.checked(action) |
|||
self.scores["success"] += 1 |
|||
|
|||
def printScores(self): |
|||
pc.purple(" Test title: " + self.title) |
|||
score = math.ceil(( self.scores["success"]/(self.scores["success"]+self.scores["error"]) )*100) |
|||
elapsed = datetime.datetime.now() - self.time |
|||
pc.purple(" Score: " + str(score) |
|||
+ "% (" + str(self.scores["success"]) + "/" + str(self.scores["success"] + self.scores["error"]) + ")" |
|||
+ " Time benchmark: " + str(elapsed)) |
|||
|
|||
|
|||
''' |
|||
code to print the colors in the terminal |
|||
''' |
|||
checkIcon = "✓ " |
|||
errorIcon = "❌ " |
|||
|
|||
class pc: |
|||
RED = '\033[31m' |
|||
GREEN = '\033[32m' |
|||
BLUE = '\033[94m' |
|||
PURPLE = '\033[95m' |
|||
END = '\033[0m' |
|||
|
|||
@classmethod |
|||
def red(cls, s, **kwargs): |
|||
print(cls.RED + s + cls.END, **kwargs) |
|||
|
|||
@classmethod |
|||
def green(cls, s, **kwargs): |
|||
print(cls.GREEN + s + cls.END, **kwargs) |
|||
|
|||
@classmethod |
|||
def blue(cls, s, **kwargs): |
|||
print(cls.BLUE + s + cls.END, **kwargs) |
|||
|
|||
@classmethod |
|||
def purple(cls, s, **kwargs): |
|||
print(cls.PURPLE + s + cls.END, **kwargs) |
|||
|
|||
@classmethod |
|||
def checked(cls, s, **kwargs): |
|||
print(" " + cls.GREEN + checkIcon + s + cls.END, **kwargs) |
|||
|
|||
@classmethod |
|||
def error(cls, s, **kwargs): |
|||
print(" " + cls.RED + errorIcon + s + cls.END, **kwargs) |