qase / php-commons
Library with common classes for Qase PHP reporters
Installs: 6 457
Dependents: 2
Suggesters: 0
Security: 0
Stars: 1
Watchers: 3
Forks: 1
Open Issues: 1
Requires
- php: ^8.0
- qase/qase-api-client: ^1.1.0
- qase/qase-api-v2-client: ^1.1.0
- ramsey/uuid: ^4.7
Requires (Dev)
- ext-json: *
- phpunit/phpunit: ^9 || ^10 || ^11
This package is auto-updated.
Last update: 2025-09-10 13:05:43 UTC
README
This module is an SDK for developing test reporters for Qase TMS. You should use it if you're developing your own test reporter for a special-purpose framework.
To report results from tests using a popular framework or test runner, don't install this module directly and use the corresponding reporter module instead:
Installation
composer require qase/php-commons
Configuration
Qase PHP Reporters can be configured in multiple ways:
- using a config file
qase.config.json
- using environment variables
All configuration options are listed in the table below:
Description | Config file | Environment variable | Default value | Required | Possible values |
---|---|---|---|---|---|
Common | |||||
Mode of reporter | mode |
QASE_MODE |
off |
No | testops , report , off |
Fallback mode of reporter | fallback |
QASE_FALLBACK |
off |
No | testops , report , off |
Environment slug | environment |
QASE_ENVIRONMENT |
undefined | No | Any string |
Root suite | rootSuite |
QASE_ROOT_SUITE |
undefined | No | Any string |
Enable debug logs | debug |
QASE_DEBUG |
False |
No | True , False |
Qase Report configuration | |||||
Driver used for report mode | report.driver |
QASE_REPORT_DRIVER |
local |
No | local |
Path to save the report | report.connection.path |
QASE_REPORT_CONNECTION_PATH |
./build/qase-report |
||
Local report format | report.connection.format |
QASE_REPORT_CONNECTION_FORMAT |
json |
json , jsonp |
|
Qase TestOps configuration | |||||
Token for API access | testops.api.token |
QASE_TESTOPS_API_TOKEN |
undefined | Yes | Any string |
Qase API host. For enterprise users, specify address: example.qase.io |
testops.api.host |
QASE_TESTOPS_API_HOST |
qase.io |
No | Any string |
Qase enterprise environment | testops.api.enterprise |
QASE_TESTOPS_API_ENTERPRISE |
False |
No | True , False |
Code of your project, which you can take from the URL: https://app.qase.io/project/DEMOTR - DEMOTR is the project code |
testops.project |
QASE_TESTOPS_PROJECT |
undefined | Yes | Any string |
Qase test run ID | testops.run.id |
QASE_TESTOPS_RUN_ID |
undefined | No | Any integer |
Qase test run title | testops.run.title |
QASE_TESTOPS_RUN_TITLE |
Automated run <Current date and time> |
No | Any string |
Qase test run description | testops.run.description |
QASE_TESTOPS_RUN_DESCRIPTION |
<Framework name> automated run |
No | Any string |
Qase test run complete | testops.run.complete |
QASE_TESTOPS_RUN_COMPLETE |
True |
True , False |
|
Qase test run tags | testops.run.tags |
QASE_TESTOPS_RUN_TAGS |
undefined | No | Config: array of strings, Env: comma-separated string |
External issue type | testops.run.externalLink.type |
QASE_TESTOPS_RUN_EXTERNAL_LINK_TYPE |
undefined | No | jiraCloud , jiraServer |
External issue URL | testops.run.externalLink.link |
QASE_TESTOPS_RUN_EXTERNAL_LINK_URL |
undefined | No | Any valid URL string |
Qase test plan ID | testops.plan.id |
QASE_TESTOPS_PLAN_ID |
undefined | No | Any integer |
Size of batch for sending test results | testops.batch.size |
QASE_TESTOPS_BATCH_SIZE |
200 |
No | Any integer |
Enable defects for failed test cases | testops.defect |
QASE_TESTOPS_DEFECT |
False |
No | True , False |
Configuration values to associate with test run | testops.configurations.values |
QASE_TESTOPS_CONFIGURATIONS_VALUES |
[] |
No | Comma-separated key=value pairs |
Create configuration groups and values if they don't exist | testops.configurations.createIfNotExists |
QASE_TESTOPS_CONFIGURATIONS_CREATE_IF_NOT_EXISTS |
False |
No | True , False |
Status filter for test results | testops.statusFilter |
QASE_TESTOPS_STATUS_FILTER |
[] |
No | Comma-separated string |
Example qase.config.json
config:
{ "mode": "testops", "fallback": "report", "debug": false, "environment": "local", "captureLogs": false, "report": { "driver": "local", "connection": { "local": { "path": "./build/qase-report", "format": "json" } } }, "testops": { "api": { "token": "<token>", "host": "qase.io" }, "run": { "title": "Regress run", "description": "Regress run description", "complete": true, "tags": ["tag1", "tag2"], "externalLink": { "type": "jiraCloud", "link": "PROJ-123" } }, "defect": false, "project": "<project_code>", "batch": { "size": 100 }, "configurations": { "values": [ { "name": "browser", "value": "chrome" }, { "name": "version", "value": "latest" }, { "name": "environment", "value": "staging" } ], "createIfNotExists": true }, "statusFilter": ["skipped", "blocked", "untested"] } }
Environment Variables Example:
You can also configure configurations using environment variables:
export QASE_TESTOPS_CONFIGURATIONS_VALUES="browser=chrome,version=latest,environment=staging" export QASE_TESTOPS_CONFIGURATIONS_CREATE_IF_NOT_EXISTS=true export QASE_TESTOPS_STATUS_FILTER="skipped,blocked,untested" export QASE_TESTOPS_RUN_EXTERNAL_LINK_TYPE="jiraCloud" export QASE_TESTOPS_RUN_EXTERNAL_LINK_URL="PROJ-123"
The QASE_TESTOPS_CONFIGURATIONS_VALUES
should be a comma-separated list of key=value pairs.
How Configurations Work
Configurations in Qase TestOps work as follows:
- name field represents the configuration group (e.g., "browser", "environment")
- value field represents the configuration item within that group (e.g., "chrome", "staging")
- When
createIfNotExists
is true, the system will:- Create a configuration group with the specified name if it doesn't exist
- Create a configuration item with the specified value in that group
- Associate the configuration item ID with the test run
Status Filtering
You can filter out test results with specific statuses using the statusFilter
configuration option:
Config file example:
{ "testops": { "statusFilter": ["skipped", "blocked", "untested"] } }
Environment variable example:
export QASE_TESTOPS_STATUS_FILTER="skipped,blocked,untested"
Available statuses:
passed
- Test passed successfullyfailed
- Test failedskipped
- Test was skippedblocked
- Test was blockeduntested
- Test was not tested
When statusFilter
is configured, results with the specified statuses will be excluded from being sent to Qase TestOps.
External Issue Integration
You can link test runs to external issues (like Jira tickets) by configuring the externalLink
option:
Config file example:
{ "testops": { "run": { "externalLink": { "type": "jiraCloud", "link": "PROJ-123" } } } }
Environment variables example:
export QASE_TESTOPS_RUN_EXTERNAL_LINK_TYPE="jiraCloud" export QASE_TESTOPS_RUN_EXTERNAL_LINK_URL="PROJ-123"
Supported external issue types:
jiraCloud
- For Jira Cloud instancesjiraServer
- For Jira Server/Data Center instances
When an external link is configured, the system will automatically associate the test run with the specified external issue after the run is created.
Technical Details:
- External issue functionality uses the Qase API v1 client
- The system automatically maps internal enum values to API enum values:
jiraCloud
→jira-cloud
jiraServer
→jira-server
- API calls are made using the official Qase API client models (
RunexternalIssues
andRunexternalIssuesLinksInner
)