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"]
