You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2023/03/21 05:20:04 UTC

[shardingsphere] branch master updated: Refactor SQL E2E (#24709)

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

panjuan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new cf1af426977 Refactor SQL E2E (#24709)
cf1af426977 is described below

commit cf1af426977bd652f7fad0154e0b0b14ffd2933b
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Tue Mar 21 13:19:49 2023 +0800

    Refactor SQL E2E (#24709)
---
 .../authority/AuthorityEnvironmentManager.java     |  28 ++---
 .../dal/{BaseDALE2EIT.java => DALE2EIT.java}       |  69 ++++++++++-
 .../test/e2e/engine/dal/GeneralDALE2EIT.java       |  92 --------------
 .../test/e2e/engine/dcl/BaseDCLE2EIT.java          |  56 ---------
 .../dcl/{GeneralDCLE2EIT.java => DCLE2EIT.java}    |  16 ++-
 .../ddl/{BaseDDLE2EIT.java => DDLE2EIT.java}       | 127 +++++++++++++++++---
 .../test/e2e/engine/ddl/GeneralDDLE2EIT.java       | 132 ---------------------
 .../test/e2e/engine/ral/GeneralRALE2EIT.java       |  96 ---------------
 .../ral/{BaseRALE2EIT.java => RALE2EIT.java}       | 111 ++++++++++++-----
 .../test/e2e/engine/rdl/GeneralRDLE2EIT.java       |  95 ---------------
 .../rdl/{BaseRDLE2EIT.java => RDLE2EIT.java}       | 101 ++++++++++++----
 .../test/e2e/engine/rql/BaseRQLE2EIT.java          |  83 -------------
 .../test/e2e/engine/rql/GeneralRQLE2EIT.java       |  80 -------------
 .../{rdl/BaseRDLE2EIT.java => rql/RQLE2EIT.java}   | 104 ++++++++--------
 14 files changed, 404 insertions(+), 786 deletions(-)

diff --git a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/scenario/authority/AuthorityEnvironmentManager.java b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/scenario/authority/AuthorityEnvironmentManager.java
index 93ecbab5479..f8b53dace11 100644
--- a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/scenario/authority/AuthorityEnvironmentManager.java
+++ b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/scenario/authority/AuthorityEnvironmentManager.java
@@ -35,28 +35,24 @@ import java.util.Map;
  * Authority environment manager.
  */
 @Slf4j
-public final class AuthorityEnvironmentManager {
-    
-    private final AuthorityEnvironment authorityEnvironment;
+public final class AuthorityEnvironmentManager implements AutoCloseable {
     
     private final Map<String, DataSource> instanceDataSourceMap;
     
     private final DatabaseType databaseType;
     
-    public AuthorityEnvironmentManager(final String path, final Map<String, DataSource> instanceDataSourceMap, final DatabaseType databaseType) throws IOException, JAXBException {
+    private final AuthorityEnvironment authorityEnvironment;
+    
+    public AuthorityEnvironmentManager(final String path, final Map<String, DataSource> instanceDataSourceMap, final DatabaseType databaseType) throws IOException, JAXBException, SQLException {
+        this.instanceDataSourceMap = instanceDataSourceMap;
+        this.databaseType = databaseType;
         try (FileReader reader = new FileReader(path)) {
             authorityEnvironment = (AuthorityEnvironment) JAXBContext.newInstance(AuthorityEnvironment.class).createUnmarshaller().unmarshal(reader);
         }
-        this.instanceDataSourceMap = instanceDataSourceMap;
-        this.databaseType = databaseType;
+        init();
     }
     
-    /**
-     * Initialize data.
-     * 
-     * @throws SQLException SQL exception
-     */
-    public void initialize() throws SQLException {
+    private void init() throws SQLException {
         Collection<String> initSQLs = authorityEnvironment.getInitSQLs(databaseType);
         if (initSQLs.isEmpty()) {
             return;
@@ -66,12 +62,8 @@ public final class AuthorityEnvironmentManager {
         }
     }
     
-    /**
-     * Clean data.
-     * 
-     * @throws SQLException SQL exception
-     */
-    public void clean() throws SQLException {
+    @Override
+    public void close() throws SQLException {
         Collection<String> cleanSQLs = authorityEnvironment.getCleanSQLs(databaseType);
         if (cleanSQLs.isEmpty()) {
             return;
diff --git a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/dal/BaseDALE2EIT.java b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/dal/DALE2EIT.java
similarity index 57%
rename from test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/dal/BaseDALE2EIT.java
rename to test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/dal/DALE2EIT.java
index c8a26a365d3..4a889408f98 100644
--- a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/dal/BaseDALE2EIT.java
+++ b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/dal/DALE2EIT.java
@@ -17,28 +17,79 @@
 
 package org.apache.shardingsphere.test.e2e.engine.dal;
 
+import org.apache.shardingsphere.test.e2e.cases.SQLCommandType;
 import org.apache.shardingsphere.test.e2e.cases.dataset.metadata.DataSetColumn;
 import org.apache.shardingsphere.test.e2e.cases.dataset.metadata.DataSetMetaData;
 import org.apache.shardingsphere.test.e2e.cases.dataset.row.DataSetRow;
 import org.apache.shardingsphere.test.e2e.engine.E2EContainerComposer;
 import org.apache.shardingsphere.test.e2e.engine.SingleE2EITContainerComposer;
+import org.apache.shardingsphere.test.e2e.framework.E2EITExtension;
+import org.apache.shardingsphere.test.e2e.framework.param.array.E2ETestParameterFactory;
+import org.apache.shardingsphere.test.e2e.framework.param.model.AssertionTestParameter;
+import org.junit.jupiter.api.condition.EnabledIf;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.ArgumentsProvider;
+import org.junit.jupiter.params.provider.ArgumentsSource;
 
+import java.sql.Connection;
 import java.sql.ResultSet;
 import java.sql.ResultSetMetaData;
 import java.sql.SQLException;
+import java.sql.Statement;
 import java.sql.Types;
+import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Collection;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.stream.Stream;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-public abstract class BaseDALE2EIT {
+@ExtendWith(E2EITExtension.class)
+public final class DALE2EIT {
     
-    protected final void assertResultSet(final SingleE2EITContainerComposer containerComposer, final ResultSet resultSet) throws SQLException {
+    @ParameterizedTest(name = "{0}")
+    @EnabledIf("isEnabled")
+    @ArgumentsSource(TestCaseArgumentsProvider.class)
+    public void assertExecute(final AssertionTestParameter testParam) throws SQLException, ParseException {
+        // TODO make sure DCL test case can not be null
+        if (null == testParam.getTestCaseContext()) {
+            return;
+        }
+        try (SingleE2EITContainerComposer containerComposer = new SingleE2EITContainerComposer(testParam)) {
+            assertExecute(containerComposer);
+        }
+    }
+    
+    private void assertExecute(final SingleE2EITContainerComposer containerComposer) throws SQLException, ParseException {
+        try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
+            try (Statement statement = connection.createStatement()) {
+                statement.execute(containerComposer.getSQL());
+                assertExecuteResult(containerComposer, statement);
+            }
+        }
+    }
+    
+    private void assertExecuteResult(final SingleE2EITContainerComposer containerComposer, final Statement statement) throws SQLException {
+        try (ResultSet resultSet = statement.getResultSet()) {
+            if (null == containerComposer.getAssertion().getAssertionSQL()) {
+                assertResultSet(containerComposer, resultSet);
+            } else {
+                statement.execute(containerComposer.getAssertion().getAssertionSQL().getSql());
+                try (ResultSet assertionSQLResultSet = statement.getResultSet()) {
+                    assertResultSet(containerComposer, assertionSQLResultSet);
+                }
+            }
+        }
+    }
+    
+    private void assertResultSet(final SingleE2EITContainerComposer containerComposer, final ResultSet resultSet) throws SQLException {
         assertMetaData(resultSet.getMetaData(), getExpectedColumns(containerComposer));
         assertRows(resultSet, containerComposer.getDataSet().getRows());
     }
@@ -96,4 +147,18 @@ public abstract class BaseDALE2EIT {
         assertThat(String.valueOf(actual.getObject(columnIndex)), is(expected));
         assertThat(String.valueOf(actual.getObject(columnLabel)), is(expected));
     }
+    
+    private static boolean isEnabled() {
+        return E2ETestParameterFactory.containsTestParameter();
+    }
+    
+    private static class TestCaseArgumentsProvider implements ArgumentsProvider {
+        
+        @Override
+        public Stream<? extends Arguments> provideArguments(final ExtensionContext extensionContext) {
+            Collection<AssertionTestParameter> result = E2ETestParameterFactory.getAssertionTestParameters(SQLCommandType.DAL);
+            // TODO make sure DAL test case can not be null
+            return result.isEmpty() ? Stream.of(Arguments.of(new AssertionTestParameter(null, null, null, null, null, null, null))) : result.stream().map(Arguments::of);
+        }
+    }
 }
diff --git a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/dal/GeneralDALE2EIT.java b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/dal/GeneralDALE2EIT.java
deleted file mode 100644
index ab7c1ba3e2c..00000000000
--- a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/dal/GeneralDALE2EIT.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * 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.shardingsphere.test.e2e.engine.dal;
-
-import org.apache.shardingsphere.test.e2e.cases.SQLCommandType;
-import org.apache.shardingsphere.test.e2e.engine.SingleE2EITContainerComposer;
-import org.apache.shardingsphere.test.e2e.framework.E2EITExtension;
-import org.apache.shardingsphere.test.e2e.framework.param.array.E2ETestParameterFactory;
-import org.apache.shardingsphere.test.e2e.framework.param.model.AssertionTestParameter;
-import org.junit.jupiter.api.condition.EnabledIf;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.junit.jupiter.api.extension.ExtensionContext;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.ArgumentsProvider;
-import org.junit.jupiter.params.provider.ArgumentsSource;
-
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.text.ParseException;
-import java.util.Collection;
-import java.util.stream.Stream;
-
-@ExtendWith(E2EITExtension.class)
-public final class GeneralDALE2EIT extends BaseDALE2EIT {
-    
-    @ParameterizedTest(name = "{0}")
-    @EnabledIf("isEnabled")
-    @ArgumentsSource(TestCaseArgumentsProvider.class)
-    public void assertExecute(final AssertionTestParameter testParam) throws SQLException, ParseException {
-        // TODO make sure DCL test case can not be null
-        if (null == testParam.getTestCaseContext()) {
-            return;
-        }
-        try (SingleE2EITContainerComposer containerComposer = new SingleE2EITContainerComposer(testParam)) {
-            assertExecute(containerComposer);
-        }
-    }
-    
-    private void assertExecute(final SingleE2EITContainerComposer containerComposer) throws SQLException, ParseException {
-        try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
-            try (Statement statement = connection.createStatement()) {
-                statement.execute(containerComposer.getSQL());
-                assertExecuteResult(containerComposer, statement);
-            }
-        }
-    }
-    
-    private void assertExecuteResult(final SingleE2EITContainerComposer containerComposer, final Statement statement) throws SQLException {
-        try (ResultSet resultSet = statement.getResultSet()) {
-            if (null == containerComposer.getAssertion().getAssertionSQL()) {
-                assertResultSet(containerComposer, resultSet);
-            } else {
-                statement.execute(containerComposer.getAssertion().getAssertionSQL().getSql());
-                try (ResultSet assertionSQLResultSet = statement.getResultSet()) {
-                    assertResultSet(containerComposer, assertionSQLResultSet);
-                }
-            }
-        }
-    }
-    
-    private static boolean isEnabled() {
-        return E2ETestParameterFactory.containsTestParameter();
-    }
-    
-    private static class TestCaseArgumentsProvider implements ArgumentsProvider {
-        
-        @Override
-        public Stream<? extends Arguments> provideArguments(final ExtensionContext extensionContext) {
-            Collection<AssertionTestParameter> result = E2ETestParameterFactory.getAssertionTestParameters(SQLCommandType.DAL);
-            // TODO make sure DAL test case can not be null
-            return result.isEmpty() ? Stream.of(Arguments.of(new AssertionTestParameter(null, null, null, null, null, null, null))) : result.stream().map(Arguments::of);
-        }
-    }
-}
diff --git a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/dcl/BaseDCLE2EIT.java b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/dcl/BaseDCLE2EIT.java
deleted file mode 100644
index d75f03c0286..00000000000
--- a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/dcl/BaseDCLE2EIT.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * 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.shardingsphere.test.e2e.engine.dcl;
-
-import org.apache.shardingsphere.test.e2e.engine.SingleE2EITContainerComposer;
-import org.apache.shardingsphere.test.e2e.env.runtime.scenario.authority.AuthorityEnvironmentManager;
-import org.apache.shardingsphere.test.e2e.env.runtime.scenario.path.ScenarioCommonPath;
-import org.apache.shardingsphere.test.e2e.framework.param.model.AssertionTestParameter;
-import org.junit.jupiter.api.AfterEach;
-
-import javax.xml.bind.JAXBException;
-import java.io.IOException;
-import java.sql.SQLException;
-
-public abstract class BaseDCLE2EIT {
-    
-    private AuthorityEnvironmentManager authorityEnvironmentManager;
-    
-    /**
-     * Init.
-     * 
-     * @param testParam test parameter
-     * @param containerComposer container composer
-     * @throws JAXBException JAXB exception
-     * @throws IOException IO exception
-     * @throws SQLException SQL exception
-     */
-    public final void init(final AssertionTestParameter testParam, final SingleE2EITContainerComposer containerComposer) throws JAXBException, IOException, SQLException {
-        authorityEnvironmentManager = new AuthorityEnvironmentManager(
-                new ScenarioCommonPath(testParam.getScenario()).getAuthorityFile(), containerComposer.getContainerComposer().getActualDataSourceMap(), testParam.getDatabaseType());
-        authorityEnvironmentManager.initialize();
-    }
-    
-    @AfterEach
-    public final void tearDown() throws Exception {
-        // TODO make sure DCL test case can not be null
-        if (null != authorityEnvironmentManager) {
-            authorityEnvironmentManager.clean();
-        }
-    }
-}
diff --git a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/dcl/GeneralDCLE2EIT.java b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/dcl/DCLE2EIT.java
similarity index 83%
rename from test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/dcl/GeneralDCLE2EIT.java
rename to test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/dcl/DCLE2EIT.java
index 42144971713..81c18cdd394 100644
--- a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/dcl/GeneralDCLE2EIT.java
+++ b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/dcl/DCLE2EIT.java
@@ -20,6 +20,8 @@ package org.apache.shardingsphere.test.e2e.engine.dcl;
 import org.apache.shardingsphere.test.e2e.cases.SQLCommandType;
 import org.apache.shardingsphere.test.e2e.cases.SQLExecuteType;
 import org.apache.shardingsphere.test.e2e.engine.SingleE2EITContainerComposer;
+import org.apache.shardingsphere.test.e2e.env.runtime.scenario.authority.AuthorityEnvironmentManager;
+import org.apache.shardingsphere.test.e2e.env.runtime.scenario.path.ScenarioCommonPath;
 import org.apache.shardingsphere.test.e2e.framework.E2EITExtension;
 import org.apache.shardingsphere.test.e2e.framework.param.array.E2ETestParameterFactory;
 import org.apache.shardingsphere.test.e2e.framework.param.model.AssertionTestParameter;
@@ -42,7 +44,7 @@ import java.util.Collection;
 import java.util.stream.Stream;
 
 @ExtendWith(E2EITExtension.class)
-public final class GeneralDCLE2EIT extends BaseDCLE2EIT {
+public final class DCLE2EIT {
     
     @ParameterizedTest(name = "{0}")
     @EnabledIf("isEnabled")
@@ -52,8 +54,10 @@ public final class GeneralDCLE2EIT extends BaseDCLE2EIT {
         if (null == testParam.getTestCaseContext()) {
             return;
         }
-        try (SingleE2EITContainerComposer containerComposer = new SingleE2EITContainerComposer(testParam)) {
-            init(testParam, containerComposer);
+        try (
+                SingleE2EITContainerComposer containerComposer = new SingleE2EITContainerComposer(testParam);
+                AuthorityEnvironmentManager ignored = new AuthorityEnvironmentManager(
+                        new ScenarioCommonPath(testParam.getScenario()).getAuthorityFile(), containerComposer.getContainerComposer().getActualDataSourceMap(), testParam.getDatabaseType())) {
             assertExecuteUpdate(containerComposer);
         }
     }
@@ -81,8 +85,10 @@ public final class GeneralDCLE2EIT extends BaseDCLE2EIT {
         if (null == testParam.getTestCaseContext()) {
             return;
         }
-        try (SingleE2EITContainerComposer containerComposer = new SingleE2EITContainerComposer(testParam)) {
-            init(testParam, containerComposer);
+        try (
+                SingleE2EITContainerComposer containerComposer = new SingleE2EITContainerComposer(testParam);
+                AuthorityEnvironmentManager ignored = new AuthorityEnvironmentManager(
+                        new ScenarioCommonPath(testParam.getScenario()).getAuthorityFile(), containerComposer.getContainerComposer().getActualDataSourceMap(), testParam.getDatabaseType())) {
             assertExecute(containerComposer);
         }
     }
diff --git a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/ddl/BaseDDLE2EIT.java b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/ddl/DDLE2EIT.java
similarity index 63%
rename from test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/ddl/BaseDDLE2EIT.java
rename to test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/ddl/DDLE2EIT.java
index 4857c8992ec..68cc3b98134 100644
--- a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/ddl/BaseDDLE2EIT.java
+++ b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/ddl/DDLE2EIT.java
@@ -21,38 +21,119 @@ import com.google.common.base.Splitter;
 import lombok.SneakyThrows;
 import org.apache.shardingsphere.infra.datanode.DataNode;
 import org.apache.shardingsphere.infra.util.expr.InlineExpressionParser;
+import org.apache.shardingsphere.test.e2e.cases.SQLCommandType;
+import org.apache.shardingsphere.test.e2e.cases.SQLExecuteType;
 import org.apache.shardingsphere.test.e2e.cases.dataset.metadata.DataSetColumn;
 import org.apache.shardingsphere.test.e2e.cases.dataset.metadata.DataSetIndex;
 import org.apache.shardingsphere.test.e2e.cases.dataset.metadata.DataSetMetaData;
 import org.apache.shardingsphere.test.e2e.engine.SingleE2EITContainerComposer;
+import org.apache.shardingsphere.test.e2e.framework.E2EITExtension;
+import org.apache.shardingsphere.test.e2e.framework.param.array.E2ETestParameterFactory;
 import org.apache.shardingsphere.test.e2e.framework.param.model.AssertionTestParameter;
+import org.junit.jupiter.api.condition.EnabledIf;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.ArgumentsProvider;
+import org.junit.jupiter.params.provider.ArgumentsSource;
 
 import java.sql.Connection;
 import java.sql.DatabaseMetaData;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
+import java.sql.Statement;
+import java.text.ParseException;
 import java.util.Collection;
 import java.util.LinkedHashSet;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
-public abstract class BaseDDLE2EIT {
-    
-    /**
-     * Init.
-     * 
-     * @param containerComposer container composer
-     * @throws SQLException SQL exception
-     */
-    public final void init(final SingleE2EITContainerComposer containerComposer) throws SQLException {
+@ExtendWith(E2EITExtension.class)
+public final class DDLE2EIT {
+    
+    @ParameterizedTest(name = "{0}")
+    @EnabledIf("isEnabled")
+    @ArgumentsSource(TestCaseArgumentsProvider.class)
+    public void assertExecuteUpdate(final AssertionTestParameter testParam) throws SQLException, ParseException {
+        // TODO make sure DDL test case can not be null
+        if (null == testParam.getTestCaseContext()) {
+            return;
+        }
+        try (SingleE2EITContainerComposer containerComposer = new SingleE2EITContainerComposer(testParam)) {
+            init(containerComposer);
+            try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
+                if (SQLExecuteType.Literal == containerComposer.getSqlExecuteType()) {
+                    executeUpdateForStatement(containerComposer, connection);
+                } else {
+                    executeUpdateForPreparedStatement(containerComposer, connection);
+                }
+                assertTableMetaData(testParam, containerComposer);
+            }
+            tearDown(containerComposer);
+        }
+    }
+    
+    private void executeUpdateForStatement(final SingleE2EITContainerComposer containerComposer, final Connection connection) throws SQLException, ParseException {
+        try (Statement statement = connection.createStatement()) {
+            assertFalse(statement.executeUpdate(containerComposer.getSQL()) > 0, "Not a DDL statement.");
+        }
+        waitCompleted();
+    }
+    
+    private void executeUpdateForPreparedStatement(final SingleE2EITContainerComposer containerComposer, final Connection connection) throws SQLException, ParseException {
+        try (PreparedStatement preparedStatement = connection.prepareStatement(containerComposer.getSQL())) {
+            assertFalse(preparedStatement.executeUpdate() > 0, "Not a DDL statement.");
+        }
+        waitCompleted();
+    }
+    
+    @ParameterizedTest(name = "{0}")
+    @EnabledIf("isEnabled")
+    @ArgumentsSource(TestCaseArgumentsProvider.class)
+    public void assertExecute(final AssertionTestParameter testParam) throws Exception {
+        // TODO make sure DDL test case can not be null
+        if (null == testParam.getTestCaseContext()) {
+            return;
+        }
+        try (SingleE2EITContainerComposer containerComposer = new SingleE2EITContainerComposer(testParam)) {
+            init(containerComposer);
+            try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
+                if (SQLExecuteType.Literal == containerComposer.getSqlExecuteType()) {
+                    executeForStatement(containerComposer, connection);
+                } else {
+                    executeForPreparedStatement(containerComposer, connection);
+                }
+                assertTableMetaData(testParam, containerComposer);
+            }
+            tearDown(containerComposer);
+        }
+    }
+    
+    private void executeForStatement(final SingleE2EITContainerComposer containerComposer, final Connection connection) throws SQLException, ParseException {
+        try (Statement statement = connection.createStatement()) {
+            assertFalse(statement.execute(containerComposer.getSQL()), "Not a DDL statement.");
+        }
+        waitCompleted();
+    }
+    
+    private void executeForPreparedStatement(final SingleE2EITContainerComposer containerComposer, final Connection connection) throws SQLException, ParseException {
+        try (PreparedStatement preparedStatement = connection.prepareStatement(containerComposer.getSQL())) {
+            assertFalse(preparedStatement.execute(), "Not a DDL statement.");
+        }
+        waitCompleted();
+    }
+    
+    private void init(final SingleE2EITContainerComposer containerComposer) throws SQLException {
         assertNotNull(containerComposer.getAssertion().getInitialSQL(), "Init SQL is required");
         assertNotNull(containerComposer.getAssertion().getInitialSQL().getAffectedTable(), "Expected affected table is required");
         try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
@@ -60,7 +141,7 @@ public abstract class BaseDDLE2EIT {
         }
     }
     
-    private synchronized void executeInitSQLs(final SingleE2EITContainerComposer containerComposer, final Connection connection) throws SQLException {
+    private void executeInitSQLs(final SingleE2EITContainerComposer containerComposer, final Connection connection) throws SQLException {
         if (null == containerComposer.getAssertion().getInitialSQL().getSql()) {
             return;
         }
@@ -72,13 +153,7 @@ public abstract class BaseDDLE2EIT {
         }
     }
     
-    /**
-     * Tear down.
-     * 
-     * @param containerComposer container composer
-     * @throws SQLException SQL exception
-     */
-    public final void tearDown(final SingleE2EITContainerComposer containerComposer) throws SQLException {
+    private void tearDown(final SingleE2EITContainerComposer containerComposer) throws SQLException {
         if (null != containerComposer.getAssertion().getDestroySQL()) {
             try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
                 executeDestroySQLs(containerComposer, connection);
@@ -98,7 +173,7 @@ public abstract class BaseDDLE2EIT {
         }
     }
     
-    protected final void assertTableMetaData(final AssertionTestParameter testParam, final SingleE2EITContainerComposer containerComposer) throws SQLException {
+    private void assertTableMetaData(final AssertionTestParameter testParam, final SingleE2EITContainerComposer containerComposer) throws SQLException {
         String tableName = containerComposer.getAssertion().getInitialSQL().getAffectedTable();
         DataSetMetaData expected = containerComposer.getDataSet().findMetaData(tableName);
         Collection<DataNode> dataNodes = new InlineExpressionParser(expected.getDataNodes()).splitAndEvaluate().stream().map(DataNode::new).collect(Collectors.toList());
@@ -211,7 +286,21 @@ public abstract class BaseDDLE2EIT {
     }
     
     @SneakyThrows(InterruptedException.class)
-    protected void waitCompleted() {
+    private void waitCompleted() {
         Thread.sleep(1500L);
     }
+    
+    private static boolean isEnabled() {
+        return E2ETestParameterFactory.containsTestParameter();
+    }
+    
+    private static class TestCaseArgumentsProvider implements ArgumentsProvider {
+        
+        @Override
+        public Stream<? extends Arguments> provideArguments(final ExtensionContext extensionContext) {
+            Collection<AssertionTestParameter> result = E2ETestParameterFactory.getAssertionTestParameters(SQLCommandType.DDL);
+            // TODO make sure DDL test case can not be null
+            return result.isEmpty() ? Stream.of(Arguments.of(new AssertionTestParameter(null, null, null, null, null, null, null))) : result.stream().map(Arguments::of);
+        }
+    }
 }
diff --git a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/ddl/GeneralDDLE2EIT.java b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/ddl/GeneralDDLE2EIT.java
deleted file mode 100644
index 23f384fe0ef..00000000000
--- a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/ddl/GeneralDDLE2EIT.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * 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.shardingsphere.test.e2e.engine.ddl;
-
-import org.apache.shardingsphere.test.e2e.cases.SQLCommandType;
-import org.apache.shardingsphere.test.e2e.cases.SQLExecuteType;
-import org.apache.shardingsphere.test.e2e.engine.SingleE2EITContainerComposer;
-import org.apache.shardingsphere.test.e2e.framework.E2EITExtension;
-import org.apache.shardingsphere.test.e2e.framework.param.array.E2ETestParameterFactory;
-import org.apache.shardingsphere.test.e2e.framework.param.model.AssertionTestParameter;
-import org.junit.jupiter.api.condition.EnabledIf;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.junit.jupiter.api.extension.ExtensionContext;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.ArgumentsProvider;
-import org.junit.jupiter.params.provider.ArgumentsSource;
-
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.text.ParseException;
-import java.util.Collection;
-import java.util.stream.Stream;
-
-import static org.junit.jupiter.api.Assertions.assertFalse;
-
-@ExtendWith(E2EITExtension.class)
-public final class GeneralDDLE2EIT extends BaseDDLE2EIT {
-    
-    @ParameterizedTest(name = "{0}")
-    @EnabledIf("isEnabled")
-    @ArgumentsSource(TestCaseArgumentsProvider.class)
-    public void assertExecuteUpdate(final AssertionTestParameter testParam) throws SQLException, ParseException {
-        // TODO make sure DDL test case can not be null
-        if (null == testParam.getTestCaseContext()) {
-            return;
-        }
-        try (SingleE2EITContainerComposer containerComposer = new SingleE2EITContainerComposer(testParam)) {
-            init(containerComposer);
-            try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
-                if (SQLExecuteType.Literal == containerComposer.getSqlExecuteType()) {
-                    executeUpdateForStatement(containerComposer, connection);
-                } else {
-                    executeUpdateForPreparedStatement(containerComposer, connection);
-                }
-                assertTableMetaData(testParam, containerComposer);
-            }
-            tearDown(containerComposer);
-        }
-    }
-    
-    private void executeUpdateForStatement(final SingleE2EITContainerComposer containerComposer, final Connection connection) throws SQLException, ParseException {
-        try (Statement statement = connection.createStatement()) {
-            assertFalse(statement.executeUpdate(containerComposer.getSQL()) > 0, "Not a DDL statement.");
-        }
-        waitCompleted();
-    }
-    
-    private void executeUpdateForPreparedStatement(final SingleE2EITContainerComposer containerComposer, final Connection connection) throws SQLException, ParseException {
-        try (PreparedStatement preparedStatement = connection.prepareStatement(containerComposer.getSQL())) {
-            assertFalse(preparedStatement.executeUpdate() > 0, "Not a DDL statement.");
-        }
-        waitCompleted();
-    }
-    
-    @ParameterizedTest(name = "{0}")
-    @EnabledIf("isEnabled")
-    @ArgumentsSource(TestCaseArgumentsProvider.class)
-    public void assertExecute(final AssertionTestParameter testParam) throws Exception {
-        // TODO make sure DDL test case can not be null
-        if (null == testParam.getTestCaseContext()) {
-            return;
-        }
-        try (SingleE2EITContainerComposer containerComposer = new SingleE2EITContainerComposer(testParam)) {
-            init(containerComposer);
-            try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
-                if (SQLExecuteType.Literal == containerComposer.getSqlExecuteType()) {
-                    executeForStatement(containerComposer, connection);
-                } else {
-                    executeForPreparedStatement(containerComposer, connection);
-                }
-                assertTableMetaData(testParam, containerComposer);
-            }
-            tearDown(containerComposer);
-        }
-    }
-    
-    private void executeForStatement(final SingleE2EITContainerComposer containerComposer, final Connection connection) throws SQLException, ParseException {
-        try (Statement statement = connection.createStatement()) {
-            assertFalse(statement.execute(containerComposer.getSQL()), "Not a DDL statement.");
-        }
-        waitCompleted();
-    }
-    
-    private void executeForPreparedStatement(final SingleE2EITContainerComposer containerComposer, final Connection connection) throws SQLException, ParseException {
-        try (PreparedStatement preparedStatement = connection.prepareStatement(containerComposer.getSQL())) {
-            assertFalse(preparedStatement.execute(), "Not a DDL statement.");
-        }
-        waitCompleted();
-    }
-    
-    private static boolean isEnabled() {
-        return E2ETestParameterFactory.containsTestParameter();
-    }
-    
-    private static class TestCaseArgumentsProvider implements ArgumentsProvider {
-        
-        @Override
-        public Stream<? extends Arguments> provideArguments(final ExtensionContext extensionContext) {
-            Collection<AssertionTestParameter> result = E2ETestParameterFactory.getAssertionTestParameters(SQLCommandType.DDL);
-            // TODO make sure DDL test case can not be null
-            return result.isEmpty() ? Stream.of(Arguments.of(new AssertionTestParameter(null, null, null, null, null, null, null))) : result.stream().map(Arguments::of);
-        }
-    }
-}
diff --git a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/ral/GeneralRALE2EIT.java b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/ral/GeneralRALE2EIT.java
deleted file mode 100644
index f7dc3773d60..00000000000
--- a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/ral/GeneralRALE2EIT.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * 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.shardingsphere.test.e2e.engine.ral;
-
-import org.apache.shardingsphere.test.e2e.cases.SQLCommandType;
-import org.apache.shardingsphere.test.e2e.engine.SingleE2EITContainerComposer;
-import org.apache.shardingsphere.test.e2e.framework.E2EITExtension;
-import org.apache.shardingsphere.test.e2e.framework.param.array.E2ETestParameterFactory;
-import org.apache.shardingsphere.test.e2e.framework.param.model.AssertionTestParameter;
-import org.junit.jupiter.api.condition.EnabledIf;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.junit.jupiter.api.extension.ExtensionContext;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.ArgumentsProvider;
-import org.junit.jupiter.params.provider.ArgumentsSource;
-
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.text.ParseException;
-import java.util.Collection;
-import java.util.stream.Stream;
-
-@ExtendWith(E2EITExtension.class)
-public final class GeneralRALE2EIT extends BaseRALE2EIT {
-    
-    @ParameterizedTest(name = "{0}")
-    @EnabledIf("isEnabled")
-    @ArgumentsSource(TestCaseArgumentsProvider.class)
-    public void assertExecute(final AssertionTestParameter testParam) throws SQLException, ParseException {
-        // TODO make sure RAL test case can not be null
-        if (null == testParam.getTestCaseContext()) {
-            return;
-        }
-        try (SingleE2EITContainerComposer containerComposer = new SingleE2EITContainerComposer(testParam)) {
-            init(containerComposer);
-            assertExecute(containerComposer);
-            tearDown(containerComposer);
-        }
-    }
-    
-    private void assertExecute(final SingleE2EITContainerComposer containerComposer) throws SQLException, ParseException {
-        try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
-            try (Statement statement = connection.createStatement()) {
-                assertResultSet(containerComposer, statement);
-            }
-        }
-    }
-    
-    private void assertResultSet(final SingleE2EITContainerComposer containerComposer, final Statement statement) throws SQLException, ParseException {
-        if (null == containerComposer.getAssertion().getAssertionSQL()) {
-            assertResultSet(containerComposer, statement, containerComposer.getSQL());
-        } else {
-            statement.execute(containerComposer.getSQL());
-            sleep(2000);
-            assertResultSet(containerComposer, statement, containerComposer.getAssertion().getAssertionSQL().getSql());
-        }
-    }
-    
-    private void assertResultSet(final SingleE2EITContainerComposer containerComposer, final Statement statement, final String sql) throws SQLException {
-        try (ResultSet resultSet = statement.executeQuery(sql)) {
-            assertResultSet(containerComposer, resultSet);
-        }
-    }
-    
-    private static boolean isEnabled() {
-        return E2ETestParameterFactory.containsTestParameter() && !E2ETestParameterFactory.getAssertionTestParameters(SQLCommandType.RAL).isEmpty();
-    }
-    
-    private static class TestCaseArgumentsProvider implements ArgumentsProvider {
-        
-        @Override
-        public Stream<? extends Arguments> provideArguments(final ExtensionContext extensionContext) {
-            Collection<AssertionTestParameter> result = E2ETestParameterFactory.getAssertionTestParameters(SQLCommandType.RAL);
-            // TODO make sure RAL test case can not be null
-            return result.isEmpty() ? Stream.of(Arguments.of(new AssertionTestParameter(null, null, null, null, null, null, null))) : result.stream().map(Arguments::of);
-        }
-    }
-}
diff --git a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/ral/BaseRALE2EIT.java b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/ral/RALE2EIT.java
similarity index 60%
rename from test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/ral/BaseRALE2EIT.java
rename to test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/ral/RALE2EIT.java
index 606fb1dae33..f6b34bcad82 100644
--- a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/ral/BaseRALE2EIT.java
+++ b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/ral/RALE2EIT.java
@@ -18,51 +18,70 @@
 package org.apache.shardingsphere.test.e2e.engine.ral;
 
 import com.google.common.base.Splitter;
+import lombok.SneakyThrows;
+import org.apache.shardingsphere.test.e2e.cases.SQLCommandType;
 import org.apache.shardingsphere.test.e2e.cases.dataset.metadata.DataSetColumn;
 import org.apache.shardingsphere.test.e2e.cases.dataset.metadata.DataSetMetaData;
 import org.apache.shardingsphere.test.e2e.cases.dataset.row.DataSetRow;
 import org.apache.shardingsphere.test.e2e.engine.SingleE2EITContainerComposer;
+import org.apache.shardingsphere.test.e2e.framework.E2EITExtension;
+import org.apache.shardingsphere.test.e2e.framework.param.array.E2ETestParameterFactory;
+import org.apache.shardingsphere.test.e2e.framework.param.model.AssertionTestParameter;
+import org.junit.jupiter.api.condition.EnabledIf;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.ArgumentsProvider;
+import org.junit.jupiter.params.provider.ArgumentsSource;
 
 import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.ResultSetMetaData;
 import java.sql.SQLException;
+import java.sql.Statement;
+import java.text.ParseException;
 import java.util.Collection;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-public abstract class BaseRALE2EIT {
-    
-    /**
-     * Init.
-     *
-     * @param containerComposer container composer
-     * @throws SQLException SQL exception
-     */
-    public final void init(final SingleE2EITContainerComposer containerComposer) throws SQLException {
-        if (null != containerComposer.getAssertion().getInitialSQL()) {
-            try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
-                executeInitSQLs(containerComposer, connection);
+@ExtendWith(E2EITExtension.class)
+public final class RALE2EIT {
+    
+    @ParameterizedTest(name = "{0}")
+    @EnabledIf("isEnabled")
+    @ArgumentsSource(TestCaseArgumentsProvider.class)
+    public void assertExecute(final AssertionTestParameter testParam) throws SQLException, ParseException {
+        // TODO make sure RAL test case can not be null
+        if (null == testParam.getTestCaseContext()) {
+            return;
+        }
+        try (SingleE2EITContainerComposer containerComposer = new SingleE2EITContainerComposer(testParam)) {
+            init(containerComposer);
+            assertExecute(containerComposer);
+            tearDown(containerComposer);
+        }
+    }
+    
+    private void assertExecute(final SingleE2EITContainerComposer containerComposer) throws SQLException, ParseException {
+        try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
+            try (Statement statement = connection.createStatement()) {
+                assertResultSet(containerComposer, statement);
             }
         }
     }
     
-    /**
-     * Tear down.
-     * 
-     * @param containerComposer container composer
-     * @throws SQLException SQL exception
-     */
-    public final void tearDown(final SingleE2EITContainerComposer containerComposer) throws SQLException {
-        if (null != containerComposer.getAssertion().getDestroySQL()) {
+    private void init(final SingleE2EITContainerComposer containerComposer) throws SQLException {
+        if (null != containerComposer.getAssertion().getInitialSQL()) {
             try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
-                executeDestroySQLs(containerComposer, connection);
+                executeInitSQLs(containerComposer, connection);
             }
         }
     }
@@ -76,7 +95,15 @@ public abstract class BaseRALE2EIT {
                 preparedStatement.executeUpdate();
             }
         }
-        sleep(1000);
+        waitCompleted(1000L);
+    }
+    
+    private void tearDown(final SingleE2EITContainerComposer containerComposer) throws SQLException {
+        if (null != containerComposer.getAssertion().getDestroySQL()) {
+            try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
+                executeDestroySQLs(containerComposer, connection);
+            }
+        }
     }
     
     private void executeDestroySQLs(final SingleE2EITContainerComposer containerComposer, final Connection connection) throws SQLException {
@@ -88,17 +115,26 @@ public abstract class BaseRALE2EIT {
                 preparedStatement.executeUpdate();
             }
         }
-        sleep(1000L);
+        waitCompleted(1000L);
+    }
+    
+    private void assertResultSet(final SingleE2EITContainerComposer containerComposer, final Statement statement) throws SQLException, ParseException {
+        if (null == containerComposer.getAssertion().getAssertionSQL()) {
+            assertResultSet(containerComposer, statement, containerComposer.getSQL());
+        } else {
+            statement.execute(containerComposer.getSQL());
+            waitCompleted(2000L);
+            assertResultSet(containerComposer, statement, containerComposer.getAssertion().getAssertionSQL().getSql());
+        }
     }
     
-    protected void sleep(final long timeoutMillis) {
-        try {
-            Thread.sleep(timeoutMillis);
-        } catch (final InterruptedException ignored) {
+    private void assertResultSet(final SingleE2EITContainerComposer containerComposer, final Statement statement, final String sql) throws SQLException {
+        try (ResultSet resultSet = statement.executeQuery(sql)) {
+            assertResultSet(containerComposer, resultSet);
         }
     }
     
-    protected final void assertResultSet(final SingleE2EITContainerComposer containerComposer, final ResultSet resultSet) throws SQLException {
+    private void assertResultSet(final SingleE2EITContainerComposer containerComposer, final ResultSet resultSet) throws SQLException {
         assertMetaData(resultSet.getMetaData(), getExpectedColumns(containerComposer));
         assertRows(resultSet, getNotAssertionColumns(containerComposer), containerComposer.getDataSet().getRows());
     }
@@ -153,4 +189,23 @@ public abstract class BaseRALE2EIT {
         assertThat(String.valueOf(actual.getObject(columnIndex)).trim(), is(expected));
         assertThat(String.valueOf(actual.getObject(columnLabel)).trim(), is(expected));
     }
+    
+    @SneakyThrows(InterruptedException.class)
+    private void waitCompleted(final long timeoutMillis) {
+        Thread.sleep(timeoutMillis);
+    }
+    
+    private static boolean isEnabled() {
+        return E2ETestParameterFactory.containsTestParameter() && !E2ETestParameterFactory.getAssertionTestParameters(SQLCommandType.RAL).isEmpty();
+    }
+    
+    private static class TestCaseArgumentsProvider implements ArgumentsProvider {
+        
+        @Override
+        public Stream<? extends Arguments> provideArguments(final ExtensionContext extensionContext) {
+            Collection<AssertionTestParameter> result = E2ETestParameterFactory.getAssertionTestParameters(SQLCommandType.RAL);
+            // TODO make sure RAL test case can not be null
+            return result.isEmpty() ? Stream.of(Arguments.of(new AssertionTestParameter(null, null, null, null, null, null, null))) : result.stream().map(Arguments::of);
+        }
+    }
 }
diff --git a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rdl/GeneralRDLE2EIT.java b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rdl/GeneralRDLE2EIT.java
deleted file mode 100644
index 0ebda8f3704..00000000000
--- a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rdl/GeneralRDLE2EIT.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * 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.shardingsphere.test.e2e.engine.rdl;
-
-import org.apache.shardingsphere.test.e2e.cases.SQLCommandType;
-import org.apache.shardingsphere.test.e2e.engine.SingleE2EITContainerComposer;
-import org.apache.shardingsphere.test.e2e.framework.E2EITExtension;
-import org.apache.shardingsphere.test.e2e.framework.param.array.E2ETestParameterFactory;
-import org.apache.shardingsphere.test.e2e.framework.param.model.AssertionTestParameter;
-import org.junit.jupiter.api.condition.EnabledIf;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.junit.jupiter.api.extension.ExtensionContext;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.ArgumentsProvider;
-import org.junit.jupiter.params.provider.ArgumentsSource;
-
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.text.ParseException;
-import java.util.Collection;
-import java.util.stream.Stream;
-
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-
-@ExtendWith(E2EITExtension.class)
-public final class GeneralRDLE2EIT extends BaseRDLE2EIT {
-    
-    @ParameterizedTest(name = "{0}")
-    @EnabledIf("isEnabled")
-    @ArgumentsSource(TestCaseArgumentsProvider.class)
-    public void assertExecute(final AssertionTestParameter testParam) throws SQLException, ParseException {
-        // TODO make sure RDL test case can not be null
-        if (null == testParam.getTestCaseContext()) {
-            return;
-        }
-        try (SingleE2EITContainerComposer containerComposer = new SingleE2EITContainerComposer(testParam)) {
-            init(containerComposer);
-            assertExecute(testParam, containerComposer);
-            tearDown(containerComposer);
-        }
-    }
-    
-    private void assertExecute(final AssertionTestParameter testParam, final SingleE2EITContainerComposer containerComposer) throws SQLException, ParseException {
-        assertNotNull(testParam.getAssertion().getAssertionSQL(), "Assertion SQL is required");
-        try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
-            try (Statement statement = connection.createStatement()) {
-                executeSQLCase(containerComposer, statement);
-                sleep();
-                assertResultSet(containerComposer, statement);
-            }
-        }
-    }
-    
-    private void executeSQLCase(final SingleE2EITContainerComposer containerComposer, final Statement statement) throws SQLException, ParseException {
-        statement.execute(containerComposer.getSQL());
-    }
-    
-    private void assertResultSet(final SingleE2EITContainerComposer containerComposer, final Statement statement) throws SQLException {
-        try (ResultSet resultSet = statement.executeQuery(containerComposer.getAssertion().getAssertionSQL().getSql())) {
-            assertResultSet(containerComposer, resultSet);
-        }
-    }
-    
-    private static boolean isEnabled() {
-        return E2ETestParameterFactory.containsTestParameter() && !E2ETestParameterFactory.getAssertionTestParameters(SQLCommandType.RDL).isEmpty();
-    }
-    
-    private static class TestCaseArgumentsProvider implements ArgumentsProvider {
-        
-        @Override
-        public Stream<? extends Arguments> provideArguments(final ExtensionContext extensionContext) {
-            Collection<AssertionTestParameter> result = E2ETestParameterFactory.getAssertionTestParameters(SQLCommandType.RDL);
-            // TODO make sure RDL test case can not be null
-            return result.isEmpty() ? Stream.of(Arguments.of(new AssertionTestParameter(null, null, null, null, null, null, null))) : result.stream().map(Arguments::of);
-        }
-    }
-}
diff --git a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rdl/BaseRDLE2EIT.java b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rdl/RDLE2EIT.java
similarity index 57%
copy from test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rdl/BaseRDLE2EIT.java
copy to test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rdl/RDLE2EIT.java
index 6864bfc73b7..501d7e9de66 100644
--- a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rdl/BaseRDLE2EIT.java
+++ b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rdl/RDLE2EIT.java
@@ -18,51 +18,86 @@
 package org.apache.shardingsphere.test.e2e.engine.rdl;
 
 import com.google.common.base.Splitter;
+import lombok.SneakyThrows;
+import org.apache.shardingsphere.test.e2e.cases.SQLCommandType;
 import org.apache.shardingsphere.test.e2e.cases.dataset.metadata.DataSetColumn;
 import org.apache.shardingsphere.test.e2e.cases.dataset.metadata.DataSetMetaData;
 import org.apache.shardingsphere.test.e2e.cases.dataset.row.DataSetRow;
 import org.apache.shardingsphere.test.e2e.engine.SingleE2EITContainerComposer;
+import org.apache.shardingsphere.test.e2e.framework.E2EITExtension;
+import org.apache.shardingsphere.test.e2e.framework.param.array.E2ETestParameterFactory;
+import org.apache.shardingsphere.test.e2e.framework.param.model.AssertionTestParameter;
+import org.junit.jupiter.api.condition.EnabledIf;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.ArgumentsProvider;
+import org.junit.jupiter.params.provider.ArgumentsSource;
 
 import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.ResultSetMetaData;
 import java.sql.SQLException;
+import java.sql.Statement;
+import java.text.ParseException;
 import java.util.Collection;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.stream.Stream;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-public abstract class BaseRDLE2EIT {
-    
-    /**
-     * Init.
-     *
-     * @param containerComposer container composer
-     * @throws SQLException SQL exception
-     */
-    public final void init(final SingleE2EITContainerComposer containerComposer) throws SQLException {
+@ExtendWith(E2EITExtension.class)
+public final class RDLE2EIT {
+    
+    @ParameterizedTest(name = "{0}")
+    @EnabledIf("isEnabled")
+    @ArgumentsSource(TestCaseArgumentsProvider.class)
+    public void assertExecute(final AssertionTestParameter testParam) throws SQLException, ParseException {
+        // TODO make sure RDL test case can not be null
+        if (null == testParam.getTestCaseContext()) {
+            return;
+        }
+        try (SingleE2EITContainerComposer containerComposer = new SingleE2EITContainerComposer(testParam)) {
+            init(containerComposer);
+            assertExecute(testParam, containerComposer);
+            tearDown(containerComposer);
+        }
+    }
+    
+    private void assertExecute(final AssertionTestParameter testParam, final SingleE2EITContainerComposer containerComposer) throws SQLException, ParseException {
+        assertNotNull(testParam.getAssertion().getAssertionSQL(), "Assertion SQL is required");
+        try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
+            try (Statement statement = connection.createStatement()) {
+                executeSQLCase(containerComposer, statement);
+                waitCompleted();
+                assertResultSet(containerComposer, statement);
+            }
+        }
+    }
+    
+    private void executeSQLCase(final SingleE2EITContainerComposer containerComposer, final Statement statement) throws SQLException, ParseException {
+        statement.execute(containerComposer.getSQL());
+    }
+    
+    private void init(final SingleE2EITContainerComposer containerComposer) throws SQLException {
         try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
             executeInitSQLs(containerComposer, connection);
         }
     }
     
-    /**
-     * Tear down.
-     *
-     * @param containerComposer container composer
-     * @throws SQLException SQL exception
-     */
-    public final void tearDown(final SingleE2EITContainerComposer containerComposer) throws SQLException {
+    private void tearDown(final SingleE2EITContainerComposer containerComposer) throws SQLException {
         if (null != containerComposer.getAssertion().getDestroySQL()) {
             try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
                 executeDestroySQLs(containerComposer, connection);
             }
         }
-        sleep();
+        waitCompleted();
     }
     
     private void executeInitSQLs(final SingleE2EITContainerComposer containerComposer, final Connection connection) throws SQLException {
@@ -72,7 +107,7 @@ public abstract class BaseRDLE2EIT {
         for (String each : Splitter.on(";").trimResults().splitToList(containerComposer.getAssertion().getInitialSQL().getSql())) {
             try (PreparedStatement preparedStatement = connection.prepareStatement(each)) {
                 preparedStatement.executeUpdate();
-                sleep();
+                waitCompleted();
             }
         }
     }
@@ -84,19 +119,18 @@ public abstract class BaseRDLE2EIT {
         for (String each : Splitter.on(";").trimResults().splitToList(containerComposer.getAssertion().getDestroySQL().getSql())) {
             try (PreparedStatement preparedStatement = connection.prepareStatement(each)) {
                 preparedStatement.executeUpdate();
-                sleep();
+                waitCompleted();
             }
         }
     }
     
-    protected void sleep() {
-        try {
-            Thread.sleep(2000L);
-        } catch (final InterruptedException ignored) {
+    private void assertResultSet(final SingleE2EITContainerComposer containerComposer, final Statement statement) throws SQLException {
+        try (ResultSet resultSet = statement.executeQuery(containerComposer.getAssertion().getAssertionSQL().getSql())) {
+            assertResultSet(containerComposer, resultSet);
         }
     }
     
-    protected final void assertResultSet(final SingleE2EITContainerComposer containerComposer, final ResultSet resultSet) throws SQLException {
+    private void assertResultSet(final SingleE2EITContainerComposer containerComposer, final ResultSet resultSet) throws SQLException {
         assertMetaData(resultSet.getMetaData(), getExpectedColumns(containerComposer));
         assertRows(resultSet, containerComposer.getDataSet().getRows());
     }
@@ -141,4 +175,23 @@ public abstract class BaseRDLE2EIT {
         assertThat(String.valueOf(actual.getObject(columnIndex)), is(expected));
         assertThat(String.valueOf(actual.getObject(columnLabel)), is(expected));
     }
+    
+    @SneakyThrows(InterruptedException.class)
+    private void waitCompleted() {
+        Thread.sleep(2000L);
+    }
+    
+    private static boolean isEnabled() {
+        return E2ETestParameterFactory.containsTestParameter() && !E2ETestParameterFactory.getAssertionTestParameters(SQLCommandType.RDL).isEmpty();
+    }
+    
+    private static class TestCaseArgumentsProvider implements ArgumentsProvider {
+        
+        @Override
+        public Stream<? extends Arguments> provideArguments(final ExtensionContext extensionContext) {
+            Collection<AssertionTestParameter> result = E2ETestParameterFactory.getAssertionTestParameters(SQLCommandType.RDL);
+            // TODO make sure RDL test case can not be null
+            return result.isEmpty() ? Stream.of(Arguments.of(new AssertionTestParameter(null, null, null, null, null, null, null))) : result.stream().map(Arguments::of);
+        }
+    }
 }
diff --git a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rql/BaseRQLE2EIT.java b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rql/BaseRQLE2EIT.java
deleted file mode 100644
index 317d4b93dec..00000000000
--- a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rql/BaseRQLE2EIT.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * 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.shardingsphere.test.e2e.engine.rql;
-
-import org.apache.shardingsphere.test.e2e.cases.dataset.metadata.DataSetColumn;
-import org.apache.shardingsphere.test.e2e.cases.dataset.metadata.DataSetMetaData;
-import org.apache.shardingsphere.test.e2e.cases.dataset.row.DataSetRow;
-import org.apache.shardingsphere.test.e2e.engine.SingleE2EITContainerComposer;
-
-import java.sql.ResultSet;
-import java.sql.ResultSetMetaData;
-import java.sql.SQLException;
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.List;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-public abstract class BaseRQLE2EIT {
-    
-    protected final void assertResultSet(final SingleE2EITContainerComposer containerComposer, final ResultSet resultSet) throws SQLException {
-        assertMetaData(resultSet.getMetaData(), getExpectedColumns(containerComposer));
-        assertRows(resultSet, containerComposer.getDataSet().getRows());
-    }
-    
-    private Collection<DataSetColumn> getExpectedColumns(final SingleE2EITContainerComposer containerComposer) {
-        Collection<DataSetColumn> result = new LinkedList<>();
-        for (DataSetMetaData each : containerComposer.getDataSet().getMetaDataList()) {
-            result.addAll(each.getColumns());
-        }
-        return result;
-    }
-    
-    private void assertMetaData(final ResultSetMetaData actual, final Collection<DataSetColumn> expected) throws SQLException {
-        assertThat(actual.getColumnCount(), is(expected.size()));
-        int index = 1;
-        for (DataSetColumn each : expected) {
-            assertThat(actual.getColumnLabel(index++).toLowerCase(), is(each.getName().toLowerCase()));
-        }
-    }
-    
-    private void assertRows(final ResultSet actual, final List<DataSetRow> expected) throws SQLException {
-        int rowCount = 0;
-        ResultSetMetaData actualMetaData = actual.getMetaData();
-        while (actual.next()) {
-            assertTrue(rowCount < expected.size(), "Size of actual result set is different with size of expected data set rows.");
-            assertRow(actual, actualMetaData, expected.get(rowCount));
-            rowCount++;
-        }
-        assertThat("Size of actual result set is different with size of expected data set rows.", rowCount, is(expected.size()));
-    }
-    
-    private void assertRow(final ResultSet actual, final ResultSetMetaData actualMetaData, final DataSetRow expected) throws SQLException {
-        int columnIndex = 1;
-        for (String each : expected.splitValues("|")) {
-            String columnLabel = actualMetaData.getColumnLabel(columnIndex);
-            assertObjectValue(actual, columnIndex, columnLabel, each);
-            columnIndex++;
-        }
-    }
-    
-    private void assertObjectValue(final ResultSet actual, final int columnIndex, final String columnLabel, final String expected) throws SQLException {
-        assertThat(String.valueOf(actual.getObject(columnIndex)), is(expected));
-        assertThat(String.valueOf(actual.getObject(columnLabel)), is(expected));
-    }
-}
diff --git a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rql/GeneralRQLE2EIT.java b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rql/GeneralRQLE2EIT.java
deleted file mode 100644
index 661dbc32bbb..00000000000
--- a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rql/GeneralRQLE2EIT.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * 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.shardingsphere.test.e2e.engine.rql;
-
-import org.apache.shardingsphere.test.e2e.cases.SQLCommandType;
-import org.apache.shardingsphere.test.e2e.engine.SingleE2EITContainerComposer;
-import org.apache.shardingsphere.test.e2e.framework.E2EITExtension;
-import org.apache.shardingsphere.test.e2e.framework.param.array.E2ETestParameterFactory;
-import org.apache.shardingsphere.test.e2e.framework.param.model.AssertionTestParameter;
-import org.junit.jupiter.api.condition.EnabledIf;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.junit.jupiter.api.extension.ExtensionContext;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.ArgumentsProvider;
-import org.junit.jupiter.params.provider.ArgumentsSource;
-
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.text.ParseException;
-import java.util.Collection;
-import java.util.stream.Stream;
-
-@ExtendWith(E2EITExtension.class)
-public final class GeneralRQLE2EIT extends BaseRQLE2EIT {
-    
-    @ParameterizedTest(name = "{0}")
-    @EnabledIf("isEnabled")
-    @ArgumentsSource(TestCaseArgumentsProvider.class)
-    public void assertExecute(final AssertionTestParameter testParam) throws SQLException, ParseException {
-        // TODO make sure RQL test case can not be null
-        if (null == testParam.getTestCaseContext()) {
-            return;
-        }
-        try (SingleE2EITContainerComposer containerComposer = new SingleE2EITContainerComposer(testParam)) {
-            assertExecute(containerComposer);
-        }
-    }
-    
-    private void assertExecute(final SingleE2EITContainerComposer containerComposer) throws SQLException, ParseException {
-        try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
-            try (
-                    Statement statement = connection.createStatement();
-                    ResultSet resultSet = statement.executeQuery(containerComposer.getSQL())) {
-                assertResultSet(containerComposer, resultSet);
-            }
-        }
-    }
-    
-    private static boolean isEnabled() {
-        return E2ETestParameterFactory.containsTestParameter() && !E2ETestParameterFactory.getAssertionTestParameters(SQLCommandType.RQL).isEmpty();
-    }
-    
-    private static class TestCaseArgumentsProvider implements ArgumentsProvider {
-        
-        @Override
-        public Stream<? extends Arguments> provideArguments(final ExtensionContext extensionContext) {
-            Collection<AssertionTestParameter> result = E2ETestParameterFactory.getAssertionTestParameters(SQLCommandType.RQL);
-            // TODO make sure RQL test case can not be null
-            return result.isEmpty() ? Stream.of(Arguments.of(new AssertionTestParameter(null, null, null, null, null, null, null))) : result.stream().map(Arguments::of);
-        }
-    }
-}
diff --git a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rdl/BaseRDLE2EIT.java b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rql/RQLE2EIT.java
similarity index 58%
rename from test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rdl/BaseRDLE2EIT.java
rename to test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rql/RQLE2EIT.java
index 6864bfc73b7..3012ea1f6a8 100644
--- a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rdl/BaseRDLE2EIT.java
+++ b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rql/RQLE2EIT.java
@@ -15,88 +15,66 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.e2e.engine.rdl;
+package org.apache.shardingsphere.test.e2e.engine.rql;
 
-import com.google.common.base.Splitter;
+import org.apache.shardingsphere.test.e2e.cases.SQLCommandType;
 import org.apache.shardingsphere.test.e2e.cases.dataset.metadata.DataSetColumn;
 import org.apache.shardingsphere.test.e2e.cases.dataset.metadata.DataSetMetaData;
 import org.apache.shardingsphere.test.e2e.cases.dataset.row.DataSetRow;
 import org.apache.shardingsphere.test.e2e.engine.SingleE2EITContainerComposer;
+import org.apache.shardingsphere.test.e2e.framework.E2EITExtension;
+import org.apache.shardingsphere.test.e2e.framework.param.array.E2ETestParameterFactory;
+import org.apache.shardingsphere.test.e2e.framework.param.model.AssertionTestParameter;
+import org.junit.jupiter.api.condition.EnabledIf;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.ArgumentsProvider;
+import org.junit.jupiter.params.provider.ArgumentsSource;
 
 import java.sql.Connection;
-import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.ResultSetMetaData;
 import java.sql.SQLException;
+import java.sql.Statement;
+import java.text.ParseException;
 import java.util.Collection;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.stream.Stream;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-public abstract class BaseRDLE2EIT {
+@ExtendWith(E2EITExtension.class)
+public final class RQLE2EIT {
     
-    /**
-     * Init.
-     *
-     * @param containerComposer container composer
-     * @throws SQLException SQL exception
-     */
-    public final void init(final SingleE2EITContainerComposer containerComposer) throws SQLException {
-        try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
-            executeInitSQLs(containerComposer, connection);
-        }
-    }
-    
-    /**
-     * Tear down.
-     *
-     * @param containerComposer container composer
-     * @throws SQLException SQL exception
-     */
-    public final void tearDown(final SingleE2EITContainerComposer containerComposer) throws SQLException {
-        if (null != containerComposer.getAssertion().getDestroySQL()) {
-            try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
-                executeDestroySQLs(containerComposer, connection);
-            }
-        }
-        sleep();
-    }
-    
-    private void executeInitSQLs(final SingleE2EITContainerComposer containerComposer, final Connection connection) throws SQLException {
-        if (null == containerComposer.getAssertion().getInitialSQL() || null == containerComposer.getAssertion().getInitialSQL().getSql()) {
+    @ParameterizedTest(name = "{0}")
+    @EnabledIf("isEnabled")
+    @ArgumentsSource(TestCaseArgumentsProvider.class)
+    public void assertExecute(final AssertionTestParameter testParam) throws SQLException, ParseException {
+        // TODO make sure RQL test case can not be null
+        if (null == testParam.getTestCaseContext()) {
             return;
         }
-        for (String each : Splitter.on(";").trimResults().splitToList(containerComposer.getAssertion().getInitialSQL().getSql())) {
-            try (PreparedStatement preparedStatement = connection.prepareStatement(each)) {
-                preparedStatement.executeUpdate();
-                sleep();
-            }
+        try (SingleE2EITContainerComposer containerComposer = new SingleE2EITContainerComposer(testParam)) {
+            assertExecute(containerComposer);
         }
     }
     
-    private void executeDestroySQLs(final SingleE2EITContainerComposer containerComposer, final Connection connection) throws SQLException {
-        if (null == containerComposer.getAssertion().getDestroySQL().getSql()) {
-            return;
-        }
-        for (String each : Splitter.on(";").trimResults().splitToList(containerComposer.getAssertion().getDestroySQL().getSql())) {
-            try (PreparedStatement preparedStatement = connection.prepareStatement(each)) {
-                preparedStatement.executeUpdate();
-                sleep();
+    private void assertExecute(final SingleE2EITContainerComposer containerComposer) throws SQLException, ParseException {
+        try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
+            try (
+                    Statement statement = connection.createStatement();
+                    ResultSet resultSet = statement.executeQuery(containerComposer.getSQL())) {
+                assertResultSet(containerComposer, resultSet);
             }
         }
     }
     
-    protected void sleep() {
-        try {
-            Thread.sleep(2000L);
-        } catch (final InterruptedException ignored) {
-        }
-    }
-    
-    protected final void assertResultSet(final SingleE2EITContainerComposer containerComposer, final ResultSet resultSet) throws SQLException {
+    private void assertResultSet(final SingleE2EITContainerComposer containerComposer, final ResultSet resultSet) throws SQLException {
         assertMetaData(resultSet.getMetaData(), getExpectedColumns(containerComposer));
         assertRows(resultSet, containerComposer.getDataSet().getRows());
     }
@@ -121,11 +99,11 @@ public abstract class BaseRDLE2EIT {
         int rowCount = 0;
         ResultSetMetaData actualMetaData = actual.getMetaData();
         while (actual.next()) {
-            assertTrue(rowCount < expected.size(), "Size of actual result set is different with size of expected dat set rows.");
+            assertTrue(rowCount < expected.size(), "Size of actual result set is different with size of expected data set rows.");
             assertRow(actual, actualMetaData, expected.get(rowCount));
             rowCount++;
         }
-        assertThat("Size of actual result set is different with size of expected dat set rows.", rowCount, is(expected.size()));
+        assertThat("Size of actual result set is different with size of expected data set rows.", rowCount, is(expected.size()));
     }
     
     private void assertRow(final ResultSet actual, final ResultSetMetaData actualMetaData, final DataSetRow expected) throws SQLException {
@@ -141,4 +119,18 @@ public abstract class BaseRDLE2EIT {
         assertThat(String.valueOf(actual.getObject(columnIndex)), is(expected));
         assertThat(String.valueOf(actual.getObject(columnLabel)), is(expected));
     }
+    
+    private static boolean isEnabled() {
+        return E2ETestParameterFactory.containsTestParameter() && !E2ETestParameterFactory.getAssertionTestParameters(SQLCommandType.RQL).isEmpty();
+    }
+    
+    private static class TestCaseArgumentsProvider implements ArgumentsProvider {
+        
+        @Override
+        public Stream<? extends Arguments> provideArguments(final ExtensionContext extensionContext) {
+            Collection<AssertionTestParameter> result = E2ETestParameterFactory.getAssertionTestParameters(SQLCommandType.RQL);
+            // TODO make sure RQL test case can not be null
+            return result.isEmpty() ? Stream.of(Arguments.of(new AssertionTestParameter(null, null, null, null, null, null, null))) : result.stream().map(Arguments::of);
+        }
+    }
 }