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-запросов через веб-интерфей с не поддерживается.
- Тест-кейсы
- Результаты тестов
- Запуски
Название | Описание | Пример |
---|---|---|
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 = "Александр" |
Название | Описание | Пример |
---|---|---|
id | ID результата теста | id = 17 |
name | Название результата теста | name = "Результат первого теста" |
fullName | Полное название результата теста | fullName = "Результат первого теста от 01/01/2023" |
testCase | Название тест-кейса | testCase = "Первый тест-кейс" |
status | Результат выполнения теста | status = "failed" |
category | Категория ошибок | category = "IO Exception" |
tag | Теги тест-кейса. Условие будет выполнено, если хотя бы один тег соответствует значению | tag = "smoke" tag = "web" and tag = "smoke" tag in ["smoke", "regress"] |
issue | Задачи из таск-трекера, связанные с тест-кейсом | issue in ["AS-1", "AS-3"] |
role | Пользователи, назначенные на тест-кейс в определенной роли. Если роль не назначена, значение будет равно null | role["Owner"] = "Иван" role["Manager"] = "Александр" |
member | Все пользователи, назначенные на тест-кейс | member in ["Иван", "Александр"] |
testedBy | Тестировщик, выполнивший тест | testedBy = "Иван" |
cf | Кастомные поля тест-кейса. Если поле пустое, значение будет равно null | cf["Epic"] = "Auth" cf["Story"] = "Story 2" |
cfv | Все значения кастомных полей | cfv in ["Auth", "Story 2"] |
ev | Переменные окружения. Если переменная не указана, значение будет равно null | ev["OS"] = "Linux" ev["Browser"] = "Opera" |
evv | Все значения переменных окружения | evv in ["Linux", "Opera"] |
layer | Тестовый слой. Если слой не установлен, значение будет равно null | layer = "API" |
muted | Условие, находится ли тест-кейс в карантине | muted = true |
hidden | Условие, скрыт ли результат теста ** | hidden = true |
launch | Название запуска | launch = "release-1.0" launch ~= "release" |
createdDate | Дата создания тест-кейса | createdDate < 1569430502709 |
createdBy | Пользователь, создавший тест-кейс | createdBy = "Иван" |
lastModifiedDate | Дата последнего изменения тест-кейса | lastModifiedDate < 1569430502709 |
lastModifiedBy | Пользователь, изменивший тест-кейс последним | lastModifiedBy = "Александр" |
** — результат теста может иметь поле hidden
, если:
- тест был перезапущен и текущий результат не является последним (самым актуальным на данный момент);
- результат теста был намеренно скрыт пользователем.
Название | Описание | Пример |
---|---|---|
id | ID запуска | id = 17 |
name | Название запуска | name = "release-1.0" name ~= "release" |
tag | Теги запуска. Условие будет выполнено, если хотя бы один тег соответствует значению | tag = "regular" tag = "regular" and tag = "resident" tag in ["release", "pre-release"] tag = 123 |
issue | Задачи из таск-трекера, связанные с запуском | issue in ["AS-1", "AS-3"] issue = 123 |
job | Название джобы | job = "jenkins_master" job = 123 |
ev | Переменные окружения. Если переменная не указана, значение будет равно null | ev["OS"] = "Linux" ev["Browser"] = "Opera" |
evv | Все значения переменных окружения | evv = "https://demo.testops.cloud" evv = 123 |
closed | Условие, является ли запуск завершенным | closed = true |
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"