Qase TestOps API V2 Client
The `qase-api-v2-client` library provides a Python client for interacting with the Qase TestOps API V2. It allows users to programmatically manage projects, test cases, runs, and other entities within Qase. The current version is 2.0.6, and it is part of a larger `qase-python` monorepo, with updates typically occurring when the Qase API specification changes or bug fixes are introduced across the ecosystem.
Common errors
-
ModuleNotFoundError: No module named 'qase_api_v2_client'
cause The package was not installed or installed incorrectly. The PyPI package name is `qase-api-v2-client`, but the import name is `qase_api_v2_client`.fixEnsure you have installed the package correctly using `pip install qase-api-v2-client`. -
qase_api_v2_client.exceptions.ApiException: (401) Unauthorized
cause The provided Qase API token (`QASE_API_TOKEN`) is either missing, invalid, or does not have sufficient permissions for the requested operation.fixVerify your `QASE_API_TOKEN` is correct, active, and has the necessary scope within your Qase TestOps account. Ensure it's correctly loaded into the `Configuration` object. -
qase_api_v2_client.exceptions.ApiException: (404) Not Found (or similar network error)
cause This often indicates an incorrect API base URL. The `qase-api-v2-client` defaults to `v1`, but the client is designed for `v2` endpoints.fixExplicitly set `configuration.host = 'https://api.qase.io/v2'` (or your custom Qase V2 API URL) when initializing the `Configuration` object.
Warnings
- gotcha The `qase-api-v2-client` library, despite its name, defaults its `Configuration.host` to `https://api.qase.io/v1`. To use the Qase API V2, you *must* explicitly set `configuration.host = 'https://api.qase.io/v2'` or configure `QASE_API_BASE_URL` environment variable.
- breaking Migrating from a Qase API v1 client to `qase-api-v2-client` will involve significant breaking changes. API endpoints, request/response models, and method signatures are different, reflecting the V2 API specification.
- gotcha This library is part of the `qase-python` monorepo. While it is a standalone install, updates to shared components (like `qase-python-commons`) or new API versions may prompt updates to this client, potentially changing method signatures or data models.
Install
-
pip install qase-api-v2-client
Imports
- ApiClient
from qase_api_v2_client import ApiClient
- Configuration
from qase_api_v2_client import Configuration
- ProjectsApi
from qase_api_v2_client.api.projects_api import ProjectsApi
- ApiException
from qase_api_v2_client.exceptions import ApiException
Quickstart
import os
from qase_api_v2_client import ApiClient, Configuration
from qase_api_v2_client.api.projects_api import ProjectsApi
from qase_api_v2_client.exceptions import ApiException
# Configure API key authentication
configuration = Configuration()
configuration.api_key['TokenAuth'] = os.environ.get('QASE_API_TOKEN', 'YOUR_QASE_API_TOKEN_HERE')
# IMPORTANT: The client is named 'v2-client' but its default host is 'v1'.
# Explicitly set the host to the Qase API V2 endpoint.
configuration.host = os.environ.get('QASE_API_BASE_URL', 'https://api.qase.io/v2')
# Create an instance of the API client
api_client = ApiClient(configuration)
# Create an instance of a specific API service, e.g., ProjectsApi
projects_api = ProjectsApi(api_client)
try:
# Example: List projects
response = projects_api.get_projects()
print(f"Successfully connected to Qase API V2. Found {response.total} projects.")
if response.entities:
print(f"First project: {response.entities[0].title} (Code: {response.entities[0].code})")
except ApiException as e:
print(f"Error calling Qase API: {e.status} - {e.body}")
if e.status == 401:
print("Please check your QASE_API_TOKEN and ensure it's valid for the v2 API.")
elif e.status == 404 and 'v1' in configuration.host:
print("Consider changing QASE_API_BASE_URL to 'https://api.qase.io/v2'.")
except Exception as e:
print(f"An unexpected error occurred: {e}")