diff --git a/asterix-installer/src/test/java/edu/uci/ics/asterix/installer/transaction/DmlRecoveryIT.java b/asterix-installer/src/test/java/edu/uci/ics/asterix/installer/transaction/DmlRecoveryIT.java
index 461a1d4..9caf48c 100644
--- a/asterix-installer/src/test/java/edu/uci/ics/asterix/installer/transaction/DmlRecoveryIT.java
+++ b/asterix-installer/src/test/java/edu/uci/ics/asterix/installer/transaction/DmlRecoveryIT.java
@@ -27,11 +27,13 @@
 @RunWith(Parameterized.class)
 public class DmlRecoveryIT {
 
+    // variable to indicate whether this test will be executed
+    private static final boolean IS_DML_RECOVERY_TEST_ON = false;
+
     private static final Logger LOGGER = Logger.getLogger(RecoveryIT.class.getName());
     private static final String PATH_ACTUAL = "rttest/";
-    
+
     private static final String TESTSUITE_PATH_BASE = "../asterix-app/src/test/resources/runtimets/";
-    
 
     private TestCaseContext tcCtx;
     private static File asterixInstallerPath;
@@ -92,11 +94,14 @@
 
     @Parameters
     public static Collection<Object[]> tests() throws Exception {
+
         Collection<Object[]> testArgs = new ArrayList<Object[]>();
-        TestCaseContext.Builder b = new TestCaseContext.Builder();
-        for (TestCaseContext ctx : b.build(new File(TESTSUITE_PATH_BASE))) {
-            if (ctx.getTestCase().getFilePath().equals("dml"))
-                testArgs.add(new Object[] { ctx });
+        if (IS_DML_RECOVERY_TEST_ON) {
+            TestCaseContext.Builder b = new TestCaseContext.Builder();
+            for (TestCaseContext ctx : b.build(new File(TESTSUITE_PATH_BASE))) {
+                if (ctx.getTestCase().getFilePath().equals("dml"))
+                    testArgs.add(new Object[] { ctx });
+            }
         }
         return testArgs;
     }
@@ -109,6 +114,6 @@
     public void test() throws Exception {
 
         TestsUtils.executeTest(PATH_ACTUAL, tcCtx, pb, true);
-        
+
     }
 }
diff --git a/asterix-installer/src/test/java/edu/uci/ics/asterix/installer/transaction/RecoveryIT.java b/asterix-installer/src/test/java/edu/uci/ics/asterix/installer/transaction/RecoveryIT.java
index 44ca366..730b9b0 100644
--- a/asterix-installer/src/test/java/edu/uci/ics/asterix/installer/transaction/RecoveryIT.java
+++ b/asterix-installer/src/test/java/edu/uci/ics/asterix/installer/transaction/RecoveryIT.java
@@ -38,6 +38,8 @@
 
 @RunWith(Parameterized.class)
 public class RecoveryIT {
+    // indicate wheth Recovery_DDL will be executed
+    private static final boolean IS_RECOVERY_DDL_TEST_ON = false;
 
     private static final Logger LOGGER = Logger.getLogger(RecoveryIT.class.getName());
     private static final String PATH_ACTUAL = "rttest/";
@@ -103,6 +105,10 @@
         Collection<Object[]> testArgs = new ArrayList<Object[]>();
         TestCaseContext.Builder b = new TestCaseContext.Builder();
         for (TestCaseContext ctx : b.build(new File(PATH_BASE))) {
+            
+            if (!IS_RECOVERY_DDL_TEST_ON && ctx.getTestCase().getFilePath().contains("recovery_ddl"))
+                continue;
+            
             testArgs.add(new Object[] { ctx });
         }
         return testArgs;
