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

dailai pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/seatunnel.git


The following commit(s) were added to refs/heads/dev by this push:
     new af4fd8b933 [Feature][E2E] Add E2E test case time analysis (#8028)
af4fd8b933 is described below

commit af4fd8b9336cd511b8affdf540068d066de78ff4
Author: zhangdonghao <[email protected]>
AuthorDate: Wed Nov 13 10:20:47 2024 +0800

    [Feature][E2E] Add E2E test case time analysis (#8028)
---
 .../apache/seatunnel/e2e/common/TestSuiteBase.java |  4 +-
 .../e2e/common/junit/TimingExtension.java          | 56 ++++++++++++++++++++++
 .../seatunnel/e2e/transform/TestSuiteBase.java     |  4 +-
 3 files changed, 62 insertions(+), 2 deletions(-)

diff --git 
a/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/TestSuiteBase.java
 
b/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/TestSuiteBase.java
index 9e47eb856b..ba9aadbecf 100644
--- 
a/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/TestSuiteBase.java
+++ 
b/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/TestSuiteBase.java
@@ -23,6 +23,7 @@ import 
org.apache.seatunnel.e2e.common.junit.ContainerTestingExtension;
 import org.apache.seatunnel.e2e.common.junit.TestCaseInvocationContextProvider;
 import org.apache.seatunnel.e2e.common.junit.TestContainers;
 import org.apache.seatunnel.e2e.common.junit.TestLoggerExtension;
+import org.apache.seatunnel.e2e.common.junit.TimingExtension;
 import org.apache.seatunnel.e2e.common.util.ContainerUtil;
 
 import org.junit.jupiter.api.TestInstance;
@@ -35,7 +36,8 @@ import com.github.dockerjava.api.DockerClient;
 @ExtendWith({
     ContainerTestingExtension.class,
     TestLoggerExtension.class,
-    TestCaseInvocationContextProvider.class
+    TestCaseInvocationContextProvider.class,
+    TimingExtension.class
 })
 @TestInstance(TestInstance.Lifecycle.PER_CLASS)
 public abstract class TestSuiteBase {
diff --git 
a/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/junit/TimingExtension.java
 
b/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/junit/TimingExtension.java
new file mode 100644
index 0000000000..44dd4410be
--- /dev/null
+++ 
b/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/junit/TimingExtension.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.seatunnel.e2e.common.junit;
+
+import org.junit.jupiter.api.extension.AfterTestExecutionCallback;
+import org.junit.jupiter.api.extension.BeforeTestExecutionCallback;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.api.extension.ExtensionContext.Store;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.lang.reflect.Method;
+
+public class TimingExtension implements BeforeTestExecutionCallback, 
AfterTestExecutionCallback {
+    private static final Logger LOG = 
LoggerFactory.getLogger(TimingExtension.class);
+    private static final String START_TIME = "start time";
+
+    @Override
+    public void afterTestExecution(ExtensionContext context) throws Exception {
+        Class<?> testClass = context.getRequiredTestClass();
+        Method testMethod = context.getRequiredTestMethod();
+        long startTime = getStore(context).remove(START_TIME, long.class);
+        long duration = System.currentTimeMillis() - startTime;
+        LOG.info(
+                " [{}#{}] E2E test case cost {}s.",
+                testClass.getName(),
+                testMethod.getName(),
+                duration / 1000);
+    }
+
+    @Override
+    public void beforeTestExecution(ExtensionContext context) throws Exception 
{
+        getStore(context).put(START_TIME, System.currentTimeMillis());
+    }
+
+    private Store getStore(ExtensionContext context) {
+        return context.getStore(
+                ExtensionContext.Namespace.create(getClass(), 
context.getRequiredTestMethod()));
+    }
+}
diff --git 
a/seatunnel-e2e/seatunnel-transforms-v2-e2e/seatunnel-transforms-v2-e2e-common/src/test/java/org/apache/seatunnel/e2e/transform/TestSuiteBase.java
 
b/seatunnel-e2e/seatunnel-transforms-v2-e2e/seatunnel-transforms-v2-e2e-common/src/test/java/org/apache/seatunnel/e2e/transform/TestSuiteBase.java
index 41be966c1a..b3b2670ae8 100644
--- 
a/seatunnel-e2e/seatunnel-transforms-v2-e2e/seatunnel-transforms-v2-e2e-common/src/test/java/org/apache/seatunnel/e2e/transform/TestSuiteBase.java
+++ 
b/seatunnel-e2e/seatunnel-transforms-v2-e2e/seatunnel-transforms-v2-e2e-common/src/test/java/org/apache/seatunnel/e2e/transform/TestSuiteBase.java
@@ -23,6 +23,7 @@ import 
org.apache.seatunnel.e2e.common.junit.ContainerTestingExtension;
 import org.apache.seatunnel.e2e.common.junit.TestCaseInvocationContextProvider;
 import org.apache.seatunnel.e2e.common.junit.TestContainers;
 import org.apache.seatunnel.e2e.common.junit.TestLoggerExtension;
+import org.apache.seatunnel.e2e.common.junit.TimingExtension;
 import org.apache.seatunnel.e2e.common.util.ContainerUtil;
 
 import org.junit.jupiter.api.TestInstance;
@@ -32,7 +33,8 @@ import org.testcontainers.containers.Network;
 @ExtendWith({
     ContainerTestingExtension.class,
     TestLoggerExtension.class,
-    TestCaseInvocationContextProvider.class
+    TestCaseInvocationContextProvider.class,
+    TimingExtension.class
 })
 @TestInstance(TestInstance.Lifecycle.PER_CLASS)
 public abstract class TestSuiteBase {

Reply via email to