You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 10:26:49 UTC
[sling-tooling-jenkins] 09/27: SLING-2593 - Improvement for the
Sling performance tools. Adding Report level parameter. Thanks Christian
Vazzolla for the patch.
This is an automated email from the ASF dual-hosted git repository.
rombert pushed a commit to annotated tag org.apache.sling.performance.base-0.0.2
in repository https://gitbox.apache.org/repos/asf/sling-tooling-jenkins.git
commit f05b35ed0a1aadd90f972b22b98c01066a28340f
Author: Antonio Sanso <as...@apache.org>
AuthorDate: Mon Oct 15 07:34:45 2012 +0000
SLING-2593 - Improvement for the Sling performance tools. Adding Report level parameter. Thanks Christian Vazzolla for the patch.
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/performance/base@1398205 13f79535-47bb-0310-9956-ffa450edef68
---
.../performance/FrameworkPerformanceMethod.java | 7 +-
.../sling/performance/PerformanceRunner.java | 32 +++++-
.../org/apache/sling/performance/ReportLogger.java | 115 ++++++++++++++++-----
3 files changed, 124 insertions(+), 30 deletions(-)
diff --git a/src/main/java/org/apache/sling/performance/FrameworkPerformanceMethod.java b/src/main/java/org/apache/sling/performance/FrameworkPerformanceMethod.java
index 4f95d3e..8010a3a 100644
--- a/src/main/java/org/apache/sling/performance/FrameworkPerformanceMethod.java
+++ b/src/main/java/org/apache/sling/performance/FrameworkPerformanceMethod.java
@@ -37,13 +37,14 @@ class FrameworkPerformanceMethod extends FrameworkMethod {
private Object target;
private PerformanceSuiteState performanceSuiteState;
+ private PerformanceRunner.ReportLevel reportLevel = PerformanceRunner.ReportLevel.ClassLevel;
public FrameworkPerformanceMethod(Method method, Object target,
- PerformanceSuiteState performanceSuiteState) {
+ PerformanceSuiteState performanceSuiteState, PerformanceRunner.ReportLevel reportLevel) {
super(method);
this.target = target;
this.performanceSuiteState = performanceSuiteState;
-
+ this.reportLevel = reportLevel;
}
@Override
@@ -176,7 +177,7 @@ class FrameworkPerformanceMethod extends FrameworkMethod {
.writeReport(this.target.getClass().getName(),
this.performanceSuiteState.testSuiteName,
getMethod().getName(), statistics,
- ReportLogger.ReportType.TXT);
+ ReportLogger.ReportType.TXT, reportLevel);
}
// In case of a PerformanceSuite we need to run the methods annotated
diff --git a/src/main/java/org/apache/sling/performance/PerformanceRunner.java b/src/main/java/org/apache/sling/performance/PerformanceRunner.java
index fef112c..68e2926 100644
--- a/src/main/java/org/apache/sling/performance/PerformanceRunner.java
+++ b/src/main/java/org/apache/sling/performance/PerformanceRunner.java
@@ -17,6 +17,10 @@
package org.apache.sling.performance;
import java.lang.annotation.Annotation;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collection;
@@ -37,12 +41,34 @@ import org.junit.runners.model.InitializationError;
* The custom JUnit runner that collects the performance tests
*
*/
+
+
+
public class PerformanceRunner extends BlockJUnit4ClassRunner {
protected LinkedList<FrameworkMethod> tests = new LinkedList<FrameworkMethod>();
private List<PerformanceSuiteState> suitesState = new ArrayList<PerformanceSuiteState>();
-
+ public ReportLevel reportLevel = ReportLevel.ClassLevel;
+
+ public static enum ReportLevel{
+ ClassLevel,
+ MethodLevel
+ }
+
+ @Retention(RetentionPolicy.RUNTIME)
+ @Target(ElementType.TYPE)
+ public @interface Parameters {
+ public ReportLevel reportLevel() default ReportLevel.ClassLevel;
+ }
+
public PerformanceRunner(Class<?> clazz) throws InitializationError {
super(clazz);
+
+ // set the report level for the tests that are run with the PerformanceRunner
+ // by default set to class level for legacy tests compatibility
+ if (clazz.getAnnotation(Parameters.class) != null){
+ reportLevel = clazz.getAnnotation(Parameters.class).reportLevel();
+ }
+
try {
computeTests();
} catch (Exception e) {
@@ -159,7 +185,7 @@ public class PerformanceRunner extends BlockJUnit4ClassRunner {
for (Method method : testMethods) {
FrameworkPerformanceMethod performaceTestMethod = new FrameworkPerformanceMethod(
- method, testObject, current);
+ method, testObject, current, reportLevel);
tests.add(performaceTestMethod);
}
}
@@ -174,7 +200,7 @@ public class PerformanceRunner extends BlockJUnit4ClassRunner {
PerformanceTest.class)) {
Object targetObject = getTestClass().getJavaClass().newInstance();
FrameworkPerformanceMethod performaceTestMethod = new FrameworkPerformanceMethod(
- method.getMethod(), targetObject, current);
+ method.getMethod(), targetObject, current, reportLevel);
tests.add(performaceTestMethod);
}
diff --git a/src/main/java/org/apache/sling/performance/ReportLogger.java b/src/main/java/org/apache/sling/performance/ReportLogger.java
index d43f455..ddbeb62 100644
--- a/src/main/java/org/apache/sling/performance/ReportLogger.java
+++ b/src/main/java/org/apache/sling/performance/ReportLogger.java
@@ -17,11 +17,11 @@ public class ReportLogger {
}
public static void writeReport(String test, String testSuiteName,
- String name, DescriptiveStatistics statistics, ReportType reportType)
+ String name, DescriptiveStatistics statistics, ReportType reportType, PerformanceRunner.ReportLevel reportlevel)
throws Exception {
switch (reportType) {
case TXT:
- writeReportTxt(test, testSuiteName, name, statistics);
+ writeReportTxt(test, testSuiteName, name, statistics, reportlevel);
break;
default:
throw new Exception(
@@ -40,19 +40,18 @@ public class ReportLogger {
* the statistics data to be written
* @throws IOException
*/
- public static void writeReportTxt(String test, String testSuiteName,
- String name, DescriptiveStatistics statistics) throws IOException {
+ public static void writeReportTxt(String test, String testSuiteName, String name, DescriptiveStatistics statistics, PerformanceRunner.ReportLevel reportlevel)
+ throws Exception{
String className = test;
className = className.substring(className.lastIndexOf(".") + 1);
File reportDir = new File("target/performance-reports");
if (!reportDir.exists()) {
- boolean test1 = reportDir.mkdir();
+ if (!reportDir.mkdir())
+ throw new IOException("Unable to create performance-reports directory");
}
- File report = new File("target/performance-reports", className + ".txt");
-
// need this in the case a user wants to set the suite name from the
// command line
// useful if we run the test cases from the command line for example
@@ -63,25 +62,93 @@ public class ReportLogger {
}
}
- boolean needsPrefix = !report.exists();
- PrintWriter writer = new PrintWriter(new FileWriterWithEncoding(report,
- "UTF-8", true));
- try {
- if (needsPrefix) {
- writer.format(
- "# %-34.34s min 10%% 50%% 90%% max%n",
- className);
+ String resultFileName = className;
+ if (reportlevel.equals(PerformanceRunner.ReportLevel.ClassLevel)){
+ writeReportClassLevel(resultFileName, testSuiteName, statistics);
+ }else if (reportlevel.equals(PerformanceRunner.ReportLevel.MethodLevel)){
+ resultFileName = test + "." + name;
+ writeReportMethodLevel(resultFileName, testSuiteName, statistics);
}
-
- writer.format("%-36.36s %6.0f %6.0f %6.0f %6.0f %6.0f%n",
- testSuiteName, statistics.getMin(),
- statistics.getPercentile(10.0),
- statistics.getPercentile(50.0),
- statistics.getPercentile(90.0), statistics.getMax());
- } finally {
- writer.close();
- }
}
+
+ /**
+ * Write report for class level tests
+ * @param resultFileName the name of the result file (without extension)
+ * @param testSuiteName the name of the test suite name
+ * @param statistics the statistics object used to compute different medians
+ * @throws IOException
+ */
+ private static void writeReportClassLevel(String resultFileName, String testSuiteName, DescriptiveStatistics statistics)
+ throws IOException{
+
+ File report = new File("target/performance-reports", resultFileName + ".txt");
+ boolean needsPrefix = !report.exists();
+ PrintWriter writer = new PrintWriter(
+ new FileWriterWithEncoding(report, "UTF-8", true));
+ try {
+ if (needsPrefix) {
+ writer.format(
+ "# %-34.34s min 10%% 50%% 90%% max%n",
+ resultFileName);
+ }
+
+ writer.format(
+ "%-36.36s %6.0f %6.0f %6.0f %6.0f %6.0f%n",
+ testSuiteName,
+ statistics.getMin(),
+ statistics.getPercentile(10.0),
+ statistics.getPercentile(50.0),
+ statistics.getPercentile(90.0),
+ statistics.getMax());
+ } finally {
+ writer.close();
+ }
+ }
+
+ /**
+ * Write report for method level tests
+ * @param resultFileName the name of the result file (without extension)
+ * @param testSuiteName the name of the test suite name
+ * @param statistics the statistics object used to compute different medians
+ * @throws IOException
+ */
+ private static void writeReportMethodLevel(String resultFileName, String testSuiteName, DescriptiveStatistics statistics)
+ throws IOException{
+ File report = new File("target/performance-reports", resultFileName + ".txt");
+
+ String className = resultFileName.substring(0, resultFileName.lastIndexOf("."));
+ String methodName = resultFileName.substring(resultFileName.lastIndexOf(".") + 1);
+
+ boolean needsPrefix = !report.exists();
+ PrintWriter writer = new PrintWriter(
+ new FileWriterWithEncoding(report, "UTF-8", true));
+ try {
+ if (needsPrefix) {
+ writer.format(
+ "%-40.40s|%-80.80s|%-40.40s| DateTime | min | 10%% | 50%% | 90%% | max%n",
+ "Test Suite",
+ "Test Class",
+ "Test Method");
+ }
+
+ writer.format(
+ "%-40.40s|%-80.80s|%-40.40s|%-20.20s|%7.0f|%9.0f|%9.0f|%9.0f|%9.0f%n",
+ testSuiteName,
+ className,
+ methodName,
+ getDate(),
+ statistics.getMin(),
+ statistics.getPercentile(10.0),
+ statistics.getPercentile(50.0),
+ statistics.getPercentile(90.0),
+ statistics.getMax());
+ } finally {
+ writer.close();
+ }
+ }
+
+
+
/**
* Get the date that will be written into the result file
--
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.