Queries (QQL, Qase Query Language)

Queries are available in Business and Enterprise subscriptions.

What are queries in software testing?

Queries help you make analytical requests to get specific data from your Qase projects.

Queries are based on Qase Query Language (QQL). You can access Queries from the top-left menu.

From this page, you can manage saved queries and create new ones.

Saved Queries can be used with the QQL widget.

QQL widget allows you to leverage advanced query searches, and pin frequently used or preferred QQL searches to your dashboards to facilitate quicker and more comprehensive monitoring of testing activities.

Create a new query


You can click on either one of the two buttons to create a new query.

Here, you can: 1. Select the entity from the drop down

2. Write your query

3. Search the query

4. Save the query

5. Choose the fields to be displayed in the table.

QQL Structure


QQL consists of two parts: "Entity" + "Query". Both are required to perform a search.

Here are a few examples:

Entity can be selected from the drop-down, and Projects, by default, include all projects available to a user.

If your expression contains a syntax error, the erroneous element will be highlighted in red, as well as you will see a red "x" icon appearing in the expression field:

Entities

Below are the available entities. Click on an entity to skip to the attributes available for it.

Expressions

Currently, QQL supports seven expression types. They are listed here in the decreasing priority order:

Expression Type
Example

Parenthesis

Negation

Logical Expression

or

Logical AND

Logical OR

Checking the attribute value

Sorting by field

Supported operands:

<

less than

integer

<=

less than or equal to

integer

>

greater than

integer

>=

greater than or equal to

integer

=, is

equal to

integer, bool

!=

not equal to

integer, bool

~

includes

string, text

!~

does not include

string, text

in

includes (array)

array

not in

does not include (array)

array

is empty

no value

is not empty

value exists

Data types:

Integer

110

>, >=, <, <=, =, !=

String

Some text

~, !~

Boolean

True or False

is

Array

['value 1', 'value 2'] ; ('value 1', 'value 2') ; [ ]

in

Null

null

Functions:

Name
Return type
Arguments
Description

currentUser()

integer

-

Returns an ID of current user

activeUsers()

integer

-

Returns IDs of all active users

inactiveUsers()

integer

-

Returns IDs of all inactive users

now()

integer

"+Nd" / "-Nd"- modifies returned value, adding/subtracting N days.

In "+Nd", replace d with ​ w for weeks; ​ m for months. ​

N must be an integer

Returns current timestamp

startOfDay()

integer

'YYYY-mm-dd' - modifies returned value to the start of this input date.

"+/-N[d/w/m]" - modifies returned value by N days/weeks/months.

Returns timestamp of start of current day.

startOfWeek()

integer

'YYYY-mm-dd' - modifies returned value to the start of first day of the week (relative to the input date)

"+/-N[d/w/m]" - modifies returned value by N days/weeks/months.

Returns timestamp of start of current week.

startOfMonth()

integer

'YYYY-mm-dd' - modifies returned value to the start of first day of the month (relative to the input date)

"+/-N[d/w/m]" - modifies returned value by N days/weeks/months.

Returns timestamp of start of current Month.

endOfDay()

integer

'YYYY-mm-dd' - modifies returned value to the end of the input date.

"+/-N[d/w/m]" - modifies returned value by N days/weeks/months.

Returns timestamp of end of current day.

endOfWeek()

integer

'YYYY-mm-dd' - modifies returned value to the end of first day of the week (relative to the input date)

"+/-N[d/w/m]" - modifies returned value by N days/weeks/months.

Returns timestamp of end of current Week.

endOfMonth()

integer

'YYYY-mm-dd' - modifies returned value to the end of first day of the month (relative to the input date)

"+/-N[d/w/m]" - modifies returned value by N days/weeks/months.

Returns timestamp of end of current Month.

Entity fields


Test case:

identifier

Test case title,

Pre/postconditions,

Description

creator the test case.

If a test case is created by a reporter app

Replace [name] with reporter name.

Reporters:


Playwright;

cucumberjs;

cypress;

jest;

newman;

testcafe;

cucumber3; cucumber4; cucumber5;

junit4; jnuit5;

testng;

pytest;

robotframework;

xctest;

phpunit;

codeception.

Custom fields: a complex attribute with a specific syntax, see examples.

Custom field values. (by all custom fields)

Time of case creation

The user who created the case

Last modified date

updatedBy

Last modified by user

Check whether the case has been deleted or not

Check whether the case has been flagged as flaky

By default, search is performed across all projects.

If required, you can specify a project code.

Test case's suite title

Test case's milestone title

Test case's tags

Defects:

identifier

Defect title

Actual result

Project

Statuses


open; resolved; in progress; invalid

Severity


undefined;

blocker;

critical;

major;

normal;

minor;

trivial

The user who created the defect

If a defect has been created by a reporter app

Replace [name] with reporter name.

Reporters:


Playwright;

cucumberjs;

cypress;

jest;

newman;

testcafe;

cucumber3; cucumber4; cucumber5;

junit4; jnuit5;

testng;

pytest;

robotframework;

xctest;

phpunit;

codeception.

The user who created the defect

Time of creation

Time of update

Time of resolution

Whether the defect is deleted

Whether the defect is resolved

Defect's milestone title

Custom field values (by all custom fields)

Custom fields: a complex attribute with a specific syntax, see examples.

Defect's tags

Test run:

Identifier

Title

Description

Project

Title of the plan used

Status

The user who created the run

If a test run has been created by a reporter app

Replace [name] with reporter name.

Reporters:


Playwright;

cucumberjs;

cypress;

jest;

newman;

testcafe;

cucumber3; cucumber4; cucumber5;

junit4; jnuit5;

testng;

