AQL
В некоторых разделах ТестОпс, таких как Дашборды, или при использовании API ТестОпс, вы можете использовать текстовые запросы, чтобы выбрать нужные тест-кейсы, результаты тестов или запуски. Для этих запросов используется язык AQL (Allure Query Language).
Каждый запрос на языке AQL состоит из двух частей:
- названия поля;
- требуемого значения для этого поля.
Например, чтобы найти все тест-кейсы с названием «Мой тест», используйте запрос:
sql
name = "Мой тест"
Чтобы найти все тест-кейсы, содержащие слово «тест» в названии, используйте запрос:
sql
name ~= "тест"
Один запрос может содержать несколько условий. Например, чтобы найти все тест-кейсы со словом «тест», которые были созданы Иваном, используйте запрос:
sql
name ~= "тест" and createdBy = "Иван"
Если вам нужно найти тест-кейсы, которые удовлетворяют хотя бы одному из указанных условий, используйте ключевое слово or
вместо and
. Вы также можете комбинировать and
и or
в одном запросе, но в таком слуучае учитывайте порядок выполнения операций.
sql
name ~= "тест" or createdBy = "Иван"
Если поле имеет числовое значение, используйте дополнительные операции сравнения (>
, <
, <=
и >=
) без кавычек:
sql
id >= 100
Если поле имеет логическое значение (т. е. либо да, либо нет), в качестве его значения используется одно из двух ключевых слов: true
или false
. Например, чтобы найти все тест-кейсы, находящиеся в карантине, используйте запрос:
sql
muted = true
Вы можете указать ключевое слово not
, чтобы инвертировать условие запроса. Например, чтобы найти все тест-кейсы, которые не содержат слово «тест» и не созданы Иваном, используйте запрос:
sql
not name ~= "тест" and not createdBy = "Иван"
Вместо not
можно также использовать !=
:
sql
name != "Мой тест" and createdBy != "Иван"
Полный список доступных полей расположен ниже.
Доступные поля
Важно
AQL для результатов тестов доступен только через API-запросы. В текущей версии ТестОпс фильтрация результатов тестов с помощью AQL-запросов через веб-интерфейс не поддерживается.
Название | Описание | Пример |
---|---|---|
id | ID тест-кейса | 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 году, используйте запрос:
sql
createdDate > 1672531200000 and createdDate < 1704067200000
Выбор подполей
Значения некоторых полей являются объектами, которые содержат другие поля. Вы можете указать нужное подполе, используя квадратные скобки:
sql
cf["Story"] = "Аутентификация"
Пустые значения полей
Некоторые поля могут не иметь значения. Чтобы проверить, есть ли у поля значение, укажите ключевое слово null
.
Например, чтобы найти тест-кейсы, у которых нет владельца, используйте запрос:
sql
role["Owner"] = null
или
sql
role["Owner"] is null
Указание нескольких значений
Если вам нужно указать в условии несколько значений для поля, перечислите их в квадратных скобках и используйте ключевое слово in
.
Например, запрос:
sql
name in ["Тест 1", "Тест 2", "Тест 3"]
идентичен запросу:
sql
name = "Тест 1" or name = "Тест 2" or name = "Тест 3"
Использование скобок
Иногда совместное использование ключевых слов and
и or
в одном запросе может привести к нежелательному результату.
Например, пример запроса ниже найдет все тест-кейсы, созданные Иваном, и только те тест-кейсы, созданные Александром, которые содержат слово «тест» в названии:
sql
createdBy = "Иван" or createdBy = "Александр" and name ~= "тест"
Это происходит потому, что операция and
имеет более высокий приоритет, чем операция or
. Поэтому сначала будут найдены все тест-кейсы, созданные Александром и содержащие слово «тест». После этого будут найдены все тест-кейсы, созданные Иваном, и добавлены к предыдущему результату.
Вы можете изменить порядок операций с помощью скобок. В примере выше, чтобы сначала найти все тест-кейсы, созданные либо Иваном, либо Александром, а затем отфильтровать их по слову «тест», запрос должен быть изменен следующим образом:
sql
(createdBy = "Иван" or createdBy = "Александр") and name ~= "test"
Инвертирование условий
Если вам нужно инвертировать результат условия, укажите ключевое слово not
.
Например, чтобы найти все тест-кейсы, которые не имеют тегов nightly и devbuild, используйте запрос:
sql
not tag in ["nightly", "devbuild"]