This is an automated email from the ASF dual-hosted git repository.

kxiao pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.0 by this push:
     new be2dd645725 [regression-test](framework) Support running tests 
multiple times and reporting correctly to TeamCity (#26606) (#26871)
be2dd645725 is described below

commit be2dd6457252965b579ff30738b8eef1ca850812
Author: shuke <[email protected]>
AuthorDate: Mon Nov 13 17:18:29 2023 +0800

    [regression-test](framework) Support running tests multiple times and 
reporting correctly to TeamCity (#26606) (#26871)
---
 .../apache/doris/regression/RegressionTest.groovy  | 21 +++++++++++++++++-
 .../apache/doris/regression/util/Recorder.groovy   |  4 ++++
 .../doris/regression/util/TeamcityUtils.groovy     | 25 +++++++++++++++++-----
 3 files changed, 44 insertions(+), 6 deletions(-)

diff --git 
a/regression-test/framework/src/main/groovy/org/apache/doris/regression/RegressionTest.groovy
 
b/regression-test/framework/src/main/groovy/org/apache/doris/regression/RegressionTest.groovy
index 6cdb918a7f4..36850b8ab10 100644
--- 
a/regression-test/framework/src/main/groovy/org/apache/doris/regression/RegressionTest.groovy
+++ 
b/regression-test/framework/src/main/groovy/org/apache/doris/regression/RegressionTest.groovy
@@ -30,6 +30,7 @@ import 
org.apache.doris.regression.suite.event.StackEventListeners
 import org.apache.doris.regression.suite.SuiteScript
 import org.apache.doris.regression.suite.event.TeamcityEventListener
 import org.apache.doris.regression.util.Recorder
+import org.apache.doris.regression.util.TeamcityUtils
 import groovy.util.logging.Slf4j
 import org.apache.commons.cli.*
 import org.apache.commons.lang3.concurrent.BasicThreadFactory;
@@ -65,10 +66,28 @@ class RegressionTest {
         Config config = Config.fromCommandLine(cmd)
         initGroovyEnv(config)
         boolean success = true
+        Integer totalFailure = 0
+        Integer failureLimit = 
Integer.valueOf(config.otherConfigs.getOrDefault("max_failure_num", 
"-1").toString())
+        if (failureLimit <= 0) {
+            failureLimit = Integer.MAX_VALUE
+        }
+
         for (int i = 0; i < config.times; i++) {
             log.info("=== run ${i} time ===")
+            if (config.times > 1) {
+                TeamcityUtils.postfix = i.toString()
+            }
+
             Recorder recorder = runScripts(config)
-            success = printResult(config, recorder)
+            success = (success && printResult(config, recorder))
+
+            if (recorder.getFatalNum() > 0) {
+                break
+            }
+            totalFailure += recorder.getFailureOrFatalNum()
+            if (totalFailure > failureLimit) {
+                break
+            }
         }
         actionExecutors.shutdown()
         suiteExecutors.shutdown()
diff --git 
a/regression-test/framework/src/main/groovy/org/apache/doris/regression/util/Recorder.groovy
 
b/regression-test/framework/src/main/groovy/org/apache/doris/regression/util/Recorder.groovy
index 25bbd524c6b..6a0ee19334e 100644
--- 
a/regression-test/framework/src/main/groovy/org/apache/doris/regression/util/Recorder.groovy
+++ 
b/regression-test/framework/src/main/groovy/org/apache/doris/regression/util/Recorder.groovy
@@ -45,6 +45,10 @@ class Recorder {
         return failureCounter.get()
     }
 
+    public int getFatalNum() {
+        return fatalScriptList.size()
+    }
+
     void onSuccess(SuiteInfo suiteInfo) {
         successList.add(suiteInfo)
     }
diff --git 
a/regression-test/framework/src/main/groovy/org/apache/doris/regression/util/TeamcityUtils.groovy
 
b/regression-test/framework/src/main/groovy/org/apache/doris/regression/util/TeamcityUtils.groovy
index dd713db2d1d..61e6ff2eed3 100644
--- 
a/regression-test/framework/src/main/groovy/org/apache/doris/regression/util/TeamcityUtils.groovy
+++ 
b/regression-test/framework/src/main/groovy/org/apache/doris/regression/util/TeamcityUtils.groovy
@@ -24,34 +24,49 @@ import org.apache.tools.ant.util.DateUtils
 
 @CompileStatic
 class TeamcityUtils {
+    static String postfix = ""
+
+    static String getSuiteName(String name) {
+        if (postfix == "") {
+            return name
+        } else {
+            return name+"-"+postfix
+        }
+    }
+
     static String formatNow() {
         return DateUtils.format(System.currentTimeMillis(), 
"yyyy-MM-dd'T'HH:mm:ss.SSSZ")
     }
 
     static String formatStdOut(SuiteContext suiteContext, String msg) {
         String timestamp = formatNow()
-        return "##teamcity[testStdOut name='${suiteContext.flowName}' 
out='${escape(msg)}' flowId='${suiteContext.flowId}' timestamp='${timestamp}']"
+        String name = getSuiteName(suiteContext.flowName)
+        return "##teamcity[testStdOut name='${name}' out='${escape(msg)}' 
flowId='${suiteContext.flowId}' timestamp='${timestamp}']"
     }
 
     static String formatStdErr(SuiteContext suiteContext, String msg) {
         String timestamp = formatNow()
-        return "##teamcity[testStdErr name='${suiteContext.flowName}' 
out='${escape(msg)}' flowId='${suiteContext.flowId}' timestamp='${timestamp}']"
+        String name = getSuiteName(suiteContext.flowName)
+        return "##teamcity[testStdErr name='${name}' out='${escape(msg)}' 
flowId='${suiteContext.flowId}' timestamp='${timestamp}']"
     }
 
     static void testStarted(SuiteContext suiteContext) {
         String timestamp = formatNow()
+        String name = getSuiteName(suiteContext.flowName)
         println("##teamcity[flowStarted flowId='${suiteContext.flowId}' 
timestamp='${timestamp}']")
-        println("##teamcity[testStarted name='${suiteContext.flowName}' 
flowId='${suiteContext.flowId}' timestamp='${timestamp}']")
+        println("##teamcity[testStarted name='${name}' 
flowId='${suiteContext.flowId}' timestamp='${timestamp}']")
     }
 
     static void testFailed(SuiteContext suiteContext, String msg, String 
details) {
         String timestamp = formatNow()
-        println("##teamcity[testFailed name='${suiteContext.flowName}' 
message='${escape(msg)}' flowId='${suiteContext.flowId}' 
details='${escape(details)}' timestamp='${timestamp}']")
+        String name = getSuiteName(suiteContext.flowName)
+        println("##teamcity[testFailed name='${name}' message='${escape(msg)}' 
flowId='${suiteContext.flowId}' details='${escape(details)}' 
timestamp='${timestamp}']")
     }
 
     static void testFinished(SuiteContext suiteContext, long elapsed) {
         String timestamp = formatNow()
-        println("##teamcity[testFinished name='${suiteContext.flowName}' 
flowId='${suiteContext.flowId}' duration='${elapsed}' 
timestamp='${timestamp}']")
+        String name = getSuiteName(suiteContext.flowName)
+        println("##teamcity[testFinished name='${name}' 
flowId='${suiteContext.flowId}' duration='${elapsed}' 
timestamp='${timestamp}']")
         println("##teamcity[flowFinished flowId='${suiteContext.flowId}' 
timestamp='${timestamp}']")
     }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to