Skip to content
Bugwise
Menu
Tutorials

Test Runs and Test Management Tools

Learn how teams organize test cases in a repository, run them against a build, use execution statuses like Passed, Failed and Blocked, link failures to bugs and track progress, with a hands-on test run for the FoodDash 2.0 release.

beginner Mobile & web
Short on time? Switch to the quick version.

Monday, 9:40. Your lead writes in the team channel: “FoodDash 2.0 build 412 is on staging. Please create the regression run for iPhone, start with the P1 cases and keep the run updated so I can see where we are at stand-up. Link every failure to a bug.”

You already know how to write test cases and a test plan. This lesson is about what happens next: how a team stores hundreds of cases, picks the right ones for a build, runs them, records the results and shows progress, usually in a tool like TestRail, Xray or Zephyr. These words show up in almost every QA job ad, and by the end of this lesson they won’t scare you.

From written cases to executed results

Writing a case and running it are two different things, and tools keep them apart on purpose.

1 · Repository

All test cases

Sections like Login, Cart, Checkout. Written once, reused every release.

2 · Test run

A selection for one build

”2.0.0 regression, build 412, iPhone 15”. Assigned to testers.

3 · Execution

A status per case

Passed, Failed, Blocked… plus the actual result and evidence.

4 · Bugs and report

Links and progress

Each failure links to a bug. The run’s numbers feed the summary report.

The essentials

The repository

The repositoryTest case repositoryThe central library where a team keeps all its test cases, organized into sections and suites.Open in glossary → is the library of all your cases, grouped into sections or suitesTest suiteA group of related test cases that are run together.Open in glossary → (Login, Cart, Checkout). Each case has fields that make it easy to pick later: priority (P1 to P3), type (functional, UI, accessibility…) and automation status (manual, automated, to automate). You write a case once and reuse it in every release; when the product changes, you update the case.

The test run

A test runTest runOne execution of a chosen set of test cases on a specific build and environment, with a result for each case.Open in glossary → (some tools say test cycle or test execution) is a selection of cases for one build on one environment or device. You pick cases by priority or section, choose the buildBuildA specific compiled version of the app or website that is ready to be installed or tested.Open in glossary → and device, and assign testers. The run is the proof of what was actually tested.

Execution statuses

StatusUse it when
PassedThe actual result matches the expected result.
FailedIt doesn’t, because of a defect in the product. Link a bug.
BlockedYou can’t run the case to the end: environment down, data missing, an earlier bug in the way. Write the reason.
RetestA linked bug was fixed; the case must be run again.
Skipped / N/ADeliberately not run, or doesn’t apply (an iOS-only case on Android).
UntestedNobody has run it yet.

Tools use slightly different names, but the ideas are the same.

Blocked vs Failed

Failed means you ran the case and the product did the wrong thing. Blocked means you couldn’t find out, because something outside the case stopped you. The payment sandbox is down? Blocked. An expired coupon is accepted? Failed. See blocked testBlocked testA test case that can't be run to the end because something outside it is broken or missing.Open in glossary →.

Evidence and bugs

For anything that isn’t a clean pass, write the actual result in one or two concrete sentences and attach a screenshot, recording or log. Every Failed case links to a bug key (for example FD-241), new or existing. When that bug is fixed, the case goes to Retest, you run it on the new build, and it becomes Passed (or Failed again). That’s retestingRetestingRunning the same test again to confirm that a reported bug is really fixed.Open in glossary →.

Progress

The run shows how many cases are done and how they went. Leads watch the untested count go down day by day (a burndown), and the failed and blocked cases in P1. Those are the ones that decide a release.

Tools

TestRail is a standalone tool that connects to Jira. Xray lives inside Jira, where tests, test plans and test executions are Jira issues. Zephyr is a family of Jira apps with test cycles. Small teams often use a spreadsheet, and that’s fine.

Good habits

One run per build and environment. Don’t edit cases in the middle of a run without noting it. Keep cases atomic, so one status means one thing.

Switch to Detailed at the top for the full walkthrough: fields, statuses in depth, evidence, bug links, retests, burndowns, the tools compared and a spreadsheet template.

The test case repository

A test case repositoryTest case repositoryThe central library where a team keeps all its test cases, organized into sections and suites.Open in glossary → is where the team keeps the master copy of every test case. Whether it’s a tool or a spreadsheet, a healthy repository has three things: a clear structure, useful fields and a way to change cases safely.

