A command line tool to run smoke tests in your REST API using python and just config files.
The idea was born during a manual test with the testers of my current project, we where looking for a solution to automate smoke tests that requires little to no programming skills to work with and let the testers team check basic stuff on the API side with a basic fixture.
This is a work in progress and I'm working on it during my spare time.
You have a single config file app.conf
located on the config/
folder holds the API URL and other variables used on your tests, and several test files called test groups, located on the tests/
folder. All the tests files have the .test extension.
Config example
[app]
url: https://jsonplaceholder.typicode.com
[vars]
post_id: 1
user_id: 1
Test file example
[login]
url: /auth/login
method: POST
authorization: None
payload: {"username": "test@test.com", "password": "test1234"}
tests:
http_status: 200
headers.Location: true
result: true
result.version: true
result.license: GNU
In this case we are testing the JSON response
{
"result": {
"version": "1.0",
"last_update": "2018-12-05",
"license": "GNU"
}
}
The test should check the http status must be 200, the headers must contain the Location attribute, there must be a result attribute, inside the result attribute, a version attribute must exists, a license attribute must exists and must be equal to GNU.
Validation rules
Rule | Description | Status |
---|---|---|
True | The attribute must exist on the JSON response | Implemented |
False | The attribute must not be present | Implemented |
Value | The attribute value must exist and be equal to Value | Implemented |
Isnumber | The attribute value must exist and must be a number | Future |
Isstring | The attribute value must exist and must be a string | Future |
Islist | The attribute value must exist and must be a list | Future |
Isdictionary | The attribute value must exist and must be a dictionary | Future |
Ismail | The attribute value must exist and must be a valid e-mail | Future |
Isdate | The attribute value must exist and must be a valid date | Future |
Isdatetime | The attribute value must exist and must be a valid datetime | Future |
Isdateiso | The attribute value must exist and must be a valid date in ISO format | Future |
Commands
Command | Options | Description |
---|---|---|
$ python pysmoke.py |
--help | Display help menu |
$ python pysmoke.py |
Run all tests in all groups | |
$ python pysmoke.py |
--verbose | Run all tests in verbose mode |
$ python pysmoke.py |
--filter get.test | Run all tests on the get.test group |
$ python pysmoke.py |
--filter get.test:list | Run the list test on the get.test group |
$ python pysmoke.py |
--config ./app.conf | App configuracion file |
$ python pysmoke.py |
--source ./tests | Tests folder |
Clone the project:
$ git clone git@github.com:faustocarrera/pysmoke.git
Or download it:
$ wget https://github.com/faustocarrera/pysmoke/archive/master.zip
You could use virtualenv or install everything globally.
$ virtualenv env -p python3
$ env/bin/pip install -r requirements
Setup your API url on the config/app.conf file.
Modify or create test inside the tests folder, all the tests must have the .test extension.
Run the app.
$ env/bin/python pysmoke.py
Run it on verbose mode.
$ env/bin/python pysmoke.py -v