Преподаватель QA Academy Игорь Воловский рассказывает о том, как создавать эффективные поисковые запросы в JIRA.
У представителей любой профессии есть инструменты, без которых выполнение ежедневных задач было бы невозможно или затруднено. В секторе ИТ этими «палочками-выручалочками» часто являются различные программные продукты. Так, программист пишет код в Notepad++, веб-дизайнер создает макеты в Photoshop, бизнес-аналитик вносит требования к продукту в Confluence, а тестировщик заносит обнаруженные дефекты в баг-трекинговую систему. Самая популярная из последних сегодня – это JIRA.
Работа с JIRA неспроста входит в учебный план всех курсов QA Academy. Поиск необходимого дефекта, составление отчетов, сбор метрик – выполнение всех этих задач требует от тестировщика умения владеть базовым и продвинутым поиском в системе (на английском – Basic и Advanced Search соответственно).
Basic Search vs Advanced Search: в чем разница?
Поиск в JIRA можно осуществлять двумя различными способами. Отдавая предпочтение Basic Search, пользователь может заполнить несколько из предложенных форм и получить выборку по своему запросу. Basic Search удобно использовать, если сложность запроса невысока. Недостаток такого поиска заключается в невозможности построения комплексных запросов.
Для составления сложных запросов (например, найти все дефекты, которые были внесены после 5 августа 2017 года) необходимо овладеть Advanced Search и понимать JQL – язык запросов в JIRA. О синтаксисе этого языка мы и будем говорить.
Из чего состоит сложный поисковый запрос?
Запрос в Advanced Search – это предложение, состоящее из трех частей, объединенных ключевыми словами. Части запроса:
- Поле (Field)
- Оператор (Operator)
- Значение (Value)
Разберемся подробнее: поле
Поле — тип данных, используемых в JIRA. В качестве примеров можно привести Project, Issuetype, Summary, Security Level, Severity, Priority, Assignee, AffectedVersion, FixVersion, Environment и так далее. Названия полей могут меняться в зависимости от проекта, поэтому важно знать названия полей именно на своем проекте.
Значение — та информация, которая содержится в полях. Это может быть номер версии в случае AffectedVersion, тип Severity, статус бага в системе, имя Assignee или Reporter и так далее. Для эффективного поиска важно понимать, какие значения способно принимать то или иное поле.
Операторы поиска
Операторы — элементы, связывающие поле с его значением. В простейшем случае это может быть «равно» или «не равно» (= и != соответственно) для таких полей, как Issuetype или Status. При использовании оператора = в выражении можно указать только одно значение. Например:
- Status = Open
- Priority != Major
Оператор IN применяется для объединения нескольких значений одного поля. Например, выражение Issuetype IN (Bug, Task) выдаст все issue со значением Bug и Task.
NOT IN, в свою очередь, выдаст результат, не содержащий указанных значений.
Операторы ~ и !~ (содержит/не содержит соответственно) применяются для поиска Issues, содержащих определенный текст в полях Summary, Description или Environment.
Например:
- Summary ~ 'picture upload’
- Environment !~ 'Chrome’
Операторы >, >=, <, <= используются с полями, содержащими даты или другие числовые значения. Также их можно использовать с полями, содержащими информацию, которую можно расположить в логическом порядке. Например, в случае поля Priority, значение «Critical» будет больше, чем «Major» (Priority >= Major).
Операторы IS, IS NOT используются только с ключевыми словами EMPTY и NULL. Применяются, когда указанное поле не имеет значения (не заполнено).
Например:
- Assignee is EMPTY.
Об остальных операторах (WAS, WAS IN, WAS NOT IN, WAS NOT, CHANGED) мы поговорим чуть позже.
Ключевые слова
А сейчас нужно упомянуть ключевые слова, которые связывают между собой отдельные выражения и позволяют объединить их в длинный запрос. Примеры ключевых: OR, AND, NOT, EMPTY, NULL, ORDER BY.
OR, AND
Схожие по смыслу, но противоположные по значению ключевые слова. OR увеличивает размер выборки, расширяя число возможных значений. AND, наоборот, уменьшает количество подходящих вариантов, поскольку каждый из Issue в результате должен иметь весь перечень запрашиваемых значений.
Например:
- Status = Closed OR Assignee = i.p.freely – результатом, будут Issue, удовлетворяющие любому из условий запроса.
- Issuetype = Bug AND reporter = v.pupkin – результатом будут Issue, удовлетворяющие двум условиям одновременно.
NOT
Чаще всего употребляется вместе с IN или EMPTY. По сути используется для указания негативного значения.
По запросу «Attachments IS NOT EMPTY» вы увидите список Issues с приложениями.
EMPTY
Поле пусто (не имеет значения).
Например:
- Assignee IS EMPTY
NULL
Похоже на EMPTY по значению.
Пример:
- duedate is NULL.
ORDER BY
Используется для упорядочивания результатов запроса. ASC, дописанное в конце такого запроса, упорядочит результаты по возрастанию. DESC – по убыванию.
Задача на закрепление материала
Давайте попробуем закрепить эту непростую информацию и создать сложный запрос.
Задача: необходимо найти все открытые баги с приоритетом не ниже Major включительно из версии 1.1.
Попробуйте создать запрос самостоятельно, а потом смотрите ответ.
Ответ:
Исходя из условий задачи, нас интересуют:
- Номер версии
- Приоритет
- Статус
Запрос должен выглядеть так:
issuetype=Bug AND priority>=Major AND AffectedVersion=1.1.
В создании сложных запросов мы с вами еще потренируемся, а пока подытожим то, что узнали сегодня:
- В JIRA существует два вида поиска: Basic и Advanced. Первый вид удобно использовать для простых запросов, второй – позволяет создавать сложные запросы.
- Язык запросов в JIRA называется JQL. И владение данным языком отличает посредственного тестировщика от профессионала.
- Выражение в Advanced Search состоит из Поля (Field), Оператора (Operator) и Значения (Value), объединенных ключевыми словами (Keywords).
- Продвинутый пользователь JIRA должен уметь пользоваться операторами и ключевыми словами. С некоторыми операторами мы познакомились сегодня, в следующей статье продолжим.