Structure: sections and suites

Group cases the way people think about the product, usually by feature or screen:

  • FoodDash 2.0 → Login · Cart · Checkout · Tracking · Profile
  • inside Checkout → Payment · Delivery time · Address

Tools call these groups sections, folders, suites or test sets. A test suiteTest suiteA group of related test cases that are run together.Open in glossary → can also be a cross-cutting selection, like “Smoke” or “Accessibility”, built from cases in many sections. You’ll meet those in Regression and Smoke Suites.

The fields that make cases easy to pick

Beyond the fields you already write (steps, data, expected result), a few metadata fields let you build runs in seconds:

FieldExample valuesWhy it matters
PriorityP1, P2, P3“Run all P1 first” is the most common release filter.
TypeFunctional, UI, Accessibility, SecurityLets you build a focused run, e.g. an accessibility pass.
Automation statusManual, Automated, To automateShows what CI already covers and what’s a candidate for automation.
PlatformiOS, Android, Web, AllKeeps iOS-only cases out of Android runs.
Requirement linkFD-104Powers the traceability matrixTraceability matrixA table linking each requirement to the test cases that cover it.Open in glossary →.

Keep the values few and agreed. A priority field where half the cases are “High” helps nobody.

Versioning and reuse

The big win of a repository is reuse: the case “An expired coupon code is rejected” is written for 2.0 and runs again in 2.1, 2.2 and 3.0. That only works if cases stay up to date.

  • When a requirement changes, update the case in the repository, not just in your head. Mention the change in the case history or in a comment (“Expected result updated for FD-104 v2: minimum order €15”).
  • Many tools keep a version history per case, and a run remembers which version of the case it used. That way an old run still shows what was actually checked back then.
  • Archive, don’t delete, cases for removed features. You may need them for the old app version that’s still in the stores.

Creating a test run

A test runTest runOne execution of a chosen set of test cases on a specific build and environment, with a result for each case.Open in glossary → answers: which cases, on which build, where, by whom?

  1. Decide the scope. Use the test plan and what changed: all P1 plus the P2 cases for touched areas, or the full regression suite before a major release. Impact analysisImpact analysisWorking out which parts of a product a change could affect, to decide what to retest.Open in glossary → tells you which areas were touched (Regression and Smoke Suites shows how).
  2. Pick the cases. Filter the repository by priority, section, type or platform, then add or remove single cases by hand.
  3. Set the build and environment. Name the exact buildBuildA specific compiled version of the app or website that is ready to be installed or tested.Open in glossary → (2.0.0 build 412, not “latest”) and the environmentEnvironmentA setup of servers, data and configuration where the software runs, such as dev, staging or production.Open in glossary → or device (staging, iPhone 15 on iOS 18). If a case is run on two devices, those are two results, so most teams create one run per device or use the tool’s “configurations”.
  4. Assign testers. Split by section or by device. Each case has one owner, so nothing is run twice or not at all.
  5. Name it clearly. “FoodDash 2.0.0 regression · build 412 · iPhone 15” is searchable months later. “Run 3” isn’t.

Execution statuses, and when to use each

During test executionTest executionThe activity of running test cases, comparing actual with expected results and recording the outcome.Open in glossary →, every case in the run gets an execution statusExecution statusThe result recorded for a test case in a run: Passed, Failed, Blocked, Retest, Skipped or Untested.Open in glossary →. These are the common ones. TestRail’s defaults are close to this list, other tools use different names (Xray, for example, uses TODO and EXECUTING), and many teams add their own.

StatusMeaningFoodDash example
UntestedNot run yet. Every case starts here.The run was created this morning.
PassedActual result = expected result.Home opens with “Hi, Mia” after sign-in.
FailedActual ≠ expected, because of a product defect.The expired code SPRING5 is accepted: −€0.60 instead of “This code has expired”.
BlockedYou can’t run the case to the end, for a reason outside it.The payment sandbox returns 503 errors until 15:00.
RetestA linked bug is fixed; run the case again.FD-118 (“Remove” deleted the wrong dish) is fixed in build 412.
Skipped / N/ADeliberately not run, or doesn’t apply here.A Face ID case in an Android run.

