Перейти к основному содержимому

AQL

В некоторых разделах ТестОпс, таких как Дашборды, или при использовании API ТестОпс, вы можете использовать текстовые запросы, чтобы выбрать нужные тест-кейсы, результаты тестов или запуски. Для этих запросов используется язык AQL (Allure Query Language).

Каждый запрос на языке AQL состоит из двух частей:

  • названия поля;
  • требуемого значения для этого поля.

Например, чтобы найти все тест-кейсы с названием «Мой тест», используйте запрос:

name = "Мой тест"

Чтобы найти все тест-кейсы, содержащие слово «тест» в названии, используйте запрос:

name ~= "тест"

Один запрос может содержать несколько условий. Например, чтобы найти все тест-кейсы со словом «тест», которые были созданы Иваном, используйте запрос:

name ~= "тест" and createdBy = "Иван"

Если вам нужно найти тест-кейсы, которые удовлетворяют хотя бы одному из указанных условий, используйте ключевое слово or вместо and. Вы также можете комбинировать and и or в одном запросе, но в таком слуучае учитывайте порядок выполнения операций.

name ~= "тест" or createdBy = "Иван"

Если поле имеет числовое значение, используйте дополнительные операции сравнения (>, <, <= и >=) без кавычек:

id >= 100

Если поле имеет логическое значение (т. е. либо да, либо нет), в качестве его значения используется одно из двух ключевых слов: true или false. Например, чтобы найти все тест-кейсы, находящиеся в карантине, используйте запрос:

muted = true

Вы можете указать ключевое слово not, чтобы инвертировать условие запроса. Например, чтобы найти все тест-кейсы, которые не содержат слово «тест» и не созданы Иваном, используйте запрос:

not name ~= "тест" and not createdBy = "Иван"

Вместо not можно также использовать !=:

name != "Мой тест" and createdBy != "Иван"

Полный список доступных полей расположен ниже.

Доступные поля

Важно

AQL для результатов тестов доступен только через API-запросы. В текущей версии ТестОпс фильтрация результатов тестов с помощью AQL-запросов через веб-интерфейс не поддерживается.

НазваниеОписаниеПример
idID тест-кейсаid = 17
nameНазвание тест-кейсаname = "Первый тест"

name ~= "тест"

name != "Мой тест"

not name = "Мой тест"
tagТеги тест-кейса. Условие будет выполнено, если хотя бы один тег соответствует значению.

Можно указать название тега или его ID
tag = "smoke"

tag = "web" and tag = "smoke"

tag = 12
issueЗадачи из таск-трекера, связанные с тест-кейсом.

Можно указать номер задачи или ее ID
issue in ["AS-1", "AS-3"]

issue = 123
roleПользователи, назначенные на тест-кейс в определенной роли. Если роль не назначена, значение будет равно null.

Можно указать название роли или ее ID
role["Owner"] = "Иван"

role["Manager"] = "Александр"

role = 123
memberВсе пользователи, назначенные на тест-кейсmember in ["Иван", "Александр"]
cfКастомные поля тест-кейса. Если поле пустое, значение будет равно null.

Можно указать название поля или его ID
cf["Epic"] = "Auth"

cf["Story"] = "Story 2"

cf = 123
cfvВсе значения кастомных полейcfv in ["Auth", "Story 2"]

cfv = 123
layerТестовый слой. Если слой не установлен, значение будет равно null.

Можно указать название слоя или его ID
layer = "API"

layer = 123
statusСтатус воркфлоу.

Можно указать название статуса или его ID
status = "Активный"

status = 123
workflowВоркфлоу тест-кейса.

Можно указать название воркфлоу или его ID
workflow = "Default Manual"

workflow = 123
testPlanТест-план, частью которого является тест-кейс.

Можно указать название тест-плана или его ID
testPlan = "smoke tests"

testPlan = 123
automationУсловие, является ли тест-кейс автоматизированнымautomation = true
mutedУсловие, находится ли тест-кейс в карантинеmuted = true
mutedDateДата переноса тест-кейса в карантинmutedDate < 1569430502709
createdDateДата создания тест-кейсаcreatedDate < 1569430502709
createdByПользователь, создавший тест-кейсcreatedBy = "Иван"
lastModifiedDateДата последнего изменения тест-кейсаlastModifiedDate < 1569430502709
lastModifiedByПользователь, изменивший тест-кейс последнимlastModifiedBy = "Александр"

Работа с датами

Даты в ТестОпс представлены в виде Unix-времени (количество секунд с 1 января 1970 года), поэтому работать с ними нужно как с числами. Для преобразования даты в Unix-время или наоборот используйте специальные инструменты, такие как unixtimestamp.com.

Важно

В AQL используется вариант Unix-времени с миллисекундами (13 цифр). Если вам не нужна дополнительная точность, вы можете добавить три нуля в конце нужного значения:

createdDate < 1569430502

createdDate < 1569430502000

Например, чтобы найти все тест-кейсы, созданные в 2023 году, используйте запрос:

createdDate > 1672531200000 and createdDate < 1704067200000

Выбор подполей

Значения некоторых полей являются объектами, которые содержат другие поля. Вы можете указать нужное подполе, используя квадратные скобки:

cf["Story"] = "Аутентификация"

Пустые значения полей

Некоторые поля могут не иметь значения. Чтобы проверить, есть ли у поля значение, укажите ключевое слово null.

Например, чтобы найти тест-кейсы, у которых нет владельца, используйте запрос:

role["Owner"] = null

или

role["Owner"] is null

Указание нескольких значений

Если вам нужно указать в условии несколько значений для поля, перечислите их в квадратных скобках и используйте ключевое слово in.

Например, запрос:

name in ["Тест 1", "Тест 2", "Тест 3"]

идентичен запросу:

name = "Тест 1" or name = "Тест 2" or name = "Тест 3"

Использование скобок

Иногда совместное использование ключевых слов and и or в одном запросе может привести к нежелательному результату.

Например, пример запроса ниже найдет все тест-кейсы, созданные Иваном, и только те тест-кейсы, созданные Александром, которые содержат слово «тест» в названии:

createdBy = "Иван" or createdBy = "Александр" and name ~= "тест"

Это происходит потому, что операция and имеет более высокий приоритет, чем операция or. Поэтому сначала будут найдены все тест-кейсы, созданные Александром и содержащие слово «тест». После этого будут найдены все тест-кейсы, созданные Иваном, и добавлены к предыдущему результату.

Вы можете изменить порядок операций с помощью скобок. В примере выше, чтобы сначала найти все тест-кейсы, созданные либо Иваном, либо Александром, а затем отфильтровать их по слову «тест», запрос должен быть изменен следующим образом:

(createdBy = "Иван" or createdBy = "Александр") and name ~= "test"

Инвертирование условий

Если вам нужно инвертировать результат условия, укажите ключевое слово not.

Например, чтобы найти все тест-кейсы, которые не имеют тегов nightly и devbuild, используйте запрос:

not tag in ["nightly", "devbuild"]