diff --git a/build.gradle b/build.gradle
index 2181ab07cd1fea923c3743c058f202ae5a833eeb..1d82cad4f599d35c4002a7490c078d572f58222a 100644
--- a/build.gradle
+++ b/build.gradle
@@ -93,8 +93,8 @@ dependencies {
 	testCompile 'org.testng:testng:6+'
 }
 
-// Adding support for compiler warnings generation
 tasks.withType(Compile) {
+	// adds support for compiler warnings generation
     options.compilerArgs << '-Xlint'
 }
 
@@ -160,6 +160,16 @@ eclipse {
 	}
 }
 
+eclipse.classpath.file {
+	// See: http://stackoverflow.com/questions/12836089/why-is-eclipse-not-attaching-3rd-party-libs-source-files-to-a-wtp-faceted-gradle
+	// Classpath entry for Eclipse which changes the order of classpathentries; otherwise no sources for 3rd party jars are shown
+	withXml { xml ->
+		def node = xml.asNode()
+		node.remove( node.find { it.@path == 'org.eclipse.jst.j2ee.internal.web.container' } )
+		node.appendNode( 'classpathentry', [ kind: 'con', path: 'org.eclipse.jst.j2ee.internal.web.container', exported: 'true'])
+	}
+}
+
 findbugs {
 	effort = "max"
 	ignoreFailures = true
@@ -191,10 +201,25 @@ publishing {
 
 test {
 	useTestNG()
+	options {
+		listeners << 'org.testng.reporters.XMLReporter'
+	}
+
+	//turn off Gradle's HTML report to avoid replacing the
+	//reports generated by TestNG library:
+	reports.junitXml.enabled = false
+	reports.html.enabled = false
 
 	ignoreFailures = true
 }
 
+test.doFirst {
+	// TestNG XMLReporter does not create reportDir (but would fail without it)
+	if (!project.testReportDir.isDirectory()) {
+		project.testReportDir.mkdirs()
+	}
+}
+
 vagrant {
 	boxDir = vagrantDir
 	provider = 'virtualbox'
@@ -206,6 +231,13 @@ vagrantDestroy.doFirst {
 	}
 }
 
+// Custom task definitions
+
+task cleanTestResults(type: Delete) {
+	// We only need the test reports... not the binary results
+	delete project.testResultsDir
+}
+
 task javadocJar(type: Jar, dependsOn: javadoc) {
 	description = 'Builds a jar file including javadoc'
 	from javadoc.destinationDir
@@ -218,8 +250,6 @@ task jsDoc(type:com.eriwen.gradle.js.tasks.JsDocTask) {
 	destinationDir = file("${buildDir}/docs/jsdoc")
 }
 
-tasks.jsDoc.dependsOn tasks.processResources
-
 task jsHint(type:com.eriwen.gradle.js.tasks.JsHintTask) {
 	jshint.options = [browser: true, expr: true, jquery: true, latedef: 'nofunc', quotmark: 'single', unused: true, undef: true, wsh: true]
 	jshint.predef = ['$': false, 'define': false, 'google': false, 'require': false]
@@ -229,8 +259,6 @@ task jsHint(type:com.eriwen.gradle.js.tasks.JsHintTask) {
 	reporter = 'checkstyle'
 }
 
-tasks.jsHint.dependsOn tasks.processResources
-
 task sourcesJar(type: Jar, dependsOn: classes) {
 	description = 'Builds a jar file including sources'
 	from sourceSets.main.allSource
@@ -286,17 +314,14 @@ task vagrantPrepare << {
 	}
 }
 
-vagrantUp.dependsOn(vagrantPrepare)
+// task dependencies
 
-// See: http://stackoverflow.com/questions/12836089/why-is-eclipse-not-attaching-3rd-party-libs-source-files-to-a-wtp-faceted-gradle
-eclipse.classpath.file {
-	// Classpath entry for Eclipse which changes the order of classpathentries; otherwise no sources for 3rd party jars are shown
-	withXml { xml ->
-		def node = xml.asNode()
-		node.remove( node.find { it.@path == 'org.eclipse.jst.j2ee.internal.web.container' } )
-		node.appendNode( 'classpathentry', [ kind: 'con', path: 'org.eclipse.jst.j2ee.internal.web.container', exported: 'true'])
-	}
-}
+tasks.jsDoc.dependsOn tasks.processResources
+tasks.jsHint.dependsOn tasks.processResources
+tasks.test.finalizedBy tasks.cleanTestResults
+tasks.vagrantUp.dependsOn tasks.vagrantPrepare
+
+// CI tasks
 
 task jarAll(dependsOn: [jar, javadocJar, sourcesJar, staticJar])
 task buildAll(dependsOn: [jarAll, build])
diff --git a/src/test/resources/logback-test.xml b/src/test/resources/logback-test.xml
new file mode 100644
index 0000000000000000000000000000000000000000..05f75516042726abec0b0dc558ad05ce617dbc44
--- /dev/null
+++ b/src/test/resources/logback-test.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<configuration debug="false">
+	<logger name="it.geosolutions.geoserver.rest" level="WARN" />
+	<logger name="httpclient" level="WARN" />
+	<logger name="org.apache.commons.httpclient" level="WARN" />
+
+	<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<file>build/reports/tests/logFile.log</file>
+		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+			<!-- daily rollover -->
+			<fileNamePattern>logFile.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+				<!-- or whenever the file size reaches 100MB -->
+				<maxFileSize>100MB</maxFileSize>
+			</timeBasedFileNamingAndTriggeringPolicy>
+
+			<!-- keep 30 days' worth of history -->
+			<maxHistory>30</maxHistory>
+        </rollingPolicy>
+
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger: %message%n</pattern>
+        </encoder>
+	</appender>
+
+	<root level="debug">
+		<appender-ref ref="FILE" />
+	</root>
+</configuration>
diff --git a/src/test/resources/logback.xml b/src/test/resources/logback.xml
deleted file mode 100644
index a82a6a9d215f5552793160b62ee3a1c3c797fed3..0000000000000000000000000000000000000000
--- a/src/test/resources/logback.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
-<configuration debug="false">
-	<logger name="it.geosolutions.geoserver.rest" level="WARN" />
-	<logger name="httpclient" level="WARN" />
-	<logger name="org.apache.commons.httpclient" level="WARN" />
-
-	<appender name="FILE" class="ch.qos.logback.core.FileAppender">
-		<file>build/test-results/logfile.txt</file>
-		<append>false</append>
-        <encoder>
-            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger: %message%n</pattern>
-        </encoder>
-	</appender>
-
-	<root level="debug">
-		<appender-ref ref="FILE" />
-	</root>
-</configuration>