Blocked vs Failed: the classic confusion

Blocked

You couldn’t reach or finish what the case checks, so you don’t know yet whether it works.

  • The test environment or a third-party sandbox is down.
  • Test data or an account you need doesn’t exist.
  • An earlier bug stops you getting there: sign-in is broken, so you can’t reach checkout.

Write the reason, link the blocking issue if there is one, and re-run when it’s cleared.

Failed

You ran the case and the product did the wrong thing compared with the expected result.

  • A wrong total, a missing message, a crash on this screen.
  • The feature is there but behaves differently from the requirement.

Link a bug. The case is retested when the bug is fixed.

Why it matters: a Failed case sends a developer looking for a bug in FoodDash. If the real cause was a sandbox outage, that’s an afternoon wasted, and your next failures are trusted a bit less. In the other direction, marking a real defect as Blocked hides it from the bug count.

Skipped, N/A and Untested

  • Skipped / N/A is a decision: “doesn’t apply” or “we chose not to run it this time”. Say why in a comment. Better still, don’t put platform-specific cases into the wrong run in the first place.
  • Untested at the end of a run is not a status you choose, it’s what’s left. That’s fine if you say so in the report (“12 P3 cases not run, low risk”). It’s not fine if it’s hidden.

Recording actual results and evidence

A status alone is not enough for anything other than a clean pass. Write the actual resultActual resultWhat really happened when you performed the test.Open in glossary → and attach proof.

Useful

Actual: “Code applied” appears, the discount line shows −€0.60 and the total €11.40. Expected “This code has expired” and a total of €12.00. Screenshot attached. Bug FD-242.

Useless

Actual: Doesn’t work.

Good evidence, depending on the problem:

For passed cases, most teams don’t attach anything. Some regulated projects (finance, health) do want evidence for passes too; your test plan should say.

Linking a failure to a bug

  1. Search first. Is there already a bug for this? If FD-241 already describes it, link the existing bug instead of filing a duplicate bugDuplicate bugA bug report that describes a bug someone already reported.Open in glossary →.
  2. File the bug if it’s new. Many tools have a “create bug” button that opens a Jira form pre-filled with the case’s steps and your actual result. Clean it up the way you learned in Writing Bug Reports.
  3. Link it to the result. The case result now shows FD-242, and the bug shows which case found it. That two-way link is what traceability is built on.
  4. Link the story too. In Jira, link the bug to the user story, so the story can’t be closed with a known bug.

One bug can fail several cases (a broken API can fail three checkout cases), and one case can have several bugs over its life. The links keep that history.

Retests and re-runs

When a developer fixes a bug, the fix lands in a new build. Two things happen:

For a new build, most teams create a new run containing the failed, blocked and untested cases from the previous run, plus a regression subset around the fixes. The old run stays as it was: it’s the record of build 412.

Tracking progress

A run is also a live dashboard. Three numbers matter most:

  • Executed: how many cases have a final status. “64 of 120 executed (53%)”.
  • Results: passed, failed, blocked. Watch failed and blocked P1 cases closely; they decide the release.
  • Remaining: untested and retest. This is what a burndown tracks.

A burndown is a simple chart: remaining cases per day, going down towards zero by the deadline. Here’s the FoodDash 2.0 regression run:

Remaining cases (untested + retest), 120-case run

Mon
120
Tue
90
Wed
76
Thu
36
Fri
8

Wednesday barely moved: the payment sandbox was down and 14 checkout cases were blocked. A flat line in a burndown is a question to ask at stand-up, not a number to hide.

Progress numbers are for steering, not for judging people. “Ana executed 40 cases, Ben 15” says nothing if Ben’s were the hard payment cases. More on numbers that help and numbers that mislead in Traceability and Test Summary Reports.

TestRail, Xray and Zephyr

Job ads name these three most often. They share the ideas from this lesson but organize them differently. This is a high-level picture; editions, names and screens change often, so check the vendor’s current documentation when you start using one.

Where it livesHow tests and runs are stored
TestRailA standalone web app (cloud or self-hosted) with a Jira integration.Projects contain suites and sections of cases. You execute in test runs; a test plan groups several runs, e.g. one per device.
XrayAn app inside Jira.Tests are Jira issues of type Test. A Test Execution issue holds the results for a build; a Test Plan issue groups executions for a release.
ZephyrA family of Jira apps from SmartBear (you may see the names Zephyr Scale and Zephyr Squad).Cases are organized in a test library or as Jira issues, depending on the edition. Executions are grouped into test cycles.