pytest;

robotframework;

xctest;

phpunit;

codeception.

The user who created the run

Time of start

Time of finish

Time of removal

Whether the run is deleted

Whether the run is started

Whether the run is ended

Whether the run has a public link

Whether the run is automated

Run's milestone title

Custom field values (by all custom fields)

Custom fields: a complex attribute with a specific syntax, see examples.

Run's tags

Test run results:

Identifier

Comment

Test Run Result's case title

Test Run title

Project

Status


Passed;

Failed;

Blocked;

Retest;

Skipped;

Deleted;

In progress;

Invalid

The user who created the result

If a test run result has been created by a reporter app

Replace [name] with reporter name.

Reporters:


Playwright;

cucumberjs;

cypress;

jest;

newman;

testcafe;

cucumber3; cucumber4; cucumber5;

junit4; jnuit5;

testng;

pytest;

robotframework;

xctest;

phpunit;

codeception.

The user who created the run

Time of finish

Whether the result is deleted

Time spent (in milliseconds)

Test plan:

Identifier

Title

Plan's description

Project

Time of creation

Time of the last update

Time of deletion

Whether the plan is deleted

Requirement:

Identifier

Parent requirement's title

Project

The user who created the requirement

The user who created the requirement

Title

Description

Status


valid;

draft;

review;

rework;

finish;

implemented;

not-testable;

obsolete.

Type


epic;

user-story;

feature.

Time of creation

Time of last update

Time of deletion

Whether the requirement is deleted

Examples of Queries



Grouping & Aggregates

QQL now supports Grouping and Aggregation functions. It has become easier to summarize large sets of data with aggregation and grouping. ​ Use it to get quick counts, grouped insights, or high-level summaries of your entities. ​

Functions:

  • SELECT() — choose which fields or calculated values to return

  • COUNT() — count matching records

  • MIN() / MAX() — find the earliest or latest value

  • FIRST() / LAST() — return the first or last item in the current sort order

  • GROUP BY — group results by a field

  • HAVING — filter grouped results based on aggregate conditions

Fields Supported in SELECT() and GROUP BY

Most system fields can be used in SELECT and GROUP BY. Some fields (like tags or custom fields) are filter-only and cannot be grouped.

Basic Fields

Field

SELECT()

group/aggregate

Entity

id

Yes

Yes

case, defect, run, result, plan, requirement

title

Yes

Yes

case, defect, run, plan, requirement

description

Yes

Yes

case, run, plan, requirement

preconditions

Yes

Yes

case

postconditions

Yes

Yes

case


Status & Type

Field

SELECT()

group/aggregate

Entity

status

Yes

Yes

case, defect, run, result, requirement

type

Yes

Yes

case, requirement

behavior

Yes

Yes

case

automation

Yes

Yes

case

isManual

Yes

Yes

case

isToBeAutomated

Yes

Yes

case

isMuted

Yes

Yes

case


Priority & Severity

Field

SELECT()

group/aggregate

Entity

severity

Yes

Yes

case, defect

priority

Yes

Yes

case

layer

Yes

Yes

case

isFlaky

Yes

Yes

case


Relations

Field

SELECT()

group/aggregate

Entity

project

Yes

Yes

case, defect, run, result, plan, requirement

milestone

Yes

Yes

case, defect

suite

Yes

Yes

case


Timestamps

Field

SELECT()

group/aggregate

Entity

created

Yes

Yes

case, defect, plan, requirement

updated

Yes

Yes

case, defect, plan, requirement

deleted

Yes

Yes

run, plan, requirement


Author Fields

Field

SELECT()

group/aggregate

Entity

author

Yes

Yes

case, defect, run, result, requirement

updatedBy

Yes

Yes

case

createdBy

Yes

Yes

case, defect, run, result, requirement


Boolean Fields

Field

select()

group/aggregate

Entity

isDeleted

Yes

Yes

case, defect, run, result, plan, requirement


Fields with CustomBuilder (Filter-Only)

Field

select()

group/aggregate

Entity

tags

WHERE clause only

No

case, defect, run

isAiGenerated

WHERE clause only

No

case

cfv

WHERE clause only

No

case, defect, run

cf["field"] (custom fields)

WHERE clause only

No

case, defect, run


Advanced Query Examples

Below are examples showing how to use SELECT, GROUP BY, and aggregates across different Qase entities.

Test Case Examples

Query

Description

Total number of test cases

Count of critical, high-priority “actual” test cases in DEMO

Count test cases per status

Count by combined groups

Find oldest and newest test case

Earliest and latest update times

First and last test case by current sort

Only statuses with at least one test case


Defect Examples

Query

Description

Total number of defects

Count of critical open defects in DEMO

Count defects per status

Count defects by grouped dimensions

First and last defect title

Severity levels with at least one defect


Test Run Examples

Query

Description

Total number of test runs

Count active runs in DEMO

Count runs per status

First and last run titles

Only statuses with at least one run


Run Result Examples

Query

Description

Total number of test results

Count active results in a specific run

Count results per status

Only statuses with at least one result


Plan Examples

Query

Description

Total number of test plans

Count plans in DEMO project

Plans grouped by project

Oldest & newest plans

Earliest & latest updates

First & last plan titles

Only projects with at least one plan


Requirement Examples

Query

Description

Total number of requirements

Count of valid user stories in DEMO

Requirements per status

Multidimensional grouping

Oldest & newest requirements

Earliest & latest updates

First & last requirement

Only statuses containing requirements


Export Query results

Query results can be exported as a CSV file. The exported CSV will include only the columns currently selected in your view.

You are free to leave the Queries screen while the export is prepared. You'll see a notification when the export is ready for download.

Last updated