JQL-запросы
Updated Jul 2026
Что такое JQL?
JQL (Jira Query Language) — это структурированный язык запросов для поиска задач в Jira. Освоение JQL превращает вас из человека, который кликает по фильтрам, в того, кто может создавать дашборды, автоматизировать отчёты и извлекать инсайты, влияющие на решения по качеству.
Основы JQL
Структура
field operator value [AND/OR field operator value]
[ORDER BY field ASC/DESC]
Распространённые операторы
| Оператор | Значение | Пример |
|---|---|---|
= |
Равно | status = "Open" |
!= |
Не равно | status != "Closed" |
in |
В списке | priority in (Critical, High) |
not in |
Не в списке | status not in (Done, Closed) |
~ |
Содержит (текстовый поиск) | summary ~ "checkout" |
>, <, >=, <= |
Сравнение | created >= "2024-01-01" |
is EMPTY |
Поле не имеет значения | assignee is EMPTY |
is not EMPTY |
Поле имеет значение | assignee is not EMPTY |
was |
Историческое значение | status was "In Progress" |
changed |
Поле было изменено | priority changed |
Необходимые JQL-запросы для QA
Отслеживание багов
-- All open critical bugs assigned to your team
project = SHOP AND type = Bug AND priority in (Critical, Highest)
AND status not in (Done, Closed) AND team = "QA Engineering"
-- Bugs created this sprint
project = SHOP AND type = Bug AND sprint in openSprints()
AND created >= startOfSprint()
-- Your unresolved tickets ordered by priority
assignee = currentUser() AND resolution = Unresolved
ORDER BY priority DESC, created ASC
-- Bugs linked to a specific epic (traceability)
project = SHOP AND type = Bug AND "Epic Link" = SHOP-1234
-- Flaky test tickets that haven't been touched in 2 weeks
project = SHOP AND labels = flaky-test AND updated <= -14d
-- Bugs that were reopened (quality of fixes)
project = SHOP AND type = Bug AND status changed to "Reopened"
AND status changed DURING (startOfSprint(), now())
Мониторинг спринта
-- All stories without linked test cases
project = SHOP AND type = Story AND sprint in openSprints()
AND NOT issueFunction in linkedIssuesOf("type = Test")
-- Stories ready for testing
project = SHOP AND type = Story AND status = "Ready for Test"
AND sprint in openSprints()
-- Blocked items
project = SHOP AND status = "Blocked"
AND sprint in openSprints()
ORDER BY priority DESC
Метрики качества
-- Bug escape rate: bugs found in production this month
project = SHOP AND type = Bug AND labels = "production"
AND created >= startOfMonth()
-- Defect density by component
project = SHOP AND type = Bug AND created >= startOfMonth()
ORDER BY component ASC
-- Average time from bug creation to resolution
project = SHOP AND type = Bug AND resolution = "Done"
AND resolved >= startOfMonth()
ORDER BY created ASC
-- Regression bugs (things that used to work)
project = SHOP AND type = Bug AND labels = "regression"
AND created >= startOfSprint()
Создание дашбордов с помощью JQL
Дашборды объединяют несколько JQL-запросов в визуальный обзор. Вот необходимые виджеты дашборда для QA-команды.
Дашборд качества спринта
| Виджет | JQL | Тип отображения |
|---|---|---|
| Открытые баги по приоритету | project = SHOP AND type = Bug AND status not in (Done, Closed) |
Круговая диаграмма |
| Создано vs решено багов (30 дней) | Создано: project = SHOP AND type = Bug AND created >= -30d Решено: ... AND resolved >= -30d |
Линейный график |
| Бэклог нестабильных тестов | labels = flaky-test AND resolution = Unresolved |
Список задач |
| Выполнение тестов в этом спринте | type = "Test Execution" AND sprint in openSprints() |
Статистика |
| Неназначенные баги | project = SHOP AND type = Bug AND assignee is EMPTY AND resolution = Unresolved |
Список задач |
Дашборд готовности к релизу
-- Tests not yet executed for the release
type = "Test" AND fixVersion = "2.4.0" AND "Test Status" != "Passed"
-- Open blockers for the release
project = SHOP AND type = Bug AND priority = Blocker
AND fixVersion = "2.4.0" AND resolution = Unresolved
-- Stories without test coverage
project = SHOP AND type = Story AND fixVersion = "2.4.0"
AND NOT issueFunction in linkedIssuesOf("type = Test AND status = Passed")
Функции JQL
JQL включает встроенные функции, делающие запросы динамичными и переиспользуемыми.
| Функция | Что делает | Пример |
|---|---|---|
currentUser() |
Ваше имя пользователя Jira | assignee = currentUser() |
now() |
Текущая дата/время | created > now("-7d") |
startOfDay() |
Начало сегодняшнего дня | created >= startOfDay() |
startOfWeek() |
Начало текущей недели | created >= startOfWeek() |
startOfMonth() |
Начало текущего месяца | created >= startOfMonth() |
startOfSprint() |
Начало текущего спринта | created >= startOfSprint() |
endOfSprint() |
Конец текущего спринта | due <= endOfSprint() |
openSprints() |
Текущие активные спринты | sprint in openSprints() |
closedSprints() |
Завершённые спринты | sprint in closedSprints() |
membersOf("group") |
Все пользователи группы | assignee in membersOf("qa-team") |
Синтаксис относительных дат
-- Last 7 days
created >= -7d
-- Last 2 weeks
created >= -2w
-- Since specific date
created >= "2024-01-15"
-- Between dates
created >= "2024-01-01" AND created <= "2024-01-31"
-- This quarter
created >= startOfMonth(-2) AND created <= endOfMonth()
Сохранённые фильтры и подписки
Создание сохранённых фильтров
Сохраняйте часто используемые запросы как фильтры, чтобы не набирать их заново:
- Выполните JQL-запрос
- Нажмите «Save as» и дайте описательное имя
- Поделитесь с командой (установите разрешения на «Project: SHOP»)
Подписки на фильтры
Подпишитесь на фильтр для получения email-уведомлений по расписанию:
- Ежедневное утреннее письмо: фильтр «Баги, созданные вчера»
- Еженедельная сводка: фильтр «Баги, решённые на этой неделе»
- Конец спринта: фильтр «Открытые баги текущего спринта»
Использование фильтров в автоматизации
Правила автоматизации Jira могут запускать действия на основе результатов фильтра:
When: Scheduled (every morning at 9 AM)
If: Filter "Unassigned Critical Bugs" returns results
Then: Send Slack message to #qa-channel with issue list
Советы и приёмы JQL
Комбинирование с фильтрами досок
Доски Jira используют JQL как базовый фильтр. Настройте вашу QA-доску:
-- QA board filter: Show items that need testing
project = SHOP AND (
(type = Story AND status = "Ready for Test")
OR (type = Bug AND assignee = currentUser() AND status = "In Verification")
OR (type = "Test" AND sprint in openSprints())
)
ORDER BY priority DESC
Текстовый поиск
-- Search in summary and description
text ~ "payment timeout"
-- Search only in summary
summary ~ "checkout"
-- Search only in description
description ~ "NullPointerException"
-- Search in comments
comment ~ "cannot reproduce"
Советы по производительности
- Используйте
project = Xв начале запроса для сужения области поиска - Избегайте
text ~на больших проектах (медленный полнотекстовый поиск) - Используйте
ORDER BYтолько при необходимости (добавляет время обработки) - Предпочитайте
labelsвместо текстового поиска для категоризации
Практическое упражнение
- Напишите JQL-запрос, который находит все баги, созданные вами в текущем спринте
- Напишите JQL-запрос для открытых тикетов нестабильных тестов вашей команды, не обновлявшихся 2 недели
- Создайте сохранённый фильтр «Критические баги, блокирующие релиз» и поделитесь с командой
- Создайте дашборд с как минимум 3 виджетами, используя JQL-запросы из этого раздела
- Настройте ежедневную email-подписку на «Новые баги, созданные вчера»
- Напишите JQL-запрос, выявляющий истории текущего спринта без привязанных тест-кейсов