Other tools exist (qTest, PractiTest, Azure Test Plans and more). Once you understand repository → run → status → bug link, switching tools takes a day, not a month. In interviews, say what you did with a tool (“I built runs per device and linked failures to Jira”), not just its name.

Spreadsheets are a legitimate option

A small team with one app and one tester doesn’t need a paid tool. A shared spreadsheet works well if you keep it disciplined:

  • One tab for the repository: ID, Section, Title, Priority, Type, Platform, Steps, Expected result, Requirement.
  • One tab per run, named after the build and device: ID, Title, Status, Actual result, Evidence link, Bug key, Tester, Date.
  • Use a dropdown (data validation) for Status so nobody types “pass”, “OK” and ”✓” in the same column.
  • Add a small summary at the top with COUNTIF per status.

You’ll outgrow it when you have several testers editing at once, many devices per release, or need history and reports across releases. That’s when a tool pays for itself.

Good practices

  • One run per build and environment. Results from different builds don’t mix.
  • Don’t edit cases mid-run without noting it. If you discover the expected result is outdated, add a comment on the result, finish the run with what you know, and update the case in the repository afterwards (or tell the lead right away if it changes the verdict). Silent edits make old results meaningless.
  • Keep cases atomic. One case checks one thing, so one status means one thing. A case with five checks that “half passed” can’t be marked honestly.
  • Never pass a case you didn’t run. If you ran out of time, it’s Untested. That’s honest; a fake pass is the worst thing a tester can do.
  • Report unrelated bugs separately. If you notice a stretched logo in the Orders list while running a tracking case, file it (and suggest a new case), but don’t fail the tracking case.
  • Update the run as you go, not at the end of the day. The lead is looking at it.

Common mistakes

Practice: run the FoodDash 2.0 release

Your turn. Create a run from the FoodDash repository, execute it on build 412 and close it. Some cases pass, some fail, one is blocked and one starts on Retest. Read what you see on the build carefully before you choose. Try it once on the iPhone and once on the Pixel: one case behaves differently.

Test run simulator

A mini test management tool. Create a run for the FoodDash 2.0 release, execute it, then compare your statuses with ours.

  1. 1. Create the run
  2. 2. Execute
  3. 3. Close and review

Pick cases from the repository

Priority:
Section:

Login

Cart

Checkout

Tracking

Profile

Tip: start with All P1, then add P2 if there is time.

Before you close a run

Before you close a run

0 of 8 checked

Check your understanding

Quick quiz

0/6 answered · 0 correct

  1. 1.You run 'Place an order with a saved card'. The payment provider's sandbox is down for maintenance. What status do you set?

  2. 2.You apply the expired code SPRING5 and the app accepts it with a 5% discount. The case expects 'This code has expired'. What do you do?

  3. 3.Bug FD-118 is fixed in build 412. The case that found it was Failed in the build 405 run. What happens next?

  4. 4.An Android run contains a 'Sign in with Face ID' case. What's the best status?

  5. 5.Build 413 arrives on Wednesday while the build 412 run is half done. What's the usual approach?

  6. 6.In Xray, what is a Test Execution?

Key takeaways

  • The repository holds all cases, organized by section and tagged with priority, type, platform and automation status. Cases are reused release after release, so keep them current.
  • A test run is a selection of cases for one build on one environment or device, assigned to testers. One run per build and environment.
  • Failed = the product did the wrong thing; link a bug. Blocked = you couldn’t find out; write the reason.
  • Record the actual result and evidence for every non-pass. A status alone isn’t enough.
  • When a bug is fixed, the case goes to Retest and is run again on the new build. Retesting is not regression testing.
  • TestRail, Xray and Zephyr organize the same ideas differently. A disciplined spreadsheet is fine for small teams.

Next: connect requirements, runs and bugs, and write the end-of-cycle report in Traceability and Test Summary Reports.

Finished this page?Nice work, this page is complete!

Mark it as done to track your progress. It's saved in this browser, no account needed.

Its review cards are now in Bites ⚡
Esc

Type to search the whole site.