When you create a test run in Testmo, each test case you include becomes a test inside that run. A test is your working instance of the case, the place where you record what actually happened during execution. Results are the individual outcome records attached to a test, capturing the status, any comments, time spent, attachments, and linked issues. Tests accumulate results over time, and the most recent result always determines the current status shown in the run.
Viewing Tests in a Run
Opening a test run shows the list of tests included in that run. Each test displays its current status (Untested by default), the assigned team member if any, and summary information. You can filter the list by status, assignee, and other criteria to focus on a subset of tests.
Clicking a test opens it in a detail panel where you can view its result history and add a new result.
Untested vs. Tested
A test that has never had a result added is shown as Untested. Once you add the first result with a status, the test moves out of the untested state and reflects the status from that result.
The recommended workflow is one result per test per run. While Testmo technically allows adding multiple results to the same test within the same run, this should be the exception rather than the rule. If you need to revisit a test, the cleaner approach is to create a new run rather than appending additional results to an existing one. When multiple results do exist, the latest result is always what the run displays.
Assigning Tests
Assigning tests in a run gives each tester a clear list of work to focus on. You can assign tests within a single run or distribute work across multiple runs at once.
Assigning Tests in a Single Run
To assign tests within a single run, open the run and use the assign option from the toolbar, or select the run from the Runs & Results view and choose Assign Tests from the options menu.
You can assign all tests in the run or select specific tests, then choose a single user to assign them to. An Unassign option is also available to remove all existing assignments from the run.
Assigning Tests Across Multiple Runs
When you select multiple runs from the Runs & Results view and click Assign Tests from the options menu, a more powerful assignment dialog opens. Here you can select one or more users or groups to receive the work, using the Users and Groups tabs to search and make multiple selections.
You then choose a Strategy on how tests are distributed across the selected users:
- Assign evenly based on run and test count — divides runs across users weighted by how many tests each run contains, so each person ends up with a roughly equal number of tests overall.
- Assign evenly based on run forecasts — distributes work based on the estimated time remaining for each run, giving each person a balanced time-based workload. If no forecast data exists for the selected runs, this falls back to test count.
- Assign based on current user todos — the most workload-aware option. Before distributing, this strategy looks at tests already assigned to each user across the entire project, so the new assignments account for existing workload rather than treating everyone as equally available.
You can also choose whether to reassign tests that already have an assignee, or to skip those tests and only assign the ones that are currently unassigned. Skipping already-assigned tests is the default behavior.
Adding a Result
To add a result to a test, open the test from the run and click Add Result.
The result form includes the following fields:
- Status — the outcome of the test execution (Pass, Fail, Blocked, Retest, Skipped, and any custom statuses your admin has configured). At least one of status, note, attachment, or linked issue must be provided; an empty result cannot be saved.
- Note — a rich-text field for notes, observations, or defect descriptions.
- Assign to — optionally assign or re-assign the test as part of submitting the result.
- Elapsed — optionally log how long you spent on this test. See Time Tracking below.
- Issues — link existing issues or create new ones from your connected issue tracker.
- Attachments — upload screenshots, logs, or other files directly to the result.
Custom fields on results can also be configured by your administrator per project template.
Test Cases with Steps
Testmo ships with two built-in test case templates: one with a single Text field for freeform test description, and one with a Steps field that breaks the test into discrete numbered steps. The result form adapts to whichever template the test case uses.
- Text template (no steps): The result form shows the standard fields above. You review the test description, execute the test, then set a status and add a comment describing what happened.
- Steps template: The result form shows each step inline. For every step you can record an individual step status (Pass, Fail, etc.) and an optional comment specific to that step. If any step is marked with a failing status, the overall test result status is automatically set to Failed. You can manually change the overall status after the fact if needed, for example, to mark the test as Blocked or Retest instead. Once you've worked through all steps, you set the overall result status for the test. The step-level outcomes are captured in the result record and are visible in the result history, making it easy to see exactly which step a test failed on.
Pass & Next
When executing a test run, you can submit a result and immediately move to the next test without returning to the list. This keeps your workflow moving when working through a large set of tests sequentially.
Press the P key to pass the currently active test and advance to the next one, or use the Pass & Next button in the result panel. This is not limited to passing: you can select any status, submit the result, and Testmo advances to the next test automatically. The action is best understood as "submit result & advance to next test," regardless of which status you choose.
Submitting Results in Bulk
You can select multiple tests in the run view and submit the same result data to all of them at once using the bulk Add Result action. This is useful for marking a batch of tests as blocked or skipped with a shared comment.
Time Tracking
Testmo includes a built-in timer you can start while executing a test. When you open a test, start the timer before you begin working through the steps. The timer runs in the background as you work. When you are ready to submit your result, stop the timer; the elapsed time is automatically populated in the Time Spent field on the result form.
This removes the need to track time separately or estimate after the fact. The recorded time rolls into run-level metrics and is used for forecasting on future runs.
Attachments
You can attach files to a result, screenshots, log files, error output, or any other supporting evidence. Attachments can be added when creating a result or when editing an existing one.
You can also paste screenshots directly from your clipboard (Ctrl+V on Windows/Linux, Cmd+V on macOS) without creating a file first, just take a screenshot with your OS screenshot tool and paste it straight into the attachment area. For OS-specific instructions on taking screenshots, see Taking Screenshots.
Linking Issues to Results
The Issues field on a result lets you associate one or more issues from a connected issue tracker.
This field accepts issue references, for example, a Jira issue key like PROJ-123 or a GitHub issue number like 42. You are entering the reference directly; Testmo does not search your tracker live in this field.
There are two ways to work with issues on a result:
- Link an existing issue: Enter the issue reference in the Issues field. Testmo looks up the issue in your connected tracker and records the link. The issue appears on the result and can be navigated to from Testmo.
- Create a new issue: If your integration supports it (such as Jira Cloud or GitHub), you can create a new issue directly from the result form without leaving Testmo. For example, if a test fails and you want to file a bug, click the create option in the Issues field, fill in the details using the native issue dialog, and the new issue is created in your tracker and linked to the result immediately, no context switching required.
The Context Tab
The Context tab on an individual test inside a run shows the execution history of that test case across other runs in the project. When you open a test to record or review a result, the Context tab lets you see how the same test case has performed over time without leaving the current run.
The tab is divided into three sub-views:
- Active tests — shows instances of this test case in runs that are currently open (not yet closed).
- Latest results — shows the most recent result recorded for each run that has included this test case.
- All results — shows the complete result history for this test case across all runs, paginated.
Each entry displays the result status, the name of the run it belongs to (including a configuration label if the run uses configurations, and a "Closed" badge if the run has been closed), when the result was recorded, and who recorded it. You can filter the list by status to focus on failures, passes, or any other result type.
If your project has automation linking configured, an Automation section appears at the top of the Context tab. It shows linked automation run results for the same test case, giving you a combined view of manual and automated execution history in one place.
The Context tab is most useful when you encounter a failure during execution. Before filing a defect, check whether the test case has been failing consistently across recent runs or was passing until now. This helps you distinguish a genuine new defect from a longstanding known failure or a flaky test.
Result History
Each test maintains a complete history of all results added to it. Open any test and scroll to the Result History section to see every result ever recorded, sorted by date with the most recent at the top.
You can filter the result history by date added, who added the result, assignee, status, or whether the result is the current (latest) one. This history is preserved even after the run is closed.