Jira & JQL Cheat Sheet for Testers

Everything a tester needs from Jira on one page — issue types, the defect life cycle, bug report fields and, above all, JQL: operators, functions, history searches and 15 ready-made queries you can paste into Jira's advanced search. Replace ABC with your project key. Full learning path: The Complete Jira for Testers Guide.

Advertisement

Issue Types

Type Meaning
Epic A large feature spanning several sprints
Story A user-facing requirement with acceptance criteria
Task Work that isn't a user story
Sub-task A piece of a parent issue
Bug A defect

Defect Life Cycle

New → Assigned → In Progress → Fixed → Ready for Retest → Closed
                                   ↘ Reopened (retest failed) ↗

Other outcomes: Rejected · Duplicate · Cannot Reproduce · Deferred · Won't Fix

Workflow names vary by company. Status is where the issue is; Resolution is how it ended (Fixed, Won't Fix, Duplicate…). More: Defect Bug Management.

Severity vs Priority

  Severity Priority
About Technical impact Business urgency
Typical levels Blocker · Critical · Major · Minor · Trivial Highest · High · Medium · Low · Lowest (Jira defaults)
Usually set by The tester The product owner / triage

All four combinations with examples: Severity vs Priority.

A Good Bug Report

Field What to write
Summary Where + what's wrong: "Login: button unresponsive after entering valid credentials"
Steps to reproduce Numbered, from a known starting state
Expected vs actual Both, explicitly
Environment Build, environment, browser/device, OS
Severity / priority With a one-line reason
Attachments Screenshot, recording, console or API logs
Links The story it relates to; duplicates

JQL Basics

A JQL query is field operator value, joined with AND / OR, optionally sorted with ORDER BY. Put values with spaces in quotes.

Operator Meaning Example
= / != Equals / not equals status = "In Progress"
> < >= <= Comparisons, mostly dates created >= -7d
IN / NOT IN Any of a list priority IN (Highest, High)
~ / !~ Contains text summary ~ "checkout"
IS EMPTY / IS NOT EMPTY Field has no value assignee IS EMPTY
WAS / WAS NOT Had a value at some point status WAS "Reopened"
CHANGED A field changed, optionally FROM/TO/BY/DURING status CHANGED TO "Reopened"
ORDER BY Sorting ORDER BY priority DESC, created ASC

Fields You'll Use Most

project · issuetype · status · resolution · priority · assignee · reporter · created · updated · resolved · sprint · fixVersion · affectedVersion · component · labels · text

Functions

Function Use
currentUser() Whoever runs the filter — shared "my issues" filters
openSprints() / closedSprints() Active or finished sprints
startOfDay(), startOfWeek(), endOfMonth() Date boundaries
now() The current time
Relative dates: -7d, -2w, -24h "In the last…"
membersOf("qa-team") Anyone in a group
unreleasedVersions() / releasedVersions() Version-based filters

15 Ready-Made JQL Queries for Testers

-- 1. My open bugs
project = ABC AND issuetype = Bug AND assignee = currentUser() AND resolution = Unresolved

-- 2. Bugs I reported in the last 7 days
issuetype = Bug AND reporter = currentUser() AND created >= -7d

-- 3. Open high-priority bugs, newest first
project = ABC AND issuetype = Bug AND priority IN (Highest, High) AND resolution = Unresolved ORDER BY created DESC

-- 4. Bugs in the current sprint
project = ABC AND issuetype = Bug AND sprint IN openSprints()

-- 5. Waiting for retest (use your workflow's status name)
project = ABC AND issuetype = Bug AND status = "Ready for Retest"

-- 6. Stories ready for QA this sprint
project = ABC AND issuetype = Story AND status = "Ready for QA" AND sprint IN openSprints()

-- 7. Unassigned open bugs
project = ABC AND issuetype = Bug AND assignee IS EMPTY AND resolution = Unresolved

-- 8. Bugs reopened this week
project = ABC AND issuetype = Bug AND status CHANGED TO "Reopened" DURING (startOfWeek(), now())

-- 9. Bugs that have ever been reopened (reopen-rate check)
project = ABC AND issuetype = Bug AND status WAS "Reopened"

-- 10. Stale bugs — no update for 14 days
project = ABC AND issuetype = Bug AND resolution = Unresolved AND updated <= -14d ORDER BY updated ASC

-- 11. Bugs targeted for a release
project = ABC AND issuetype = Bug AND fixVersion = "2.4.0"

-- 12. Open bugs in the next unreleased versions
project = ABC AND issuetype = Bug AND fixVersion IN unreleasedVersions() AND resolution = Unresolved

-- 13. Bugs in one module with a label
project = ABC AND issuetype = Bug AND component = Checkout AND labels = regression

-- 14. Bugs fixed yesterday (to retest today)
project = ABC AND issuetype = Bug AND resolved >= startOfDay(-1) AND resolved < startOfDay()

-- 15. Search text in any field
project = ABC AND text ~ "timeout"

Save useful queries as filters, share them with the team, subscribe to get them by email, and use them in dashboard gadgets. More: Search, Filters, JQL & Dashboards.

Agile Board Terms

Term Meaning
Product backlog All pending work, prioritized
Sprint backlog Work committed for the current sprint
Story points Relative effort estimate (not hours)
Velocity Points completed per sprint
Burndown chart Remaining work against time in a sprint
Scrum board Work in fixed-length sprints
Kanban board Continuous flow with work-in-progress limits

More: Boards, Sprints & Agile.

Link Use
blocks / is blocked by Dependencies
duplicates / is duplicated by The same defect logged twice
relates to A loose connection, e.g. a bug to its story
causes / is caused by Root-cause chains
tests / is tested by Test ↔ requirement traceability (with Xray/Zephyr)

Handy Features

  • Bulk Change — edit, transition or move many issues from a search result.
  • Filter subscriptions — a daily email of "bugs waiting for retest".
  • Dashboards — Filter Results, Two-Dimensional Filter Statistics, Created vs Resolved.
  • Issue keys in Git — mention ABC-123 in branch names and commits to link code to issues.

Test your Jira knowledge in the Jira Interview Simulator.

From Real Projects

I've used Jira for defect tracking on every project I worked on — Apkope, Canolog and Testsigma — together with TestRail for tracking test execution. My work included preparing bug reports, following defects through the bug life cycle and retesting fixes. A clear, reproducible report — exact steps, expected versus actual result and evidence — gets a defect resolved faster than anything else. Save the queries you run every day as filters so you never have to retype them.

📚 Official documentation: Jira Cloud documentation (Atlassian)

FAQs

What is JQL?

Jira Query Language — a structured search language for filtering issues by fields, functions and history, used in advanced search, filters, boards and dashboards.

Why use resolution = Unresolved instead of status != Closed?

Status names differ between workflows (Done, Closed, Resolved, Verified). An empty resolution reliably means the issue isn't finished, whatever the workflow calls its final status.

What's the difference between WAS and CHANGED?

WAS finds issues that had a value at any time; CHANGED finds issues where a field changed, optionally narrowed with FROM, TO, BY and DURING.

How do I search for text?

Use ~: summary ~ "login" for one field, or text ~ "login" across summary, description and comments.

How do I make one filter work for everyone?

Use currentUser() instead of a name — each person sees their own issues.

Go Deeper