API Endpoints
The dashboard exposes a RESTful API.
Authentication
All endpoints support signed cookie based authentication.
Login
To login, send a POST request to
POST /api/v1/login
with the following data
{'username': <username>, 'password': <password>}
Returns 204 No Content on success or 403 Forbidden if the username or password was not found.
On success a signed cookie is set.
Logout
Send a GET or POST request without parameters to
POST /api/v1/logout
Returns 204 No Content on success or 403 Forbidden is the user was not logged in.
On success the signed cookie is cleared.
Projects
Create a Project
To create a new project send a POST request to
POST /api/v1/project/<project>
<project> must be a valid project name consisting of A-Z, a-z, 0-9, - and _.
POST data:
{'alias': <optional human readable name>}
Returns 204 No Content on success.
<alias> is an optional human-readable name for the project.
List projects
To list all projects, send a GET request to
GET /api/v1/projects
Returns 200 OK on success.
Response:
{"my_project": {"name": "my_project", "alias": "My Project", ...}, ...}
Delete a Project
To delete a project and all associated reports, requirements and tokens, send a DELETE request to
DELETE /api/v1/project/<project>
Returns 204 No Content on success.
Project Information
To get project information about a visible project, send a GET request to
GET /api/v1/project/<project>
Response:
{
"name": <project-name>,
"alias": <project-alias>,
"last-modified": <utc-timestamp>,
"number_of_reports": <int or null>,
"current_number_of_successes": <int or null>,
"current_number_of_tests": <int or null>,
"current_number_of_successfully_covered_requirements": <int or null>,
"current_number_of_requirements": <int or null>
}
On success 200 OK is returned.
If the current user is not allowed to access the project, 404 Not Found is returned.
Reports
Upload a Report
To upload a test report to a project, send a POST request to
POST /api/v1/project/<project>/report[/token/<token>]
POST data:
{'filename': <report filename>,
'type': <report type>,
'contents': <file contents>}
The /token/<token> is optional. type can be null or 'junit'.
Returns 204 No Content on success.
409 Conflict is returned if the report already exists.
List Reports
To list all test reports of a project, send a GET request to
GET /api/v1/project/<project>/reports
Returns 200 OK on success.
Response:
{"reports":
[{"id": "0b2c2e38-3b57-47c7-a868-4e4c209a029a",
"title": "Test Report",
[...]
},
[...]
]
}
Export a Report
To export a test report, send a GET request to
GET /api/v1/project/<project>/report/<report-id>
Returns 200 OK on success and 400 Bad Request if report-id is not supplied.
Response:
{"id": "0b2c2e38-3b57-47c7-a868-4e4c209a029a",
"title": "Test Report",
"date": "2020-01-01 00:00:00",
"start_time": "2020-01-01 00:00:00",
"start_timestamp": 1577833200.0,
"stop_time": "2020-01-01 00:00:00",
"stop_timestamp": 1577833200.0,
"duration": "",
"seconds": 4503.94160399791,
"test_amount": 1,
"successes": 1,
"errors": 0,
"failures": 0,
"skipped": 0,
"unexpected_successes": 0,
"expected_failures": 0,
"metadata": "",
"htf_version": "1.3.0",
"python_version": "3.7",
"license_information": "",
"platform": "Linux-4.15.0-55-generic-x86_64-with-Ubuntu-18.04-bionic",
"hostname": "test host",
"machine": "x86_64",
"tests": [{"result": "success",
"data": {"links": []}
}],
"number_of_tested_requirements": 0,
"number_of_successfully_tested_requirements": 0,
"number_of_unsuccessfully_tested_requirements": 0,
"tested_requirements": ["REQ-1", "REQ-2", "REQ-3"],
"successfully_tested_requirements": ["REQ-1", "REQ-2"],
"unsuccessfully_tested_requirements": ["REQ-3"]}
Delete a Report
To delete a test report from a project, send a DELETE request to
DELETE /api/v1/project/<project>/report/<report-id>
Returns 204 No Content on success.
Requirements
Upload Requirements
To upload requirements to a project, send a POST request to
POST /api/v1/project/<project>/requirements
POST data
{'filename': <requirements filename>,
'type': <requirements type>,
'contents': <file contents>,
'date': <date>}
Date must be in strptime-format %Y-%m-%d %H:%M:%S. type can be null or 'csv'.
Returns 204 No Content on success.
List Uploaded Requirements
To list uploaded requirements, send a GET request to
GET /api/v1/project/<project>/requirements
Returns 200 OK on success.
Response:
[{"date": "2020-01-01 00:00:00",
"requirements": ["REQ-1", "REQ-2", "REQ-3"],
"number_of_requirements": 0,
"id": "5f2a6479b5503fc71875a778"},
[...]
]
Export Requirements
To export requirements, send a GET request to
GET /api/v1/project/<project>/requirements/<requirements-id>
Returns 200 OK on success.
Response:
{"date": "2020-01-01 00:00:00",
"requirements": ["REQ-1", "REQ-2", "REQ-3"],
"number_of_requirements": 0,
"id": "5f2a6479b5503fc71875a778"}
Delete Requirements
To delete requirements from a project, send a DELETE request to
DELETE /api/v1/project/<project>/requirements/<requirements-id>
Returns 204 No Content on success.
Tokens
Create Token
To create a new token for a project, send a POST request to
POST /api/v1/project/<project>/token
POST data:
{'name': <token identifier>}
Returns 201 Created on success and response.
{'token': <token identifier>}
List Tokens
To list all tokens for a project, send a GET request to
GET /api/v1/project/<project>/tokens
Returns 200 OK on success.
Response:
{
"707bcd17ef364263848bf5e3ecfeb755f01e11fee492d9f6361d3c0d": "token_0",
"4479723524bcb8a562e861cd8ef1998b431114ef4213e38b16dba026": "token_1",
# ...
}
Delete Token
To delete a token from a project, send a DELETE request to
DELETE /api/v1/project/<project>/token/<token>
Returns 204 No Content on success.
Cache
Results that are shown in the user interface are cached. A cache rebuild can be forced by sending a POST request to
POST /api/v1/project/<project>/cache
Returns 204 No Content on success or 404 Not Found if the project was not found.
User Management
Users and roles can be managed via the API.
List Users
Send a GET request to
GET /api/v1/users
Returns 200 OK on success with the payload
[
{
'username': <username>,
'projects': {
'<project-1>': {
'roles': ['manager', 'user'],
},
# ...
},
# ...
]
Add User
To add a user, send a POST request to
POST /api/v1/user/<username>
with the payload
{'password': <password>}
Returns 204 No Content on success or 409 Conflict if the user already exists.
Requires user root.
Delete User
To add a user, send a DELETE request to
DELETE /api/v1/user/<username>
Returns 204 No Content on success, 404 Not Found if the user does not
exist and 403 Forbidden if the current user is not root or the supplied username
is root. The user root cannot be removed.
Requires user root.
Get User Information
To get user information, send a GET request to
GET /api/v1/user
GET /api/v1/user/<username>
{
'username': <username>,
'projects': {
'<project-1>': {
'roles': ['manager', 'user'],
},
# ...
}
If no <username> is supplied, the current username is used.
Returns 200 OK on success, 404 Not Found if the user was not found and
403 Forbidden if a user is not root or does not read its own information.
Requires user root to read user information for different users.
Change User’s Password
To change the user’s password, send a PUT request to
PUT /api/v1/user
PUT /api/v1/user/<username>
with payload
{'password': <password>}
If no <username> is supplied the current username is used.
Returns 204 No Content on success, 404 Not Found if the user does not exist and
403 Forbidden if a user is not root and does not change its own password.
Requires user root to change password for other users.
Set User’s Project Roles
To set roles for projects, send a PUT request as root to
PUT /api/v1/user/<username>/roles
with payload
{
<project-0>: [role-1, role-2, role-N],
# ...
}
Each role must be one out of "admin", "user". If you want to remove a user’s role, leave the list of roles empty.
Returns 204 No Content on success, 404 Not Found if the user was not found and
403 Forbidden if the current user is not root.
Projects don’t have to exist. Thus roles can be created before a project is created.