Skip Navigation LinksHome Page > Forums > SpiraTeam Forums > Spira Custom Reports > Changing the Test Case De...
We had a request from a customer to change the built-in test case detailed report:
The Test Case Detailed report is very close to what we need, BUT it shows multiple test runs for a single test case. When a test run results in a failure or a caution, even though there is a retest shown immediately after it, that’s not acceptable to the reviewing folks.
So in this post we include the XSLT template changes needed to accomplish this.
The standard test case detailed report contains the following XSLT section that displays the list of test runs for the current test case:
<xsl:if test="TestRuns/TestRun"> <div class="Title4"> Test Runs: </div> <table class="DataGrid"> <tr> <th>Run #</th> <th>Tester</th> <th>Test Set</th> <th>Release</th> <th>Version</th> <th>Status</th> <th>Type</th> <th>Automation Host</th> <th>Est. Duration</th> <th>Actual Duration</th> <th>Execution Date</th> </tr> <xsl:for-each select="TestRuns/TestRun"> <tr> <td> TR<xsl:value-of select="TestRunId"/> </td> <td> <xsl:value-of select="TesterName"/> </td> <td> <xsl:value-of select="TestSetName"/> </td> <td> <xsl:value-of select="ReleaseName"/> </td> <td> <xsl:value-of select="ReleaseVersionNumber"/> </td> <td> <xsl:value-of select="ExecutionStatusName"/> </td> <td> <xsl:value-of select="TestRunTypeName"/> </td> <td> <xsl:value-of select="AutomationHostName"/> </td> <td class="Timespan"> <xsl:value-of select="EstimatedDuration"/> </td> <td class="Timespan"> <xsl:value-of select="ActualDuration"/> </td> <td class="Date"> <xsl:call-template name="format-date"> <xsl:with-param name="datetime" select="EndDate" /> </xsl:call-template> </td> </tr> <xsl:if test="TestRunSteps/TestRunStep"> <tr> <td colspan="11"> <table class="DataGrid"> <tr> <th>Step</th> <th>Description</th> <th>Expected Result</th> <th>Sample Data</th> <th>ActualResult</th> <th>Status</th> </tr> <xsl:for-each select="TestRunSteps/TestRunStep"> <tr> <td> <xsl:value-of select="Position"/> </td> <td> <xsl:value-of select="Description" disable-output-escaping="yes"/> </td> <td> <xsl:value-of select="ExpectedResult" disable-output-escaping="yes"/> </td> <td> <xsl:value-of select="SampleData" disable-output-escaping="yes"/> </td> <td> <xsl:value-of select="ActualResult" disable-output-escaping="yes"/> </td> <td> <xsl:value-of select="ExecutionStatusName"/> </td> </tr> </xsl:for-each> </table> </td> </tr> </xsl:if> </xsl:for-each> </table> </xsl:if>
You would simply change the selector to only find the first match. I.e. you change:
<xsl:for-each select="TestRuns/TestRun">
to
<xsl:for-each select="TestRuns/TestRun[1]">
Hi David,
The solution you have provided below just shows one test run for single test . Let's say we have 10 tests and each test is executed multiple times, now we want to show the latest execution of all 10 tests. But the below solution shows test run only for 1 test and doesn't show test runs for the remaining 9 tests. Could you please help with that?
Regards,
Ram
The test case detailed report can be used to show 1 or many test cases. The example code change is in a foreach loop - so for each test case included in the report it will only show one test run.
Hi Clark, I am using test run details report and i want to show only the latest test run for all the test cases. My xslt is below, could you please suggest what exactly i need to do.
<?xml version="1.0" encoding="utf-8"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"> <xsl:template match="/TestRunData"> <xsl:for-each select="TestRun"> <div class="Title2"> Test Run TR:<xsl:value-of select="TestRunId"/> - <xsl:value-of select="Name"/> </div> <div class="Description"> <xsl:value-of select="Description" disable-output-escaping="yes"/> </div> <table class="HiddenTable"> <tr> <th>Test Case #:</th> <td> TC<xsl:value-of select="TestCaseId"/> </td> <td colspan="2"></td> </tr> <tr> <th>Release #:</th> <td> <xsl:value-of select="ReleaseVersionNumber"/> <xsl:if test="BuildName"> (Build: <xsl:value-of select="BuildName"/>) </xsl:if> </td> <th>Status:</th> <td> <xsl:value-of select="ExecutionStatusName"/> </td> </tr> <tr> <th>Tester:</th> <td> <xsl:value-of select="TesterId"/> </td> <th>Execution Date:</th> <td class="Date"> <xsl:call-template name="format-date"> <xsl:with-param name="datetime" select="StartDate" /> </xsl:call-template> </td> </tr> <tr> <th>Test Set:</th> <td> <xsl:value-of select="TestSetName"/> </td> </tr> </table> <xsl:if test="TestRunSteps/TestRunStep"> <table class="DataGrid"> <tr> <th>Step</th> <th>Description</th> <th>Expected Result</th> <th>Sample Data</th> <th>Status</th> </tr> <xsl:for-each select="TestRunSteps/TestRunStep"> <tr> <td> <xsl:value-of select="Position"/> </td> <td> <xsl:value-of select="Description" disable-output-escaping="yes"/> </td> <td> <xsl:value-of select="ExpectedResult" disable-output-escaping="yes"/> </td> <td> <xsl:value-of select="SampleData" disable-output-escaping="yes"/> </td> <td> <xsl:value-of select="ExecutionStatusName"/> </td> </tr> </xsl:for-each> </table> </xsl:if> <xsl:if test="Incidents/Incident"> <div class="Title3"> Associated Incidents: </div> <table class="DataGrid"> <tr> <th>Inc #</th> <th>Type</th> <th>Status</th> <th>Priority</th> <th>Severity</th> <th>Name</th> <th>Owned By</th> <th>Detected On</th> </tr> <xsl:for-each select="Incidents/Incident"> <tr> <td> <xsl:value-of select="IncidentId"/> </td> <td> <xsl:value-of select="IncidentTypeName"/> </td> <td> <xsl:value-of select="IncidentStatusName"/> </td> <td> <xsl:value-of select="PriorityName"/> </td> <td> <xsl:value-of select="SeverityName"/> </td> <td> <xsl:value-of select="Name"/> </td> <td> <xsl:value-of select="OwnerName"/> </td> <td class="Date"> <xsl:call-template name="format-date"> <xsl:with-param name="datetime" select="CreationDate" /> </xsl:call-template> </td> </tr> </xsl:for-each> </table> </xsl:if> <xsl:if test="Attachments/Attachment"> <div class="Title3"> File Attachments: </div> <table class="DataGrid"> <tr> <th>Filename</th> <th>src</th> <th>Date Uploaded</th> </tr> <xsl:for-each select="Attachments/Attachment"> <tr> <td> <xsl:value-of select="Filename"/> </td> <td> <img> <xsl:attribute name="src"> https://spiratest.com/SpiraTeam/<xsl:value-of select="ProjectId" />/Attachment/<xsl:value-of select="AttachmentId" />.aspx </xsl:attribute> </img> </td> <td class="Date"> <xsl:call-template name="format-date"> <xsl:with-param name="datetime" select="UploadDate" /> </xsl:call-template> </td> </tr> </xsl:for-each> </table> </xsl:if> <br/> </xsl:for-each> </xsl:template> <xsl:template name="format-date"> <xsl:param name="datetime"/> <xsl:variable name="date" select="substring-before($datetime, 'T')" /> <xsl:variable name="year" select="substring-before($date, '-')" /> <xsl:variable name="month" select="substring-before(substring-after($date, '-'), '-')" /> <xsl:variable name="day" select="substring-after(substring-after($date, '-'), '-')" /> <xsl:variable name="time" select="substring-before(substring-after($datetime, 'T'), '.')" /> <xsl:variable name="monthname"> <xsl:choose> <xsl:when test="$month='01'"> <xsl:value-of select="'Jan'"/> </xsl:when> <xsl:when test="$month='02'"> <xsl:value-of select="'Feb'"/> </xsl:when> <xsl:when test="$month='03'"> <xsl:value-of select="'Mar'"/> </xsl:when> <xsl:when test="$month='04'"> <xsl:value-of select="'Apr'"/> </xsl:when> <xsl:when test="$month='05'"> <xsl:value-of select="'May'"/> </xsl:when> <xsl:when test="$month='06'"> <xsl:value-of select="'Jun'"/> </xsl:when> <xsl:when test="$month='07'"> <xsl:value-of select="'Jul'"/> </xsl:when> <xsl:when test="$month='08'"> <xsl:value-of select="'Aug'"/> </xsl:when> <xsl:when test="$month='09'"> <xsl:value-of select="'Sep'"/> </xsl:when> <xsl:when test="$month='10'"> <xsl:value-of select="'Oct'"/> </xsl:when> <xsl:when test="$month='11'"> <xsl:value-of select="'Nov'"/> </xsl:when> <xsl:when test="$month='12'"> <xsl:value-of select="'Dec'"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="''" /> </xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:value-of select="concat($day, '-' ,$monthname, '-', $year , ' ', $time)" /> </xsl:template></xsl:stylesheet>
This is not how the test run report works. To get this functionality you will need to write a fully custom report. You can learn more about that here: http://spiradoc.inflectra.com/Reporting/Custom-Report-Tutorial/
And if you have any questions, please email or call us at +1 (202) 558-6885