Skip to content

Commit

Permalink
Report optimisation
Browse files Browse the repository at this point in the history
  • Loading branch information
wakaleo committed Jan 18, 2017
1 parent 39ed368 commit 90b8e63
Show file tree
Hide file tree
Showing 4 changed files with 80 additions and 38 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public class RequirementsOutcomes {

public final static Integer DEFAULT_TESTS_PER_REQUIREMENT = 4;

private final Map<String, Integer> totalCountCache = new ConcurrentHashMap<String, Integer>();
private final Map<String, Integer> totalCountCache = new ConcurrentHashMap<>();

public RequirementsOutcomes(List<Requirement> requirements,
TestOutcomes testOutcomes,
Expand Down Expand Up @@ -85,7 +85,13 @@ private List<RequirementOutcome> buildRequirementOutcomes(List<Requirement> requ
return outcomes;
}

RequirementsOutcomesOfTypeCache requirementsOfTypeCache = new RequirementsOutcomesOfTypeCache(this);

public RequirementsOutcomes requirementsOfType(String type) {
return requirementsOfTypeCache.byType(type);
}

public RequirementsOutcomes ofType(String type) {
List<Requirement> matchingRequirements = Lists.newArrayList();
List<TestOutcome> matchingTests = Lists.newArrayList();
for (RequirementOutcome requirementOutcome : getFlattenedRequirementOutcomes()) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package net.thucydides.core.requirements.reports;

import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;

public class RequirementsOutcomesOfTypeCache {

private final RequirementsOutcomes requirementsOutcomes;

private static final long MAX_SIZE = 100;

private final LoadingCache<String, RequirementsOutcomes> cache;

public RequirementsOutcomesOfTypeCache(final RequirementsOutcomes requirementsOutcomes) {
this.requirementsOutcomes = requirementsOutcomes;

cache = CacheBuilder.newBuilder().maximumSize(MAX_SIZE).build(new CacheLoader<String, RequirementsOutcomes>() {
@Override
public RequirementsOutcomes load(String type) throws Exception {
return requirementsOutcomes.ofType(type);
}
}
);
}

public RequirementsOutcomes byType(String type) {
return cache.getUnchecked(type);
}

}
51 changes: 27 additions & 24 deletions serenity-report-resources/src/main/resources/freemarker/home.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,13 @@
<#include "components/test-outcomes.ftl">


<#assign successfulManualTests = (testOutcomes.count("manual").withResult("SUCCESS") > 0)>
<#assign pendingManualTests = (testOutcomes.count("manual").withResult("PENDING") > 0)>
<#assign ignoredManualTests = (testOutcomes.count("manual").withResult("IGNORED") > 0)>
<#assign failingManualTests = (testOutcomes.count("manual").withResult("FAILURE") > 0)>
<#assign manualTests = testOutcomes.count("manual")>
<#assign automatedTests = testOutcomes.count("automated")>

<#assign successfulManualTests = (manualTests.withResult("SUCCESS") > 0)>
<#assign pendingManualTests = (manualTests.withResult("PENDING") > 0)>
<#assign ignoredManualTests = (manualTests.withResult("IGNORED") > 0)>
<#assign failingManualTests = (manualTests.withResult("FAILURE") > 0)>

<script class="code" type="text/javascript">$(document).ready(function () {
var test_results_plot = $.jqplot('test_results_pie_chart', [
Expand Down Expand Up @@ -67,24 +70,24 @@
marginTop: '15px'
},
series: [
{label: '${testOutcomes.count("automated").withResult("success")} / ${testOutcomes.total} tests passed' },
{label: '${automatedTests.withResult("success")} / ${testOutcomes.total} tests passed' },
<#if (successfulManualTests)>
{label: '${testOutcomes.count("manual").withResult("success")} / ${testOutcomes.total} manual tests passed' },
{label: '${manualTests.withResult("success")} / ${testOutcomes.total} manual tests passed' },
</#if>
{label: '${testOutcomes.count("automated").withResult("pending")} / ${testOutcomes.total} tests pending'},
{label: '${automatedTests.withResult("pending")} / ${testOutcomes.total} tests pending'},
<#if (pendingManualTests)>
{label: '${testOutcomes.count("manual").withResult("pending")} / ${testOutcomes.total} manual tests pending' },
{label: '${manualTests.withResult("pending")} / ${testOutcomes.total} manual tests pending' },
</#if>
{label: '${testOutcomes.count("automated").withResult("ignored")} / ${testOutcomes.total} tests not executed'},
{label: '${automatedTests.withResult("ignored")} / ${testOutcomes.total} tests not executed'},
<#if (ignoredManualTests)>
{label: '${testOutcomes.count("manual").withResult("ignored")} / ${testOutcomes.total} manual tests not executed' },
{label: '${manualTests.withResult("ignored")} / ${testOutcomes.total} manual tests not executed' },
</#if>
{label: '${testOutcomes.count("automated").withResult("failure")} / ${testOutcomes.total} tests failed'},
{label: '${automatedTests.withResult("failure")} / ${testOutcomes.total} tests failed'},
<#if (failingManualTests)>
{label: '${testOutcomes.count("manual").withResult("failure")} / ${testOutcomes.total} manual tests failed' },
{label: '${manualTests.withResult("failure")} / ${testOutcomes.total} manual tests failed' },
</#if>
{label: '${testOutcomes.count("automated").withResult("error")} / ${testOutcomes.total} errors'},
{label: '${testOutcomes.count("automated").withResult("compromised")} / ${testOutcomes.total} compromised tests'}
{label: '${automatedTests.withResult("error")} / ${testOutcomes.total} errors'},
{label: '${automatedTests.withResult("compromised")} / ${testOutcomes.total} compromised tests'}
]
});
Expand Down Expand Up @@ -130,25 +133,25 @@
marginTop: '15px'
},
series: [
{label: '${testOutcomes.count("automated").withResult("success")} / ${testOutcomes.total} tests passed (${testOutcomes.decimalPercentageSteps("automated").withResult("success")}% of all test steps)' },
{label: '${automatedTests.withResult("success")} / ${testOutcomes.total} tests passed (${testOutcomes.decimalPercentageSteps("automated").withResult("success")}% of all test steps)' },
<#if (successfulManualTests)>
{label: '${testOutcomes.count("manual").withResult("success")} / ${testOutcomes.total} manual tests passed (${testOutcomes.decimalPercentageSteps("manual").withResult("success")}% of all test steps)' },
{label: '${manualTests.withResult("success")} / ${testOutcomes.total} manual tests passed (${testOutcomes.decimalPercentageSteps("manual").withResult("success")}% of all test steps)' },
</#if>
{label: '${testOutcomes.count("automated").withResult("pending")} / ${testOutcomes.total} tests pending'},
{label: '${automatedTests.withResult("pending")} / ${testOutcomes.total} tests pending'},
<#if (pendingManualTests)>
{label: '${testOutcomes.count("manual").withResult("pending")} / ${testOutcomes.total} manual tests pending' },
{label: '${manualTests.withResult("pending")} / ${testOutcomes.total} manual tests pending' },
</#if>
{label: '${testOutcomes.count("automated").withResult("ignored")} / ${testOutcomes.total} tests not executed'},
{label: '${automatedTests.withResult("ignored")} / ${testOutcomes.total} tests not executed'},
<#if (ignoredManualTests)>
{label: '${testOutcomes.count("manual").withResult("ignored")} / ${testOutcomes.total} manual tests not executed' },
{label: '${manualTests.withResult("ignored")} / ${testOutcomes.total} manual tests not executed' },
</#if>
{label: '${testOutcomes.count("automated").withResult("failure")} / ${testOutcomes.total} tests failed (${testOutcomes.decimalPercentageSteps("automated").withResult("failure")}% of all test steps)'},
{label: '${automatedTests.withResult("failure")} / ${testOutcomes.total} tests failed (${testOutcomes.decimalPercentageSteps("automated").withResult("failure")}% of all test steps)'},
<#if (failingManualTests)>
{label: '${testOutcomes.count("manual").withResult("failure")} / ${testOutcomes.total} manual tests failed (${testOutcomes.decimalPercentageSteps("manual").withResult("failure")}% of all test steps)' },
{label: '${manualTests.withResult("failure")} / ${testOutcomes.total} manual tests failed (${testOutcomes.decimalPercentageSteps("manual").withResult("failure")}% of all test steps)' },
</#if>
{label: '${testOutcomes.count("automated").withResult("error")} / ${testOutcomes.total} errors (${testOutcomes.decimalPercentageSteps("automated").withResult("error")}% of all test steps)'}
{label: '${automatedTests.withResult("error")} / ${testOutcomes.total} errors (${testOutcomes.decimalPercentageSteps("automated").withResult("error")}% of all test steps)'}
<#if (testOutcomes.count("automated").withResult("compromised") > 0)>
,{label: '${testOutcomes.count("automated").withResult("compromised")} / ${testOutcomes.total} tests compromised (${testOutcomes.decimalPercentageSteps("automated").withResult("compromised")}% of all test steps)'}
,{label: '${automatedTests.withResult("compromised")} / ${testOutcomes.total} tests compromised (${testOutcomes.decimalPercentageSteps("automated").withResult("compromised")}% of all test steps)'}
</#if>
]
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,20 +25,22 @@


<#list requirements.types as requirementType>
<#assign successfulRequirements= requirements.requirementsOfType(requirementType).completedRequirementsCount >
<#assign pendingRequirements = requirements.requirementsOfType(requirementType).pendingRequirementsCount>
<#assign ignoredRequirements = requirements.requirementsOfType(requirementType).ignoredRequirementsCount >
<#assign failingRequirements = requirements.requirementsOfType(requirementType).failingRequirementsCount >
<#assign errorRequirements = requirements.requirementsOfType(requirementType).errorRequirementsCount >
<#assign compromisedRequirements = requirements.requirementsOfType(requirementType).compromisedRequirementsCount >
<#assign untesteddRequirements = requirements.requirementsOfType(requirementType).requirementsWithoutTestsCount >
<#assign requirementsOfType = requirements.requirementsOfType(requirementType) />
<#assign successfulRequirements= requirementsOfType.completedRequirementsCount >
<#assign pendingRequirements = requirementsOfType.pendingRequirementsCount>
<#assign ignoredRequirements = requirementsOfType.ignoredRequirementsCount >
<#assign failingRequirements = requirementsOfType.failingRequirementsCount >
<#assign errorRequirements = requirementsOfType.errorRequirementsCount >
<#assign compromisedRequirements = requirementsOfType.compromisedRequirementsCount >
<#assign untesteddRequirements = requirementsOfType.requirementsWithoutTestsCount >
<#else>
<#assign successfulRequirements= testOutcomes.totalTests.withResult("success") >
<#assign pendingRequirements = testOutcomes.totalTests.withResult("pending") >
<#assign ignoredRequirements = testOutcomes.totalTests.withResult("ignored") + testOutcomes.totalTests.withResult("skipped")>
<#assign failingRequirements = testOutcomes.totalTests.withResult("failure") >
<#assign errorRequirements = testOutcomes.totalTests.withResult("error") >
<#assign compromisedRequirements = testOutcomes.totalTests.withResult("compromised") >
<#assign totalTests= testOutcomes.totalTests >
<#assign successfulRequirements= totalTests.withResult("success") >
<#assign pendingRequirements = totalTests.withResult("pending") >
<#assign ignoredRequirements = totalTests.withResult("ignored") + testOutcomes.totalTests.withResult("skipped")>
<#assign failingRequirements = totalTests.withResult("failure") >
<#assign errorRequirements = totalTests.withResult("error") >
<#assign compromisedRequirements = totalTests.withResult("compromised") >
<#assign untesteddRequirements = 0 >
</#list>

Expand Down

0 comments on commit 90b8e63

Please sign in to comment.