# Root cause analysis
One of the main reasons we write tests in the first place is to find bugs and regressions. But when an automated test fails, it could be due to any of the following:
- The test is correct, but the application is broken (either a regression bug, or a bug discovered by a new test), and a fault needs to be raised;
- The test needs maintenance, because:
- The application has changed; or
- The test is invalid (it is the first execution of it, and likely the wrong element is being targeted);
- The environment is in a bad state (flakiness).
# Getting to the bottom of why a test failed
To help you with finding the root cause, we help you quickly:
- Analyze the execution history of the journey and the step, people involved, etc.
- Review the recent activity on the journey from executions, to changes and comments left,
- Compare visually the current failing step with what it looked like when it passed last time,
- Comment and discuss the failure with your team,
- Review network traffic, console logs, and the page source (DOM) at the time of failure;
Once you have identified the root cause (e.g., whether it was due to a regression, flaky environment, or another reason) you can provide a reason for the failure.
To view this report, click on the failing step and click on the tab
Root cause analysis where you can find all the information to determine why the test failed.
# Cause of failure
The error message displayed on top of the report shows why the step action failed. Usually, this gives you a clue as to what failed (e.g.,
Target element not found). Though, this does not immediately reveal the underlying root cause.
Underneath this, you are prompted to answer why this test failed (e.g., a
Regression or an
Outdated test, etc.). Providing this information can, over time, help you and your team build a better understanding of why your tests fail, which can help with understanding how to maintain tests and/or help you build more robust tests in the future.
Once a failure reason is set, it will show who set it and when. You can always change the failure reason, for example, the test failed due to a different problem from that which was first thought.
# Root cause summary report
This section helps you analyze the journey with respect to its activity, outcome, and trends over time, as well as to help compare it with previously successful executions.
# Execution history analysis
The first part is the execution history analysis which tells you how many times this journey failed in the past or if it is the first time this journey has failed. For example, a test that has failed for the first time may require immediate attention, whereas one that has been failing consistently could be unmaintained or there might be a problem with it that cannot pass.
Here you can see the last time this journey passed including a link to that passed execution (note that a journey might never have passed before). Additionally, it tells you who updated this journey last and when.
To better understand the journey's history, as part of the execution history analysis, Virtuoso provides a chart that shows how this journey performed over the last 90 days. This chart shows green dots for passing executions, red dots for failed, and gray dots for other outcomes (e.g., skipped).
This chart is interactive, that is, you can drag your mouse over the chart to zoom in on specific time ranges. You can also click on any of the points drawn to open that specific execution in a new tab.
The chart also shows indications of when changes were made, and comments left. You can find these in the form of a vertical bar with a small box on top, along with the initials of the user who performed the activity. You can mouse over those annotations to see detailed information. Changes are represented with blue labels, and comments are represented with a yellow label.
# Visual analysis
If your step was successfully executed before, in this section you will find the snapshot of the last time this test step passed, and the snapshot of the current failed execution.
You can quickly see with this pair of screenshots if the page still visually matches the previous state, or that either the test or the application have diverged from previous behavior.
When available, you can also switch between the screenshot before and after interacting with a target element. E.g., you have a test step of this form
Click on "login", in the last passing execution there is a screenshot before clicking on the element, and a one after clicking the element which may be different.
Click on the screenshots to open a modal to better review these screenshots side by side. In the modal, you have the ability to zoom in or out of the screenshots as well as panning to help compare the screenshots.
In this section, you will find the latest comments left on the step timeline (by you or other members of your team) so that you and your colleagues can leave notes, discuss, or mention someone quickly.
To add a comment just type your message in the text box and press
ENTER or click on the send icon; the same way as it works in the timeline panel.
# Page at the point of failure
One of the most common tasks when trying to figure out why a test failed is to manually get to the point of failure, and then to look at the page source, network traffic (e.g., find failing requests), and console logs.
To speed this up, Virtuoso captures the page at the time of failure, so that all the information mentioned is available to you right away.
# Page source
This tab will show you the HTML code / DOM that the browser used to render the page at the time this test step was executed (note that the page source might not be available in some specific cases, such as when running on a custom mobile device).
Sometimes looking at the page source can give you an insight into why the test failed, for example, you might be looking for an element that does not exist on the page because it is in fact inside an
iframe or you can identify broken attribute values of specific elements or some other broken piece of HTML.
Ultimately, this shows the same view as you would see opening the page source or developer tools of your browser and inspecting the elements, and it saves time by making it unnecessary to replay the journey to simply view the source at the time of failure.
# Page network requests
In this section, you will see all the network requests that happened during the execution of your test. If a failing network request is found (those with a status code of
5xx) a red badge is shown with the count next to the tab title to attract your attention.
The network requests are presented as a table of expandable items, each row shows the most relevant information about a request such as the URL, the method, the status code, the type, the size, and the time taken for the request. Clicking on the chevron icon of each row will expand that row showing the full details of that specific request (e.g., the request headers, timing metrics, the response body if available, etc).
For an easier review of these network requests (there may be hundreds!), you can use the search box placed on top to filter out the results. You can also click to filter only network requests which faced one of these situations: e.g.,
client error or
server error and finally, you can use a dropdown to filter by the different type of requests you have (e.g.,
XHR shows only AJAX network requests).
# Page console logs
The page logs often provide significant insights into why the failure occurred, particularly when the fault lies with the application. Virtuoso captures all the logs that you would see on your browser when using the
console of the browser developer tools.
This means that if your website logged an error message or any other log that might lead you to the root of the problem, it will be shown in this section.
The information is presented in a scrollable list of items, with each item being a log entry. If a log comes with a trace besides the message itself, you can click the log entry on the list to expand it and see all the details.
Finally, since you may have hundreds of log entries, the UI provides a search box to limit the results and a dropdown with the different categories of the log entries and a count (e.g.,
13 warning), clicking on a category will limit the results to only that log category (e.g., show only error logs).