You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@seatunnel.apache.org by wa...@apache.org on 2023/01/17 09:19:41 UTC

[incubator-seatunnel] branch dev updated: [Improve][E2E][Http] Refactor the e2e test of http. (#3969)

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

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


The following commit(s) were added to refs/heads/dev by this push:
     new a529a984b [Improve][E2E][Http] Refactor the e2e test of http. (#3969)
a529a984b is described below

commit a529a984b2b18e19ebe6a4fc82ac041011d4c1ca
Author: FlechazoW <35...@users.noreply.github.com>
AuthorDate: Tue Jan 17 17:19:35 2023 +0800

    [Improve][E2E][Http] Refactor the e2e test of http. (#3969)
---
 .../e2e/connector/http/HttpContentJsonIT.java      | 56 ++--------------------
 .../seatunnel/e2e/connector/http/HttpGitlabIT.java | 56 ++--------------------
 .../seatunnel/e2e/connector/http/HttpIT.java       | 25 +++++++---
 .../seatunnel/e2e/connector/http/HttpJiraIT.java   | 55 ++-------------------
 .../e2e/connector/http/HttpJsonPathIT.java         | 55 ++-------------------
 .../e2e/connector/http/HttpKlaviyoIT.java          | 55 ++-------------------
 .../e2e/connector/http/HttpLemlistIT.java          | 55 ++-------------------
 .../seatunnel/e2e/connector/http/HttpNotionIT.java | 55 ++-------------------
 .../e2e/connector/http/HttpOneSignalIT.java        | 55 ++-------------------
 .../e2e/connector/http/HttpPersistiqIT.java        | 55 ++-------------------
 10 files changed, 64 insertions(+), 458 deletions(-)

diff --git a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpContentJsonIT.java b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpContentJsonIT.java
index 5fab2dd7f..7a290ae3f 100644
--- a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpContentJsonIT.java
+++ b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpContentJsonIT.java
@@ -17,60 +17,14 @@
 
 package org.apache.seatunnel.e2e.connector.http;
 
-import org.apache.seatunnel.e2e.common.TestResource;
-import org.apache.seatunnel.e2e.common.TestSuiteBase;
-import org.apache.seatunnel.e2e.common.container.TestContainer;
-
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.TestTemplate;
-import org.testcontainers.containers.Container;
-import org.testcontainers.containers.GenericContainer;
-import org.testcontainers.containers.output.Slf4jLogConsumer;
-import org.testcontainers.containers.wait.strategy.HttpWaitStrategy;
-import org.testcontainers.lifecycle.Startables;
-import org.testcontainers.utility.DockerImageName;
-import org.testcontainers.utility.DockerLoggerFactory;
-import org.testcontainers.utility.MountableFile;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.stream.Stream;
-
-public class HttpContentJsonIT extends TestSuiteBase implements TestResource {
-
-    private static final String IMAGE = "mockserver/mockserver:5.14.0";
-
-    private GenericContainer<?> mockserverContainer;
-
-    @BeforeAll
+public class HttpContentJsonIT extends HttpIT {
     @Override
-    public void startUp() {
-        this.mockserverContainer = new GenericContainer<>(DockerImageName.parse(IMAGE))
-            .withNetwork(NETWORK)
-            .withNetworkAliases("mockserver")
-            .withExposedPorts(1080)
-            .withCopyFileToContainer(MountableFile.forHostPath(new File(HttpContentJsonIT.class.getResource(
-                    "/mockserver-contentjson-config.json").getPath()).getAbsolutePath()),
-                "/tmp/mockserver-contentjson-config.json")
-            .withEnv("MOCKSERVER_INITIALIZATION_JSON_PATH", "/tmp/mockserver-contentjson-config.json")
-            .withLogConsumer(new Slf4jLogConsumer(DockerLoggerFactory.getLogger(IMAGE)))
-            .waitingFor(new HttpWaitStrategy().forPath("/").forStatusCode(404));
-        Startables.deepStart(Stream.of(mockserverContainer)).join();
+    public String getITTestConf() {
+        return "/http_contentjson_to_assert.conf";
     }
 
-    @AfterAll
     @Override
-    public void tearDown() {
-        if (mockserverContainer != null) {
-            mockserverContainer.stop();
-        }
-    }
-
-    @TestTemplate
-    public void testHttpContentJsonSourceToAssertSink(TestContainer container) throws IOException, InterruptedException {
-        Container.ExecResult execResult = container.executeJob("/http_contentjson_to_assert.conf");
-        Assertions.assertEquals(0, execResult.getExitCode());
+    public String getMockServerConfig() {
+        return "/mockserver-contentjson-config.json";
     }
 }
diff --git a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpGitlabIT.java b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpGitlabIT.java
index 7044bdb2a..2784dbf7f 100644
--- a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpGitlabIT.java
+++ b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpGitlabIT.java
@@ -17,61 +17,15 @@
 
 package org.apache.seatunnel.e2e.connector.http;
 
-import org.apache.seatunnel.e2e.common.TestResource;
-import org.apache.seatunnel.e2e.common.TestSuiteBase;
-import org.apache.seatunnel.e2e.common.container.TestContainer;
+public class HttpGitlabIT extends HttpIT {
 
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.TestTemplate;
-import org.testcontainers.containers.Container;
-import org.testcontainers.containers.GenericContainer;
-import org.testcontainers.containers.output.Slf4jLogConsumer;
-import org.testcontainers.containers.wait.strategy.HttpWaitStrategy;
-import org.testcontainers.lifecycle.Startables;
-import org.testcontainers.utility.DockerImageName;
-import org.testcontainers.utility.DockerLoggerFactory;
-import org.testcontainers.utility.MountableFile;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Objects;
-import java.util.stream.Stream;
-
-public class HttpGitlabIT extends TestSuiteBase implements TestResource {
-
-    private static final String IMAGE = "mockserver/mockserver:5.14.0";
-
-    private GenericContainer<?> mockserverContainer;
-
-    @BeforeAll
     @Override
-    public void startUp() {
-        this.mockserverContainer = new GenericContainer<>(DockerImageName.parse(IMAGE))
-            .withNetwork(NETWORK)
-            .withNetworkAliases("mockserver")
-            .withExposedPorts(1080)
-            .withCopyFileToContainer(MountableFile.forHostPath(new File(Objects.requireNonNull(HttpIT.class.getResource(
-                    "/mockserver-gitlab-config.json")).getPath()).getAbsolutePath()),
-                "/tmp/mockserver-gitlab-config.json")
-            .withEnv("MOCKSERVER_INITIALIZATION_JSON_PATH", "/tmp/mockserver-gitlab-config.json")
-            .withLogConsumer(new Slf4jLogConsumer(DockerLoggerFactory.getLogger(IMAGE)))
-            .waitingFor(new HttpWaitStrategy().forPath("/").forStatusCode(404));
-        Startables.deepStart(Stream.of(mockserverContainer)).join();
+    public String getITTestConf() {
+        return "/gitlab_json_to_assert.conf";
     }
 
-    @AfterAll
     @Override
-    public void tearDown() {
-        if (mockserverContainer != null) {
-            mockserverContainer.stop();
-        }
-    }
-
-    @TestTemplate
-    public void testHttpGitlabSourceToAssertSink(TestContainer container) throws IOException, InterruptedException {
-        Container.ExecResult execResult = container.executeJob("/gitlab_json_to_assert.conf");
-        Assertions.assertEquals(0, execResult.getExitCode());
+    public String getMockServerConfig() {
+        return "/mockserver-gitlab-config.json";
     }
 }
diff --git a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpIT.java b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpIT.java
index b781a3412..5e2fe4ebd 100644
--- a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpIT.java
+++ b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpIT.java
@@ -36,10 +36,14 @@ import org.testcontainers.utility.MountableFile;
 
 import java.io.File;
 import java.io.IOException;
+import java.net.URL;
+import java.util.Optional;
 import java.util.stream.Stream;
 
 public class HttpIT extends TestSuiteBase implements TestResource {
 
+    private static final String TMP_DIR = "/tmp";
+
     private static final String IMAGE = "mockserver/mockserver:5.14.0";
 
     private GenericContainer<?> mockserverContainer;
@@ -47,14 +51,15 @@ public class HttpIT extends TestSuiteBase implements TestResource {
     @BeforeAll
     @Override
     public void startUp() {
+        Optional<URL> resource = Optional.ofNullable(HttpIT.class.getResource(getMockServerConfig()));
         this.mockserverContainer = new GenericContainer<>(DockerImageName.parse(IMAGE))
             .withNetwork(NETWORK)
             .withNetworkAliases("mockserver")
             .withExposedPorts(1080)
-            .withCopyFileToContainer(MountableFile.forHostPath(new File(HttpIT.class.getResource(
-                    "/mockserver-config.json").getPath()).getAbsolutePath()),
-                "/tmp/mockserver-config.json")
-            .withEnv("MOCKSERVER_INITIALIZATION_JSON_PATH", "/tmp/mockserver-config.json")
+            .withCopyFileToContainer(
+                    MountableFile.forHostPath(new File(resource.orElseThrow(() -> new IllegalArgumentException("Can not get config file of mockServer")).getPath()).getAbsolutePath()),
+                    TMP_DIR + getMockServerConfig())
+            .withEnv("MOCKSERVER_INITIALIZATION_JSON_PATH", TMP_DIR + getMockServerConfig())
             .withLogConsumer(new Slf4jLogConsumer(DockerLoggerFactory.getLogger(IMAGE)))
             .waitingFor(new HttpWaitStrategy().forPath("/").forStatusCode(404));
         Startables.deepStart(Stream.of(mockserverContainer)).join();
@@ -69,8 +74,16 @@ public class HttpIT extends TestSuiteBase implements TestResource {
     }
 
     @TestTemplate
-    public void testHttpSourceToAssertSink(TestContainer container) throws IOException, InterruptedException {
-        Container.ExecResult execResult = container.executeJob("/http_json_to_assert.conf");
+    public void testSourceToAssertSink(TestContainer container) throws IOException, InterruptedException {
+        Container.ExecResult execResult = container.executeJob(getITTestConf());
         Assertions.assertEquals(0, execResult.getExitCode());
     }
+
+    public String getITTestConf() {
+        return "/http_json_to_assert.conf";
+    }
+
+    public String getMockServerConfig() {
+        return "/mockserver-config.json";
+    }
 }
diff --git a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpJiraIT.java b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpJiraIT.java
index 94a513e17..539aed57f 100644
--- a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpJiraIT.java
+++ b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpJiraIT.java
@@ -17,60 +17,15 @@
 
 package org.apache.seatunnel.e2e.connector.http;
 
-import org.apache.seatunnel.e2e.common.TestResource;
-import org.apache.seatunnel.e2e.common.TestSuiteBase;
-import org.apache.seatunnel.e2e.common.container.TestContainer;
+public class HttpJiraIT extends HttpIT {
 
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.TestTemplate;
-import org.testcontainers.containers.Container;
-import org.testcontainers.containers.GenericContainer;
-import org.testcontainers.containers.output.Slf4jLogConsumer;
-import org.testcontainers.containers.wait.strategy.HttpWaitStrategy;
-import org.testcontainers.lifecycle.Startables;
-import org.testcontainers.utility.DockerImageName;
-import org.testcontainers.utility.DockerLoggerFactory;
-import org.testcontainers.utility.MountableFile;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.stream.Stream;
-
-public class HttpJiraIT extends TestSuiteBase implements TestResource {
-
-    private static final String IMAGE = "mockserver/mockserver:5.14.0";
-
-    private GenericContainer<?> mockserverContainer;
-
-    @BeforeAll
     @Override
-    public void startUp() {
-        this.mockserverContainer = new GenericContainer<>(DockerImageName.parse(IMAGE))
-                .withNetwork(NETWORK)
-                .withNetworkAliases("mockserver")
-                .withExposedPorts(1080)
-                .withCopyFileToContainer(MountableFile.forHostPath(new File(HttpJiraIT.class.getResource(
-                                "/mockserver-jira-config.json").getPath()).getAbsolutePath()),
-                        "/tmp/mockserver-jira-config.json")
-                .withEnv("MOCKSERVER_INITIALIZATION_JSON_PATH", "/tmp/mockserver-jira-config.json")
-                .withLogConsumer(new Slf4jLogConsumer(DockerLoggerFactory.getLogger(IMAGE)))
-                .waitingFor(new HttpWaitStrategy().forPath("/").forStatusCode(404));
-        Startables.deepStart(Stream.of(mockserverContainer)).join();
+    public String getITTestConf() {
+        return "/jira_json_to_assert.conf";
     }
 
-    @AfterAll
     @Override
-    public void tearDown() {
-        if (mockserverContainer != null) {
-            mockserverContainer.stop();
-        }
-    }
-
-    @TestTemplate
-    public void testHttpJiraSourceToAssertSink(TestContainer container) throws IOException, InterruptedException {
-        Container.ExecResult execResult = container.executeJob("/jira_json_to_assert.conf");
-        Assertions.assertEquals(0, execResult.getExitCode());
+    public String getMockServerConfig() {
+        return "/mockserver-jira-config.json";
     }
 }
diff --git a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpJsonPathIT.java b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpJsonPathIT.java
index 704407027..8bd48f16b 100644
--- a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpJsonPathIT.java
+++ b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpJsonPathIT.java
@@ -17,60 +17,15 @@
 
 package org.apache.seatunnel.e2e.connector.http;
 
-import org.apache.seatunnel.e2e.common.TestResource;
-import org.apache.seatunnel.e2e.common.TestSuiteBase;
-import org.apache.seatunnel.e2e.common.container.TestContainer;
+public class HttpJsonPathIT extends HttpIT {
 
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.TestTemplate;
-import org.testcontainers.containers.Container;
-import org.testcontainers.containers.GenericContainer;
-import org.testcontainers.containers.output.Slf4jLogConsumer;
-import org.testcontainers.containers.wait.strategy.HttpWaitStrategy;
-import org.testcontainers.lifecycle.Startables;
-import org.testcontainers.utility.DockerImageName;
-import org.testcontainers.utility.DockerLoggerFactory;
-import org.testcontainers.utility.MountableFile;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.stream.Stream;
-
-public class HttpJsonPathIT extends TestSuiteBase implements TestResource {
-
-    private static final String IMAGE = "mockserver/mockserver:5.14.0";
-
-    private GenericContainer<?> mockserverContainer;
-
-    @BeforeAll
     @Override
-    public void startUp() {
-        this.mockserverContainer = new GenericContainer<>(DockerImageName.parse(IMAGE))
-            .withNetwork(NETWORK)
-            .withNetworkAliases("mockserver")
-            .withExposedPorts(1080)
-            .withCopyFileToContainer(MountableFile.forHostPath(new File(HttpJsonPathIT.class.getResource(
-                    "/mockserver-jsonpath-config.json").getPath()).getAbsolutePath()),
-                "/tmp/mockserver-jsonpath-config.json")
-            .withEnv("MOCKSERVER_INITIALIZATION_JSON_PATH", "/tmp/mockserver-jsonpath-config.json")
-            .withLogConsumer(new Slf4jLogConsumer(DockerLoggerFactory.getLogger(IMAGE)))
-            .waitingFor(new HttpWaitStrategy().forPath("/").forStatusCode(404));
-        Startables.deepStart(Stream.of(mockserverContainer)).join();
+    public String getITTestConf() {
+        return "/http_jsonpath_to_assert.conf";
     }
 
-    @AfterAll
     @Override
-    public void tearDown() {
-        if (mockserverContainer != null) {
-            mockserverContainer.stop();
-        }
-    }
-
-    @TestTemplate
-    public void testHttpJsonPathSourceToAssertSink(TestContainer container) throws IOException, InterruptedException {
-        Container.ExecResult execResult = container.executeJob("/http_jsonpath_to_assert.conf");
-        Assertions.assertEquals(0, execResult.getExitCode());
+    public String getMockServerConfig() {
+        return "/mockserver-jsonpath-config.json";
     }
 }
diff --git a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpKlaviyoIT.java b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpKlaviyoIT.java
index 2c44c9fb4..588d1d60f 100644
--- a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpKlaviyoIT.java
+++ b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpKlaviyoIT.java
@@ -17,60 +17,15 @@
 
 package org.apache.seatunnel.e2e.connector.http;
 
-import org.apache.seatunnel.e2e.common.TestResource;
-import org.apache.seatunnel.e2e.common.TestSuiteBase;
-import org.apache.seatunnel.e2e.common.container.TestContainer;
+public class HttpKlaviyoIT extends HttpIT {
 
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.TestTemplate;
-import org.testcontainers.containers.Container;
-import org.testcontainers.containers.GenericContainer;
-import org.testcontainers.containers.output.Slf4jLogConsumer;
-import org.testcontainers.containers.wait.strategy.HttpWaitStrategy;
-import org.testcontainers.lifecycle.Startables;
-import org.testcontainers.utility.DockerImageName;
-import org.testcontainers.utility.DockerLoggerFactory;
-import org.testcontainers.utility.MountableFile;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.stream.Stream;
-
-public class HttpKlaviyoIT extends TestSuiteBase implements TestResource {
-
-    private static final String IMAGE = "mockserver/mockserver:5.14.0";
-
-    private GenericContainer<?> mockserverContainer;
-
-    @BeforeAll
     @Override
-    public void startUp() {
-        this.mockserverContainer = new GenericContainer<>(DockerImageName.parse(IMAGE))
-                .withNetwork(NETWORK)
-                .withNetworkAliases("mockserver")
-                .withExposedPorts(1080)
-                .withCopyFileToContainer(MountableFile.forHostPath(new File(HttpIT.class.getResource(
-                                "/mockserver-klaviyo-config.json").getPath()).getAbsolutePath()),
-                        "/tmp/mockserver-klaviyo-config.json")
-                .withEnv("MOCKSERVER_INITIALIZATION_JSON_PATH", "/tmp/mockserver-klaviyo-config.json")
-                .withLogConsumer(new Slf4jLogConsumer(DockerLoggerFactory.getLogger(IMAGE)))
-                .waitingFor(new HttpWaitStrategy().forPath("/").forStatusCode(404));
-        Startables.deepStart(Stream.of(mockserverContainer)).join();
+    public String getITTestConf() {
+        return "/klaviyo_json_to_assert.conf";
     }
 
-    @AfterAll
     @Override
-    public void tearDown() {
-        if (mockserverContainer != null) {
-            mockserverContainer.stop();
-        }
-    }
-
-    @TestTemplate
-    public void testHttpKlaviyoSourceToAssertSink(TestContainer container) throws IOException, InterruptedException {
-        Container.ExecResult execResult = container.executeJob("/klaviyo_json_to_assert.conf");
-        Assertions.assertEquals(0, execResult.getExitCode());
+    public String getMockServerConfig() {
+        return "/mockserver-klaviyo-config.json";
     }
 }
diff --git a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpLemlistIT.java b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpLemlistIT.java
index 3723efd75..ff6a27588 100644
--- a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpLemlistIT.java
+++ b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpLemlistIT.java
@@ -17,60 +17,15 @@
 
 package org.apache.seatunnel.e2e.connector.http;
 
-import org.apache.seatunnel.e2e.common.TestResource;
-import org.apache.seatunnel.e2e.common.TestSuiteBase;
-import org.apache.seatunnel.e2e.common.container.TestContainer;
+public class HttpLemlistIT extends HttpIT {
 
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.TestTemplate;
-import org.testcontainers.containers.Container;
-import org.testcontainers.containers.GenericContainer;
-import org.testcontainers.containers.output.Slf4jLogConsumer;
-import org.testcontainers.containers.wait.strategy.HttpWaitStrategy;
-import org.testcontainers.lifecycle.Startables;
-import org.testcontainers.utility.DockerImageName;
-import org.testcontainers.utility.DockerLoggerFactory;
-import org.testcontainers.utility.MountableFile;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.stream.Stream;
-
-public class HttpLemlistIT extends TestSuiteBase implements TestResource {
-
-    private static final String IMAGE = "mockserver/mockserver:5.14.0";
-
-    private GenericContainer<?> mockserverContainer;
-
-    @BeforeAll
     @Override
-    public void startUp() {
-        this.mockserverContainer = new GenericContainer<>(DockerImageName.parse(IMAGE))
-                .withNetwork(NETWORK)
-                .withNetworkAliases("mockserver")
-                .withExposedPorts(1080)
-                .withCopyFileToContainer(MountableFile.forHostPath(new File(HttpIT.class.getResource(
-                                "/mockserver-lemlist-config.json").getPath()).getAbsolutePath()),
-                        "/tmp/mockserver-lemlist-config.json")
-                .withEnv("MOCKSERVER_INITIALIZATION_JSON_PATH", "/tmp/mockserver-lemlist-config.json")
-                .withLogConsumer(new Slf4jLogConsumer(DockerLoggerFactory.getLogger(IMAGE)))
-                .waitingFor(new HttpWaitStrategy().forPath("/").forStatusCode(404));
-        Startables.deepStart(Stream.of(mockserverContainer)).join();
+    public String getITTestConf() {
+        return "/lemlist_json_to_assert.conf";
     }
 
-    @AfterAll
     @Override
-    public void tearDown() {
-        if (mockserverContainer != null) {
-            mockserverContainer.stop();
-        }
-    }
-
-    @TestTemplate
-    public void testHttpLemlistSourceToAssertSink(TestContainer container) throws IOException, InterruptedException {
-        Container.ExecResult execResult = container.executeJob("/lemlist_json_to_assert.conf");
-        Assertions.assertEquals(0, execResult.getExitCode());
+    public String getMockServerConfig() {
+        return "/mockserver-lemlist-config.json";
     }
 }
diff --git a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpNotionIT.java b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpNotionIT.java
index 275e60d4a..5a38bb88a 100644
--- a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpNotionIT.java
+++ b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpNotionIT.java
@@ -17,60 +17,15 @@
 
 package org.apache.seatunnel.e2e.connector.http;
 
-import org.apache.seatunnel.e2e.common.TestResource;
-import org.apache.seatunnel.e2e.common.TestSuiteBase;
-import org.apache.seatunnel.e2e.common.container.TestContainer;
+public class HttpNotionIT extends HttpIT {
 
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.TestTemplate;
-import org.testcontainers.containers.Container;
-import org.testcontainers.containers.GenericContainer;
-import org.testcontainers.containers.output.Slf4jLogConsumer;
-import org.testcontainers.containers.wait.strategy.HttpWaitStrategy;
-import org.testcontainers.lifecycle.Startables;
-import org.testcontainers.utility.DockerImageName;
-import org.testcontainers.utility.DockerLoggerFactory;
-import org.testcontainers.utility.MountableFile;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.stream.Stream;
-
-public class HttpNotionIT extends TestSuiteBase implements TestResource {
-
-    private static final String IMAGE = "mockserver/mockserver:5.14.0";
-
-    private GenericContainer<?> mockserverContainer;
-
-    @BeforeAll
     @Override
-    public void startUp() {
-        this.mockserverContainer = new GenericContainer<>(DockerImageName.parse(IMAGE))
-                .withNetwork(NETWORK)
-                .withNetworkAliases("mockserver")
-                .withExposedPorts(1080)
-                .withCopyFileToContainer(MountableFile.forHostPath(new File(HttpIT.class.getResource(
-                                "/mockserver-notion-config.json").getPath()).getAbsolutePath()),
-                        "/tmp/mockserver-notion-config.json")
-                .withEnv("MOCKSERVER_INITIALIZATION_JSON_PATH", "/tmp/mockserver-notion-config.json")
-                .withLogConsumer(new Slf4jLogConsumer(DockerLoggerFactory.getLogger(IMAGE)))
-                .waitingFor(new HttpWaitStrategy().forPath("/").forStatusCode(404));
-        Startables.deepStart(Stream.of(mockserverContainer)).join();
+    public String getITTestConf() {
+        return "/notion_json_to_assert.conf";
     }
 
-    @AfterAll
     @Override
-    public void tearDown() {
-        if (mockserverContainer != null) {
-            mockserverContainer.stop();
-        }
-    }
-
-    @TestTemplate
-    public void testHttpNotionSourceToAssertSink(TestContainer container) throws IOException, InterruptedException {
-        Container.ExecResult execResult = container.executeJob("/notion_json_to_assert.conf");
-        Assertions.assertEquals(0, execResult.getExitCode());
+    public String getMockServerConfig() {
+        return "/mockserver-notion-config.json";
     }
 }
diff --git a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpOneSignalIT.java b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpOneSignalIT.java
index 0e0a446b2..89a13e991 100644
--- a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpOneSignalIT.java
+++ b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpOneSignalIT.java
@@ -17,60 +17,15 @@
 
 package org.apache.seatunnel.e2e.connector.http;
 
-import org.apache.seatunnel.e2e.common.TestResource;
-import org.apache.seatunnel.e2e.common.TestSuiteBase;
-import org.apache.seatunnel.e2e.common.container.TestContainer;
+public class HttpOneSignalIT extends HttpIT {
 
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.TestTemplate;
-import org.testcontainers.containers.Container;
-import org.testcontainers.containers.GenericContainer;
-import org.testcontainers.containers.output.Slf4jLogConsumer;
-import org.testcontainers.containers.wait.strategy.HttpWaitStrategy;
-import org.testcontainers.lifecycle.Startables;
-import org.testcontainers.utility.DockerImageName;
-import org.testcontainers.utility.DockerLoggerFactory;
-import org.testcontainers.utility.MountableFile;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.stream.Stream;
-
-public class HttpOneSignalIT extends TestSuiteBase implements TestResource {
-
-    private static final String IMAGE = "mockserver/mockserver:5.14.0";
-
-    private GenericContainer<?> mockserverContainer;
-
-    @BeforeAll
     @Override
-    public void startUp() {
-        this.mockserverContainer = new GenericContainer<>(DockerImageName.parse(IMAGE))
-                .withNetwork(NETWORK)
-                .withNetworkAliases("mockserver")
-                .withExposedPorts(1080)
-                .withCopyFileToContainer(MountableFile.forHostPath(new File(HttpIT.class.getResource(
-                                "/mockserver-onesignal-config.json").getPath()).getAbsolutePath()),
-                        "/tmp/mockserver-onesignal-config.json")
-                .withEnv("MOCKSERVER_INITIALIZATION_JSON_PATH", "/tmp/mockserver-onesignal-config.json")
-                .withLogConsumer(new Slf4jLogConsumer(DockerLoggerFactory.getLogger(IMAGE)))
-                .waitingFor(new HttpWaitStrategy().forPath("/").forStatusCode(404));
-        Startables.deepStart(Stream.of(mockserverContainer)).join();
+    public String getITTestConf() {
+        return "/onesignal_json_to_assert.conf";
     }
 
-    @AfterAll
     @Override
-    public void tearDown() {
-        if (mockserverContainer != null) {
-            mockserverContainer.stop();
-        }
-    }
-
-    @TestTemplate
-    public void testHttpOneSignalSourceToAssertSink(TestContainer container) throws IOException, InterruptedException {
-        Container.ExecResult execResult = container.executeJob("/onesignal_json_to_assert.conf");
-        Assertions.assertEquals(0, execResult.getExitCode());
+    public String getMockServerConfig() {
+        return "/mockserver-onesignal-config.json";
     }
 }
diff --git a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpPersistiqIT.java b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpPersistiqIT.java
index d264a8508..8f285b064 100644
--- a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpPersistiqIT.java
+++ b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpPersistiqIT.java
@@ -17,60 +17,15 @@
 
 package org.apache.seatunnel.e2e.connector.http;
 
-import org.apache.seatunnel.e2e.common.TestResource;
-import org.apache.seatunnel.e2e.common.TestSuiteBase;
-import org.apache.seatunnel.e2e.common.container.TestContainer;
+public class HttpPersistiqIT extends HttpIT {
 
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.TestTemplate;
-import org.testcontainers.containers.Container;
-import org.testcontainers.containers.GenericContainer;
-import org.testcontainers.containers.output.Slf4jLogConsumer;
-import org.testcontainers.containers.wait.strategy.HttpWaitStrategy;
-import org.testcontainers.lifecycle.Startables;
-import org.testcontainers.utility.DockerImageName;
-import org.testcontainers.utility.DockerLoggerFactory;
-import org.testcontainers.utility.MountableFile;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.stream.Stream;
-
-public class HttpPersistiqIT extends TestSuiteBase implements TestResource {
-
-    private static final String IMAGE = "mockserver/mockserver:5.14.0";
-
-    private GenericContainer<?> mockserverContainer;
-
-    @BeforeAll
     @Override
-    public void startUp() {
-        this.mockserverContainer = new GenericContainer<>(DockerImageName.parse(IMAGE))
-                .withNetwork(NETWORK)
-                .withNetworkAliases("mockserver")
-                .withExposedPorts(1080)
-                .withCopyFileToContainer(MountableFile.forHostPath(new File(HttpIT.class.getResource(
-                                "/mockserver-persistiq-config.json").getPath()).getAbsolutePath()),
-                        "/tmp/mockserver-persistiq-config.json")
-                .withEnv("MOCKSERVER_INITIALIZATION_JSON_PATH", "/tmp/mockserver-persistiq-config.json")
-                .withLogConsumer(new Slf4jLogConsumer(DockerLoggerFactory.getLogger(IMAGE)))
-                .waitingFor(new HttpWaitStrategy().forPath("/").forStatusCode(404));
-        Startables.deepStart(Stream.of(mockserverContainer)).join();
+    public String getITTestConf() {
+        return "/persistiq_json_to_assert.conf";
     }
 
-    @AfterAll
     @Override
-    public void tearDown() {
-        if (mockserverContainer != null) {
-            mockserverContainer.stop();
-        }
-    }
-
-    @TestTemplate
-    public void testHttpPersistiqSourceToAssertSink(TestContainer container) throws IOException, InterruptedException {
-        Container.ExecResult execResult = container.executeJob("/persistiq_json_to_assert.conf");
-        Assertions.assertEquals(0, execResult.getExitCode());
+    public String getMockServerConfig() {
+        return "/mockserver-persistiq-config.json";
     }
 }