### Install Qase CLI via go install Source: https://docs.qase.io/en/articles/9789909-qase-cli-app Use 'go install' to easily install the Qase CLI. Ensure your $GOPATH/bin is added to your $PATH. ```bash go install github.com/qase-tms/qasectl@latest ``` -------------------------------- ### SCIM Create User Response Example Source: https://docs.qase.io/en/articles/8556234-scim This is an example of a response after successfully creating a new user. It includes the user's ID and location. ```json { "schemas": [ "urn:ietf:params:scim:schemas:core:2.0:User" ], "id": "1", "meta": { "resourceType": "User", "location": "https://app.qase.io/scim/v2/Users/1" }, "userName": "john@doe.com", "name": { "familyName": "John", "givenName": "Doe" }, "active": true, "emails": [ { "value": "john@doe.com", "primary": true } ] } ``` -------------------------------- ### SCIM List Response Example Source: https://docs.qase.io/en/articles/8556234-scim This is an example of a successful response when retrieving a list of users, including pagination details and user resources. ```json { "schemas": [ "urn:ietf:params:scim:api:messages:2.0:ListResponse" ], "totalResults": 1, "itemsPerPage": 1, "startIndex": 1, "Resources": [ { "schemas": [ "urn:ietf:params:scim:schemas:core:2.0:User" ], "id": "1", "userName": "john@doe.com", "name": { "familyName": "John", "givenName": "Doe" }, "active": true, "userType": "regular", "title": "CEO", "emails": [ { "value": "john@doe.com", "primary": true } ], "meta": { "resourceType": "User", "location": "https://app.qase.io/scim/v2/Users/1" } } ] } ``` -------------------------------- ### SCIM User Resource Example Source: https://docs.qase.io/en/articles/8556234-scim This is an example of a SCIM user resource, typically returned when retrieving a single user or as part of a list. ```json { "schemas": [ "urn:ietf:params:scim:schemas:core:2.0:User" ], "id": "1", "userName": "john@doe.com", "name": { "familyName": "John", "givenName": "Doe" }, "active": true, "userType": "regular", "title": "CEO", "emails": [ { "value": "john@doe.com", "primary": true } ], "meta": { "resourceType": "User", "location": "https://app.qase.io/scim/v2/Users/1" } } ``` -------------------------------- ### General Query Examples Source: https://docs.qase.io/en/articles/5563699-queries-qql-qase-query-language Demonstrates various combinations of QQL attributes and operators for filtering entities like 'case' and 'defect'. ```qql entity = "case" and isDeleted is true ``` ```qql entity = "case" and created >= now("-3d") ``` ```qql entity = "case" and created <= now("-3d") ``` ```qql entity = "case" and isDeleted is true and project in ["QTC"] ``` ```qql project = "QTC" and automation = "Not automated" ``` ```qql project = "MR" and automation != "Automated" ``` ```qql project = "QTC" and status in ["Draft", "Actual"] ``` ```qql entity = "defect" and status !="Open" and severity = "Not set" ``` ```qql entity = "defect" and status !=1 and severity = 0 ``` ```qql entity = "defect" and status !=1 and severity = 0 and cfv in ["1", "2"] ``` ```qql entity = "defect" and status !="Open" and severity != "Not set" and milestone is empty ``` ```qql entity = "defect" and status !="Open" and severity != "Not set" and cf["Defect URL"] is not null ``` ```qql entity = "case" and author != "CEO" and updated <= now("-1d") and isFlaky is false ``` ```qql entity = "case" and author != "CEO" and updated <= now("-1d") and project in ('QASE', 'NQASE') and id = 1 ``` -------------------------------- ### Basic QQL Query Example Source: https://docs.qase.io/en/articles/5563699-queries-qql-qase-query-language A simple QQL query to find open defects. Ensure the 'entity' and 'status' are correctly specified. ```qql entity = "defect" and status = "open" ``` -------------------------------- ### Classic Steps V1 Format Example Source: https://docs.qase.io/en/articles/14441695-gherkin-steps Demonstrates the correct V1 format for classic steps, ensuring actions, results, and data are correctly sequenced and matched. ```csv steps_type,steps_actions,steps_result,steps_data classic,"1. Open the login page","Verify the login page is displayed","" classic,"2. Enter username","Verify username field accepts input","testuser" classic,"3. Enter password","Verify password field accepts input","password123" classic,"4. Click login button","Verify user is logged in","" ``` -------------------------------- ### Gherkin Steps V1 Format Example Source: https://docs.qase.io/en/articles/14441695-gherkin-steps Shows how to add Gherkin-style steps using the V1 format. Note that `steps_result` and `steps_data` are not used with Gherkin steps. ```csv steps_type,steps_actions gherkin,Given the user is on the login page gherkin,When the user enters valid credentials gherkin,Then the user should be redirected to the dashboard ``` -------------------------------- ### QQL Logical AND Expression Source: https://docs.qase.io/en/articles/5563699-queries-qql-qase-query-language Example of combining two expressions using the logical AND operator in QQL. ```qql expression and expression ``` -------------------------------- ### Get Users Source: https://docs.qase.io/en/articles/8556234-scim Retrieves a list of users from your Qase Enterprise account. Supports filtering by attributes. ```APIDOC ## GET /scim/v2/Users ### Description Retrieves a list of users. This endpoint can be used to fetch all users or filter them based on specific attributes. ### Method GET ### Endpoint https://app.qase.io/scim/v2/Users ### Parameters #### Query Parameters - **filter** (string) - Optional - Allows filtering users based on specific attributes (e.g., 'userName eq "test@example.com"'). - **startIndex** (integer) - Optional - The starting index for pagination. Defaults to 1. - **count** (integer) - Optional - The number of users to return per page. Defaults to 50. ### Request Headers - **Accept**: application/scim+json - **Content-Type**: application/json - **Authorization**: Bearer ### Response #### Success Response (200) - **totalResults** (integer) - The total number of users matching the filter. - **itemsPerPage** (integer) - The number of users returned in this response. - **startIndex** (integer) - The starting index of the returned results. - **Resources** (array) - An array of user objects. - **id** (string) - The unique identifier for the user. - **userName** (string) - The user's email address. - **name** (object) - Contains the user's name components. - **givenName** (string) - The user's first name. - **familyName** (string) - The user's last name. - **userType** (string) - The type of user (e.g., 'regular', 'read-only', 'billing'). - **active** (boolean) - Indicates if the user account is active. #### Response Example ```json { "totalResults": 1, "itemsPerPage": 1, "startIndex": 1, "Resources": [ { "id": "2819c223-797d-4346-9187-ee4225000100", "userName": "test@example.com", "name": { "givenName": "Test", "familyName": "User" }, "userType": "regular", "active": true, "meta": { "resourceType": "User", "created": "2023-10-27T10:00:00Z", "lastModified": "2023-10-27T10:00:00Z" } } ] } ``` ``` -------------------------------- ### GitHub Actions Workflow for Qase CLI Integration Source: https://docs.qase.io/en/articles/9789909-qase-cli-app Example GitHub Actions workflow to run Playwright tests and report results to Qase. This workflow demonstrates creating a test run, uploading results, and completing the run. ```yaml name: Run Playwright Tests and Report to Qase on: push: branches: - docker-qli jobs: test: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Node.js uses: actions/setup-node@v4 with: node-version: "18" - name: Install dependencies run: npm install - name: Run Playwright tests run: npx playwright test continue-on-error: true - name: Get current date id: get-date run: echo "date=$(date +'%Y-%m-%d %H:%M:%S')" >> $GITHUB_OUTPUT - name: Create a Qase test run uses: qase-tms/gh-actions/run-create@v1 id: qase-run-create with: token: ${{ secrets.QASE_API_TOKEN }} project: ${{ secrets.QASE_PROJECT_CODE }} title: "Playwright Test Run ${{ steps.get-date.outputs.date }}" description: "Automated Playwright test run" environment: "dev-web-app" verbose: true - name: Upload test results to Qase uses: qase-tms/gh-actions/report@v1 continue-on-error: true with: token: ${{ secrets.QASE_API_TOKEN }} project: ${{ secrets.QASE_PROJECT_CODE }} id: ${{ steps.qase-run-create.outputs.id }} format: junit path: results/test-results.xml batch: 100 verbose: true - name: Complete a Qase test run uses: qase-tms/gh-actions/run-complete@v1 id: complete # use always() to run even if test step failed or job was canceled # but don't run if creating a test run failed before this step if: always() && steps.qase-run-create.outcome == 'success' with: token: ${{ secrets.QASE_API_TOKEN }} project: ${{ secrets.QASE_PROJECT_CODE }} id: ${{ steps.qase-run-create.outputs.id }} verbose: true ``` -------------------------------- ### Get All Users Source: https://docs.qase.io/en/articles/8556234-scim Use this endpoint to retrieve a list of all users in your Qase account. Ensure your API token is included in the Authorization header. ```curl curl https://app.qase.io/scim/v2/Users \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer " ``` -------------------------------- ### QQL Query with Project and Text Exclusion Source: https://docs.qase.io/en/articles/5563699-queries-qql-qase-query-language Example of a QQL query to search for test cases in a specific project, excluding those with 'auth' in their title. The '!~' operator performs a text exclusion. ```qql entity = "case" and project = "DEMO" and title !~ "auth" order by id desc ``` -------------------------------- ### AIDEN Agentic Mode - Precise Targeting Source: https://docs.qase.io/en/articles/12449284-aiden-what-s-new Provide specific instructions for AIDEN to follow, such as clicking buttons or filling fields. Example: 'Click 'Get a Demo' and fill the email field'. ```plaintext Precise targeting: Specific instructions like "Click 'Get a Demo' and fill the email field" are handled directly ``` -------------------------------- ### Create a Test Run with Qase CLI Source: https://docs.qase.io/en/articles/9789909-qase-cli-app Execute the built Qase CLI binary to create a test run. Replace placeholders like and with your actual values. ```bash ./build/qli testops run create --project QD --token --title "Run created from Qase-cli" --description "Hello, from qase-cli" --environment --verbose ``` -------------------------------- ### Build Qase CLI from Source Source: https://docs.qase.io/en/articles/9789909-qase-cli-app Build the Qase CLI binary from the source code using 'make build'. The binary will be located in the 'build/' directory. ```bash make build ``` -------------------------------- ### Filter by Start Time Source: https://docs.qase.io/en/articles/5563699-queries-qql-qase-query-language Filter test runs based on their start time. Supports relative time, start of day, and Unix timestamp comparisons. ```query started >= now("-14d") ``` ```query started >= startOfDay('YYYY-mm-dd') ``` ```query started < 1569430502709 ``` -------------------------------- ### Filter by Started Status Source: https://docs.qase.io/en/articles/5563699-queries-qql-qase-query-language Filter test runs based on whether they have started. Supports boolean checks. ```query isStarted is false ``` ```query isStarted = true ``` -------------------------------- ### Run Qase CLI using Docker Source: https://docs.qase.io/en/articles/9789909-qase-cli-app Execute the Qase CLI within a Docker container. Replace '' with the desired Qase CLI command. ```bash docker run --rm ghcr.io/qase-tms/qase-cli:latest ``` -------------------------------- ### Execute GET and POST API Requests with CURL Source: https://docs.qase.io/en/articles/12449284-aiden-what-s-new Execute GET and POST API requests directly within your test flow using CURL. This enables end-to-end validation of both UI and API calls. ```bash CURL support: GET and POST requests run inline within the test flow ``` -------------------------------- ### GET /scim/v2/Users/{id} Source: https://docs.qase.io/en/articles/8556234-scim Retrieves a single user resource by their ID. ```APIDOC ## GET /scim/v2/Users/{id} ### Description Retrieves a single user resource by their unique identifier. ### Method GET ### Endpoint https://app.qase.io/scim/v2/Users/{id} ### Path Parameters - **id** (string) - Required - The unique identifier of the user to retrieve. ### Response #### Success Response (200) - **schemas** (array) - List of schema URIs. - **id** (string) - The unique identifier for the user. - **userName** (string) - The username (email address) of the user. - **name** (object) - The name object. - **familyName** (string) - The family name of the user. - **givenName** (string) - The given name of the user. - **active** (boolean) - Indicates if the user is active. - **userType** (string) - The type of user. - **title** (string) - The user's title. - **emails** (array) - An array of email objects. - **value** (string) - The email address. - **primary** (boolean) - Indicates if this is the primary email. - **meta** (object) - Metadata about the resource. - **resourceType** (string) - The resource type. - **location** (string) - The URL of the resource. ### Response Example ```json { "schemas": [ "urn:ietf:params:scim:schemas:core:2.0:User" ], "id": "1", "userName": "john@doe.com", "name": { "familyName": "John", "givenName": "Doe" }, "active": true, "userType": "regular", "title": "CEO", "emails": [ { "value": "john@doe.com", "primary": true } ], "meta": { "resourceType": "User", "location": "https://app.qase.io/scim/v2/Users/1" } } ``` ``` -------------------------------- ### Get User by ID Source: https://docs.qase.io/en/articles/8556234-scim Retrieves a specific user by their unique identifier. ```APIDOC ## GET /scim/v2/Users/{userId} ### Description Retrieves a specific user's details using their unique user ID. ### Method GET ### Endpoint https://app.qase.io/scim/v2/Users/{userId} ### Parameters #### Path Parameters - **userId** (string) - Required - The unique identifier of the user to retrieve. ### Request Headers - **Accept**: application/scim+json - **Content-Type**: application/json - **Authorization**: Bearer ### Response #### Success Response (200) - **id** (string) - The unique identifier for the user. - **userName** (string) - The user's email address. - **name** (object) - Contains the user's name components. - **givenName** (string) - The user's first name. - **familyName** (string) - The user's last name. - **userType** (string) - The type of user (e.g., 'regular', 'read-only', 'billing'). - **active** (boolean) - Indicates if the user account is active. #### Response Example ```json { "id": "2819c223-797d-4346-9187-ee4225000100", "userName": "test@example.com", "name": { "givenName": "Test", "familyName": "User" }, "userType": "regular", "active": true, "meta": { "resourceType": "User", "created": "2023-10-27T10:00:00Z", "lastModified": "2023-10-27T10:00:00Z" } } ``` ``` -------------------------------- ### Clone Qase CLI Repository Source: https://docs.qase.io/en/articles/9789909-qase-cli-app Clone the Qase CLI repository from GitHub to build it from source. ```bash git clone https://github.com/qase-tms/qasectl.git && cd qasectl ``` -------------------------------- ### Create a New User Source: https://docs.qase.io/en/articles/8556234-scim Creates a new user in your Qase Enterprise account. ```APIDOC ## POST /scim/v2/Users ### Description Creates a new user in your Qase Enterprise account. User attributes like email, name, and type can be specified. ### Method POST ### Endpoint https://app.qase.io/scim/v2/Users ### Parameters #### Request Body - **schemas** (array) - Required - Specifies the SCIM schema version. Typically `["urn:ietf:params:scim:schemas:core:2.0:User"]`. - **userName** (string) - Required - The user's email address. - **name** (object) - Optional - Contains the user's name components. - **givenName** (string) - Optional - The user's first name. Maximum 60 characters. - **familyName** (string) - Optional - The user's last name. Maximum 60 characters. - **userType** (string) - Optional - The type of user. Supported values: `regular`, `read-only`, `billing`. - **active** (boolean) - Optional - Indicates if the user account should be active. Defaults to `true`. ### Request Example ```json { "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"], "userName": "newuser@example.com", "name": { "givenName": "New", "familyName": "User" }, "userType": "regular", "active": true } ``` ### Response #### Success Response (201) - **id** (string) - The unique identifier for the newly created user. - **userName** (string) - The user's email address. - **name** (object) - Contains the user's name components. - **givenName** (string) - The user's first name. - **familyName** (string) - The user's last name. - **userType** (string) - The type of user. - **active** (boolean) - Indicates if the user account is active. #### Response Example ```json { "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"], "id": "a1b2c3d4-e5f6-7890-1234-567890abcdef", "userName": "newuser@example.com", "name": { "givenName": "New", "familyName": "User" }, "userType": "regular", "active": true, "meta": { "resourceType": "User", "created": "2023-10-27T11:00:00Z", "lastModified": "2023-10-27T11:00:00Z" } } ``` ``` -------------------------------- ### GET /scim/v2/Groups/{hash} Source: https://docs.qase.io/en/articles/8556234-scim Retrieves a specific group resource by its unique hash ID. ```APIDOC ## Get group by ID ### Description Retrieves a single group resource by its hash ID. ### Method GET ### Endpoint https://app.qase.io/scim/v2/Groups/{hash} ### Path Parameters - **hash** (string) - Required - The unique identifier (hash) of the group to retrieve. ### Response #### Success Response (200) - **schemas** (array) - List of schemas. - **id** (string) - The unique identifier for the group. - **displayName** (string) - The name of the group. - **members** (array) - A list of members in the group. - **type** (string) - The type of member (e.g., 'User'). - **value** (integer) - The ID of the member. - **meta** (object) - Metadata about the group. - **resourceType** (string) - The resource type (e.g., 'Group'). - **location** (string) - The URL to access the group resource. ### Response Example ```json { "schemas": [ "urn:ietf:params:scim:schemas:core:2.0:Group" ], "id": "{hash}", "displayName": "Regression Team", "members": [ { "type": "User", "value": 1 }, { "type": "User", "value": 2 } ], "meta": { "resourceType": "Group", "location": "https://app.qase.io/scim/v2/Groups/{hash}" } } ``` ``` -------------------------------- ### GET /scim/v2/Users Source: https://docs.qase.io/en/articles/8556234-scim Retrieves a list of users in your organization. Supports pagination, sorting, and filtering. ```APIDOC ## GET /scim/v2/Users ### Description Retrieves the list of users in your organization. Use `startIndex` and `count` query parameters to receive paginated results. Supports sorting and the filter parameter. ### Method GET ### Endpoint https://app.qase.io/scim/v2/Users ### Query Parameters - **startIndex** (integer) - Optional - The starting index of the user list for pagination. - **count** (integer) - Optional - The number of users to return per page. - **sortBy** (string) - Optional - The attribute to sort the users by (e.g., `name.givenName`). - **sortOrder** (string) - Optional - The order of sorting. Allowed values: `ascending`, `descending`. - **filter** (string) - Optional - A filter expression to subset the returned resources. Supports operators like `eq`, `ne`, `co`, `sw`, `ew`, `pr`, `gt`, `ge`, `lt`, `le`, `and`, `or`, `not`, `()`. - **attributes** (string) - Optional - Comma-separated list of attributes to return. ### Response #### Success Response (200) - **schemas** (array) - List of schema URIs. - **totalResults** (integer) - The total number of results. - **itemsPerPage** (integer) - The number of items returned per page. - **startIndex** (integer) - The starting index of the current page. - **Resources** (array) - An array of user objects. - **id** (string) - The unique identifier for the user. - **userName** (string) - The username (email address) of the user. - **name** (object) - The name object. - **familyName** (string) - The family name of the user. - **givenName** (string) - The given name of the user. - **active** (boolean) - Indicates if the user is active. - **userType** (string) - The type of user. - **title** (string) - The user's title. - **emails** (array) - An array of email objects. - **value** (string) - The email address. - **primary** (boolean) - Indicates if this is the primary email. - **meta** (object) - Metadata about the resource. - **resourceType** (string) - The resource type. - **location** (string) - The URL of the resource. ### Response Example ```json { "schemas": [ "urn:ietf:params:scim:api:messages:2.0:ListResponse" ], "totalResults": 1, "itemsPerPage": 1, "startIndex": 1, "Resources": [ { "schemas": [ "urn:ietf:params:scim:schemas:core:2.0:User" ], "id": "1", "userName": "john@doe.com", "name": { "familyName": "John", "givenName": "Doe" }, "active": true, "userType": "regular", "title": "CEO", "emails": [ { "value": "john@doe.com", "primary": true } ], "meta": { "resourceType": "User", "location": "https://app.qase.io/scim/v2/Users/1" } } ] } ``` ### Request Example ``` GET: https://app.qase.io/scim/v2/Users?attributes=name,userName&filter=NOT(name.familyName eq "Green")&sortBy=name.givenName&sortOrder=ascending&startIndex=2&count=5 ``` ``` -------------------------------- ### Jenkinsfile for Qase Integration Source: https://docs.qase.io/en/articles/7226728-jenkins Use this Jenkinsfile to configure your CI/CD pipeline for running tests and reporting results to Qase. It sets up necessary parameters, environment variables, and stages for test execution. ```groovy pipeline { agent { kubernetes { yaml ''' spec: containers: - name: node image: node:16.14.2-alpine3.15 command: - sleep args: - 99d ''' } } parameters { string(name: 'QASE_PROJECT_CODE') string(name: 'QASE_RUN_ID') string(name: 'QASE_REPORT') string(name: 'QASE_RUN_COMPLETE') string(name: 'QASE_API_BASE_URL') credentials(name: 'QASE_API_TOKEN', credentialType: "Secret text") } environment { QASE_TESTOPS_API_TOKEN = credentials("${params.QASE_API_TOKEN}") } stages { stage('Setup Environment Variables') { steps { script { // Map existing variables to new ones env.QASE_TESTOPS_PROJECT = params.QASE_PROJECT_CODE env.QASE_TESTOPS_RUN_ID = params.QASE_RUN_ID env.QASE_TESTOPS_RUN_COMPLETE = params.QASE_RUN_COMPLETE } } } stage('Run tests') { steps { git url: 'https://github.com/foo/bar.git', branch: 'main' container('node') { sh 'npm i' sh 'npx jest' } } } } } ``` -------------------------------- ### QQL Logical OR Expression Source: https://docs.qase.io/en/articles/5563699-queries-qql-qase-query-language Example of combining two expressions using the logical OR operator in QQL. ```qql expression or expression ``` -------------------------------- ### GitLab CI/CD Configuration for Qase CLI Source: https://docs.qase.io/en/articles/9789909-qase-cli-app This .gitlab-ci.yml file configures a pipeline with 'test' and 'publish' stages. It uses Docker images to install Node.js for running Playwright tests and Docker itself for executing Qase CLI commands to create, upload results to, and complete test runs. ```yaml stages: - test - publish variables: PROJECT_CODE: ${QASE_PROJECT_CODE} API_TOKEN: ${QASE_API_TOKEN} RESULTS_FILE: "results.xml" TEST_RUN_TITLE: "Test Run $(date +'%Y-%m-%d_%H-%M-%S')" TEST_RUN_DESCRIPTION: "Test run description" OUTPUT_FILE: "qase.env" test_and_report: stage: test image: ubuntu:20.04 before_script: - apt-get update && apt-get install -y curl gnupg - curl -fsSL https://deb.nodesource.com/setup_18.x | bash - - apt-get install -y nodejs - node -v && npm -v - npm install - mkdir results script: - npx playwright test --reporter=junit --output=/results/${RESULTS_FILE} || true artifacts: paths: - /results/${RESULTS_FILE} publish: stage: publish image: docker:24.0.5 services: - docker:24.0.5-dind script: - | docker run --rm -v "$(pwd)/results:/results" \ ghcr.io/qase-tms/qase-cli:latest testops run create \ --project ${PROJECT_CODE} \ --token ${API_TOKEN} \ --title "${TEST_RUN_TITLE}" \ --description "${TEST_RUN_DESCRIPTION}" \ --output /results/${OUTPUT_FILE} # step to parse the RUN_ID from the output file - RUN_ID=$(cat results/${OUTPUT_FILE} | grep QASE_TESTOPS_RUN_ID | cut -d'=' -f2) # publishes results to Qase - | docker run --rm -v "$(pwd)/results:/results" \ ghcr.io/qase-tms/qase-cli:latest testops result upload \ --project ${PROJECT_CODE} \ --token ${API_TOKEN} \ --id ${RUN_ID} \ --format junit \ --path /results/${RESULTS_FILE} \ --verbose # marks the Qase test run as complete. - | docker run --rm \ ghcr.io/qase-tms/qase-cli:latest testops run complete \ --project ${PROJECT_CODE} \ --token ${API_TOKEN} \ --id ${RUN_ID} \ --verbose ``` -------------------------------- ### GET /scim/v2/Groups Source: https://docs.qase.io/en/articles/8556234-scim Retrieves a list of groups in your workspace. Supports pagination, sorting, and filtering by displayName. ```APIDOC ## Get groups ### Description Retrieves the list of groups in your workspace. Use `startIndex` and `count` query parameters to receive paginated results. Supports sorting and the filter parameter. ### Method GET ### Endpoint https://app.qase.io/scim/v2/Groups ### Query Parameters - **startIndex** (integer) - Optional - The starting index for pagination. - **count** (integer) - Optional - The number of items to return per page. - **sortBy** (string) - Optional - The attribute to sort by. Allowed values are similar to user sorting. - **sortOrder** (string) - Optional - The order of sorting. Allowed values: `ascending`, `descending`. - **filter** (string) - Optional - Filters groups by `displayName`. Supported operators: `eq`, `ne`, `co`, `sw`, `ew`, `pr`, `gt`, `ge`, `lt`, `le`, `and`, `or`. Note: `not` operator is not supported for groups. ### Response #### Success Response (200) - **schemas** (array) - List of schemas. - **totalResults** (integer) - The total number of results. - **itemsPerPage** (integer) - The number of items per page. - **startIndex** (integer) - The starting index of the current page. - **Resources** (array) - A list of group objects. - **id** (string) - The unique identifier for the group. - **displayName** (string) - The name of the group. - **members** (array) - A list of members in the group. - **type** (string) - The type of member (e.g., 'User'). - **value** (integer) - The ID of the member. - **meta** (object) - Metadata about the group. - **resourceType** (string) - The resource type (e.g., 'Group'). - **location** (string) - The URL to access the group resource. ### Response Example ```json { "schemas": [ "urn:ietf:params:scim:api:messages:2.0:ListResponse" ], "totalResults": 2, "itemsPerPage": 2, "startIndex": 1, "Resources": [ { "schemas": [ "urn:ietf:params:scim:schemas:core:2.0:Group" ], "id": "{hash}", "displayName": "Regression Team", "members": [ { "type": "User", "value": 1 }, { "type": "User", "value": 2 } ], "meta": { "resourceType": "Group", "location": "https://app.qase.io/scim/v2/Groups/{hash}" } } ] } ``` ### Example Usage - **Filter by displayName:** `GET: https://app.qase.io/scim/v2/Groups?filter=displayName` - **Pagination:** `GET: https://app.qase.io/scim/v2/Groups?startIndex=1&count=10` ``` -------------------------------- ### QQL Attribute Value Checking Source: https://docs.qase.io/en/articles/5563699-queries-qql-qase-query-language Demonstrates how to check an attribute's value against a specific operand and value in QQL. ```qql attribute operand value ``` -------------------------------- ### SCIM Error Response Source: https://docs.qase.io/en/articles/8556234-scim Example of a SCIM error response. These responses provide details about what went wrong and how to fix it. ```json { "schemas": [ "urn:ietf:params:scim:api:messages:2.0:Error" ], "status": "400", "scimType": "invalidValue", "detail": "User name 'email@example.com' is invalid: 'not unique'" } ``` -------------------------------- ### Filter by Project Source: https://docs.qase.io/en/articles/5563699-queries-qql-qase-query-language Specify the project for searching test cases using the 'project' attribute. Supports exact match, list inclusion, and exclusion. ```qase_query project = 'DEMO' ``` ```qase_query project in ['DEMO', 'QTC'] ``` ```qase_query project not in ['DEMO'] ``` -------------------------------- ### Count Test Plans in Project DEMO Source: https://docs.qase.io/en/articles/5563699-queries-qql-qase-query-language Find the number of test plans that belong to the project named 'DEMO'. ```sql SELECT (COUNT(*)) project = "DEMO" ``` -------------------------------- ### Count Requirements by Status, Project, and Type Source: https://docs.qase.io/en/articles/5563699-queries-qql-qase-query-language Group requirements by status, project, and type, then count the number of requirements in each unique combination. ```sql SELECT (status, project, type, COUNT(*)) GROUP BY status, project, type ```