diff --git a/build.gradle b/build.gradle
index 2014b5c..cb9eeca 100644
--- a/build.gradle
+++ b/build.gradle
@@ -153,15 +153,30 @@
     testCompile group: 'org.apache.zookeeper', name: 'zookeeper', version: zookeeperVersion, ext: 'jar'
 }
 
-test {
-    include '**/Test*.*'
+task unitTest (type: Test) {
+    description 'Run unit tests'
+    useJUnit {
+        includeCategories 'org.apache.sqoop.testcategories.sqooptest.UnitTest'
+        excludeCategories 'org.apache.sqoop.testcategories.KerberizedTest'
+        excludeCategories 'org.apache.sqoop.testcategories.thirdpartytest.ThirdPartyTest'
+    }
 }
 
-task thirdPartyTest(type: Test) {
-    description 'Run ThirdParty tests - you need to specify -Dsqoop.thirdparty.lib.dir where the Third party driver jars reside (relative to the project directory)'
-    exclude '**/*ManualTest.*'
-    exclude '**/Test*.*'
-    include '**/*Test*.*'
+task allIntegrationTest (type: Test){
+    description 'Run all  integration tests'
+    useJUnit {
+        includeCategories 'org.apache.sqoop.testcategories.sqooptest.IntegrationTest'
+    }
+}
+
+task thirdPartyTest (type: Test) {
+    description 'Run Third-party Tests - you need to specify -Dsqoop.thirdparty.lib.dir where the Third party driver ' +
+            'jars reside (relative to the project directory)'
+    useJUnit {
+        includeCategories 'org.apache.sqoop.testcategories.thirdpartytest.ThirdPartyTest'
+        excludeCategories 'org.apache.sqoop.testcategories.sqooptest.ManualTest'
+        excludeCategories 'org.apache.sqoop.testcategories.KerberizedTest'
+    }
     systemProperty "ms.datatype.test.data.file.export" ,"DatatypeTestData-export-lite.txt"
     systemProperty "ms.datatype.test.data.file.import" ,"DatatypeTestData-import-lite.txt"
     systemProperty "ms.datatype.test.data.file.delim" ,","
@@ -170,9 +185,48 @@
 
 task manualTest(type: Test) {
     description 'Run manual tests'
-    include '**/*ManualTest.*'
+    useJUnit {
+        includeCategories 'org.apache.sqoop.testcategories.sqooptest.ManualTest'
+    }
 }
 
+task integrationPlainTest(type: Test) {
+    description 'Run integration tests which do not need a docker container or an external database'
+    useJUnit {
+        includeCategories 'org.apache.sqoop.testcategories.sqooptest.IntegrationTest'
+        excludeCategories 'org.apache.sqoop.testcategories.sqooptest.ManualTest'
+        excludeCategories 'org.apache.sqoop.testcategories.KerberizedTest'
+        excludeCategories 'org.apache.sqoop.testcategories.thirdpartytest.ThirdPartyTest'
+    }
+}
+
+task kerberizedTest (type: Test){
+    description 'Run Kerberized Test'
+    // A Gradle test task with forkEvery 1 and includeCategories performs poorly because it starts a new JVM even for the filtered tests.
+    // To work around this performance problem we need to add every kerberized test in a separate include field here.
+    include '**/TestKerberosAuthenticator*'
+    include '**/HBaseKerberizedConnectivityTest*'
+    include '**/TestHiveMiniCluster*'
+    include '**/TestHiveServer2TextImport*'
+    useJUnit {
+        includeCategories 'org.apache.sqoop.testcategories.KerberizedTest'
+    }
+    forkEvery 1
+}
+
+test {
+    description 'Run tests that do not need exteral JDBC driver and/or a docker container. ' +
+            'This includes integration plain tests and unit tests'
+    include ''
+}
+test.finalizedBy(integrationPlainTest, unitTest, kerberizedTest)
+
+task sqoopTest (type: Test){
+    description 'Run all Sqoop tests'
+    include ''
+}
+sqoopTest.finalizedBy(test, kerberizedTest, thirdPartyTest)
+
 def testBuildDir = "$buildDir/test/"
 def testBuildDirData ="$testBuildDir/data/"
 
@@ -201,7 +255,6 @@
     minHeapSize = "512m"
     maxHeapSize = "5120m"
     jvmArgs '-Xmx5012m', "-da:org.apache.hadoop.hive.thrift.HadoopThriftAuthBridge"
-    forkEvery 1
 
     dependsOn buildFolder
 
diff --git a/src/test/org/apache/sqoop/TestConnFactory.java b/src/test/org/apache/sqoop/TestConnFactory.java
index fb6c940..595a3c8 100644
--- a/src/test/org/apache/sqoop/TestConnFactory.java
+++ b/src/test/org/apache/sqoop/TestConnFactory.java
@@ -32,19 +32,21 @@
 import org.apache.sqoop.manager.ImportJobContext;
 import org.apache.sqoop.manager.ManagerFactory;
 import org.apache.sqoop.metastore.JobData;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.apache.sqoop.tool.ImportTool;
 import org.junit.Test;
 
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 import org.junit.Rule;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 
 /**
  * Test the ConnFactory implementation and its ability to delegate to multiple
  * different ManagerFactory implementations using reflection.
  */
-
+@Category(UnitTest.class)
 public class TestConnFactory {
 
   @Rule
diff --git a/src/test/org/apache/sqoop/TestIncrementalImport.java b/src/test/org/apache/sqoop/TestIncrementalImport.java
index 29c4779..dbdd05c 100644
--- a/src/test/org/apache/sqoop/TestIncrementalImport.java
+++ b/src/test/org/apache/sqoop/TestIncrementalImport.java
@@ -45,6 +45,7 @@
 import org.apache.sqoop.manager.HsqldbManager;
 import org.apache.sqoop.manager.ManagerFactory;
 import org.apache.sqoop.metastore.JobData;
+import org.apache.sqoop.testcategories.sqooptest.IntegrationTest;
 import org.apache.sqoop.testutil.BaseSqoopTestCase;
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.tool.ImportTool;
@@ -53,6 +54,7 @@
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 
 
@@ -65,7 +67,7 @@
  * The metastore URL is configured to be in-memory, and drop all
  * state between individual tests.
  */
-
+@Category(IntegrationTest.class)
 public class TestIncrementalImport  {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/TestSqoopOptions.java b/src/test/org/apache/sqoop/TestSqoopOptions.java
index e55682e..39d2d7c 100644
--- a/src/test/org/apache/sqoop/TestSqoopOptions.java
+++ b/src/test/org/apache/sqoop/TestSqoopOptions.java
@@ -33,6 +33,7 @@
 
 import org.apache.commons.lang.ArrayUtils;
 import org.apache.sqoop.manager.oracle.OracleUtils;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.After;
 import org.apache.commons.lang3.reflect.FieldUtils;
 import org.apache.sqoop.tool.ImportAllTablesTool;
@@ -42,6 +43,7 @@
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 
 import org.apache.sqoop.SqoopOptions;
@@ -63,6 +65,7 @@
 /**
  * Test aspects of the SqoopOptions class.
  */
+@Category(UnitTest.class)
 public class TestSqoopOptions {
 
   private Properties originalSystemProperties;
diff --git a/src/test/org/apache/sqoop/accumulo/TestAccumuloUtil.java b/src/test/org/apache/sqoop/accumulo/TestAccumuloUtil.java
index 631eeff..95657f9 100644
--- a/src/test/org/apache/sqoop/accumulo/TestAccumuloUtil.java
+++ b/src/test/org/apache/sqoop/accumulo/TestAccumuloUtil.java
@@ -18,7 +18,9 @@
 
 package org.apache.sqoop.accumulo;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -28,6 +30,7 @@
  * test cases) and that when in fake not present mode, the method returns
  * false.
  */
+@Category(UnitTest.class)
 public class TestAccumuloUtil {
 
   @Test
diff --git a/src/test/org/apache/sqoop/authentication/TestKerberosAuthenticator.java b/src/test/org/apache/sqoop/authentication/TestKerberosAuthenticator.java
index f5700ce..47f905e 100644
--- a/src/test/org/apache/sqoop/authentication/TestKerberosAuthenticator.java
+++ b/src/test/org/apache/sqoop/authentication/TestKerberosAuthenticator.java
@@ -22,9 +22,12 @@
 import org.apache.hadoop.fs.CommonConfigurationKeys;
 import org.apache.hadoop.security.UserGroupInformation;
 import org.apache.sqoop.infrastructure.kerberos.MiniKdcInfrastructureRule;
+import org.apache.sqoop.testcategories.sqooptest.IntegrationTest;
+import org.apache.sqoop.testcategories.KerberizedTest;
 import org.junit.ClassRule;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 
 import static org.apache.hadoop.security.UserGroupInformation.AuthenticationMethod.KERBEROS;
@@ -32,6 +35,7 @@
 import static org.junit.Assert.assertNotSame;
 import static org.junit.Assert.assertSame;
 
+@Category({KerberizedTest.class, IntegrationTest.class})
 public class TestKerberosAuthenticator {
 
   private static final String KERBEROS_RULE_TEMPLATE = "RULE:[2:$1@$0](.*@%s)s/@%s//";
diff --git a/src/test/org/apache/sqoop/db/TestDriverManagerJdbcConnectionFactory.java b/src/test/org/apache/sqoop/db/TestDriverManagerJdbcConnectionFactory.java
index 2448316..102e27c 100644
--- a/src/test/org/apache/sqoop/db/TestDriverManagerJdbcConnectionFactory.java
+++ b/src/test/org/apache/sqoop/db/TestDriverManagerJdbcConnectionFactory.java
@@ -18,17 +18,20 @@
 
 package org.apache.sqoop.db;
 
+import org.apache.sqoop.testcategories.sqooptest.IntegrationTest;
 import org.apache.sqoop.testutil.HsqldbTestServer;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 
 import java.sql.Connection;
 
 import static org.junit.Assert.assertFalse;
 
+@Category(IntegrationTest.class)
 public class TestDriverManagerJdbcConnectionFactory {
 
   private static final String HSQLDB_DRIVER_CLASS = "org.hsqldb.jdbcDriver";
diff --git a/src/test/org/apache/sqoop/db/decorator/TestKerberizedConnectionFactoryDecorator.java b/src/test/org/apache/sqoop/db/decorator/TestKerberizedConnectionFactoryDecorator.java
index d3e3fb2..8206d14 100644
--- a/src/test/org/apache/sqoop/db/decorator/TestKerberizedConnectionFactoryDecorator.java
+++ b/src/test/org/apache/sqoop/db/decorator/TestKerberizedConnectionFactoryDecorator.java
@@ -21,9 +21,11 @@
 import org.apache.hadoop.security.UserGroupInformation;
 import org.apache.sqoop.authentication.KerberosAuthenticator;
 import org.apache.sqoop.db.JdbcConnectionFactory;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
@@ -37,6 +39,7 @@
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+@Category(UnitTest.class)
 public class TestKerberizedConnectionFactoryDecorator {
 
   private KerberizedConnectionFactoryDecorator kerberizedConnectionFactoryDecorator;
diff --git a/src/test/org/apache/sqoop/hbase/HBaseImportAddRowKeyTest.java b/src/test/org/apache/sqoop/hbase/HBaseImportAddRowKeyTest.java
index c4caafb..df1840b 100644
--- a/src/test/org/apache/sqoop/hbase/HBaseImportAddRowKeyTest.java
+++ b/src/test/org/apache/sqoop/hbase/HBaseImportAddRowKeyTest.java
@@ -19,6 +19,7 @@
 package org.apache.sqoop.hbase;
 
 import org.apache.commons.lang.StringUtils;
+import org.apache.sqoop.util.BlockJUnit4ClassRunnerWithParametersFactory;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -33,6 +34,7 @@
 import static org.apache.commons.lang.StringUtils.join;
 
 @RunWith(Parameterized.class)
+@Parameterized.UseParametersRunnerFactory(BlockJUnit4ClassRunnerWithParametersFactory.class)
 public class HBaseImportAddRowKeyTest extends HBaseTestCase {
 
   @Parameterized.Parameters(name = "bulkLoad = {0}")
diff --git a/src/test/org/apache/sqoop/hbase/HBaseKerberizedConnectivityTest.java b/src/test/org/apache/sqoop/hbase/HBaseKerberizedConnectivityTest.java
index 3bfb391..07b4b54 100644
--- a/src/test/org/apache/sqoop/hbase/HBaseKerberizedConnectivityTest.java
+++ b/src/test/org/apache/sqoop/hbase/HBaseKerberizedConnectivityTest.java
@@ -19,11 +19,14 @@
 package org.apache.sqoop.hbase;
 
 import org.apache.sqoop.infrastructure.kerberos.MiniKdcInfrastructureRule;
+import org.apache.sqoop.testcategories.KerberizedTest;
 import org.junit.ClassRule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import java.io.IOException;
 
+@Category(KerberizedTest.class)
 public class HBaseKerberizedConnectivityTest extends HBaseTestCase {
 
   private static final String HBASE_TABLE_NAME = "KerberosTest";
diff --git a/src/test/org/apache/sqoop/hbase/HBaseTestCase.java b/src/test/org/apache/sqoop/hbase/HBaseTestCase.java
index 94b71b6..036f79e 100644
--- a/src/test/org/apache/sqoop/hbase/HBaseTestCase.java
+++ b/src/test/org/apache/sqoop/hbase/HBaseTestCase.java
@@ -181,7 +181,7 @@
       // We set the port for the hbase master and regionserver web UI to -1 because we do not want the info server to run.
       hbaseTestUtil.getConfiguration().set(MASTER_INFO_PORT, INFO_PORT_DISABLE_WEB_UI);
       hbaseTestUtil.getConfiguration().set(REGIONSERVER_INFO_PORT, INFO_PORT_DISABLE_WEB_UI);
-
+      hbaseTestUtil.getConfiguration().set("fs.file.impl.disable.cache", "true");
       setupKerberos();
 
       hbaseTestUtil.startMiniCluster();
diff --git a/src/test/org/apache/sqoop/hbase/HBaseUtilTest.java b/src/test/org/apache/sqoop/hbase/HBaseUtilTest.java
index c6a808c..aa9e8e1 100644
--- a/src/test/org/apache/sqoop/hbase/HBaseUtilTest.java
+++ b/src/test/org/apache/sqoop/hbase/HBaseUtilTest.java
@@ -18,7 +18,9 @@
 
 package org.apache.sqoop.hbase;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -28,6 +30,7 @@
  * This tests to verify that HBase is present (default when running test cases)
  * and that when in fake not present mode, the method return false.
  */
+@Category(UnitTest.class)
 public class HBaseUtilTest {
 
   @Test
diff --git a/src/test/org/apache/sqoop/hbase/TestHBasePutProcessor.java b/src/test/org/apache/sqoop/hbase/TestHBasePutProcessor.java
index e78a535..37e0f07 100644
--- a/src/test/org/apache/sqoop/hbase/TestHBasePutProcessor.java
+++ b/src/test/org/apache/sqoop/hbase/TestHBasePutProcessor.java
@@ -24,10 +24,12 @@
 import org.apache.hadoop.hbase.client.Delete;
 import org.apache.hadoop.hbase.client.Mutation;
 import org.apache.hadoop.hbase.client.Put;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.apache.sqoop.util.ExpectedLogMessage;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import java.util.Arrays;
 import java.util.List;
@@ -39,6 +41,7 @@
 import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
 
+@Category(UnitTest.class)
 public class TestHBasePutProcessor {
 
   @Rule
diff --git a/src/test/org/apache/sqoop/hcat/TestHCatalogBasic.java b/src/test/org/apache/sqoop/hcat/TestHCatalogBasic.java
index ba05cab..d3ab89d 100644
--- a/src/test/org/apache/sqoop/hcat/TestHCatalogBasic.java
+++ b/src/test/org/apache/sqoop/hcat/TestHCatalogBasic.java
@@ -18,6 +18,7 @@
 
 package org.apache.sqoop.hcat;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Before;
 
 import org.apache.sqoop.SqoopOptions;
@@ -27,11 +28,13 @@
 import org.junit.Test;
 
 import org.junit.Rule;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 
 /**
  * Test basic HCatalog related features.
  */
+@Category(UnitTest.class)
 public class TestHCatalogBasic {
 
   private static ImportTool importTool;
diff --git a/src/test/org/apache/sqoop/hive/HiveServer2ConnectionFactoryInitializerTest.java b/src/test/org/apache/sqoop/hive/HiveServer2ConnectionFactoryInitializerTest.java
index 4d2cb2f..544659d 100644
--- a/src/test/org/apache/sqoop/hive/HiveServer2ConnectionFactoryInitializerTest.java
+++ b/src/test/org/apache/sqoop/hive/HiveServer2ConnectionFactoryInitializerTest.java
@@ -23,9 +23,11 @@
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.db.JdbcConnectionFactory;
 import org.apache.sqoop.db.decorator.KerberizedConnectionFactoryDecorator;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.assertj.core.api.SoftAssertions;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.junit.Assert.assertThat;
@@ -33,6 +35,7 @@
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+@Category(UnitTest.class)
 public class HiveServer2ConnectionFactoryInitializerTest {
 
   private static final String TEST_HS2_URL = "jdbc:hive2://myhost:10000/default";
diff --git a/src/test/org/apache/sqoop/hive/TestHiveClientFactory.java b/src/test/org/apache/sqoop/hive/TestHiveClientFactory.java
index a3c2dc9..b095663 100644
--- a/src/test/org/apache/sqoop/hive/TestHiveClientFactory.java
+++ b/src/test/org/apache/sqoop/hive/TestHiveClientFactory.java
@@ -22,15 +22,18 @@
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.db.JdbcConnectionFactory;
 import org.apache.sqoop.manager.ConnManager;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.assertj.core.api.SoftAssertions;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.junit.Assert.assertThat;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+@Category(UnitTest.class)
 public class TestHiveClientFactory {
 
   private static final String TEST_HS2_URL = "jdbc:hive2://myhost:10000/default";
diff --git a/src/test/org/apache/sqoop/hive/TestHiveMiniCluster.java b/src/test/org/apache/sqoop/hive/TestHiveMiniCluster.java
index 419f888..089b81b 100644
--- a/src/test/org/apache/sqoop/hive/TestHiveMiniCluster.java
+++ b/src/test/org/apache/sqoop/hive/TestHiveMiniCluster.java
@@ -27,10 +27,14 @@
 import org.apache.sqoop.hive.minicluster.NoAuthenticationConfiguration;
 import org.apache.sqoop.hive.minicluster.PasswordAuthenticationConfiguration;
 import org.apache.sqoop.infrastructure.kerberos.MiniKdcInfrastructureRule;
+import org.apache.sqoop.testcategories.sqooptest.IntegrationTest;
+import org.apache.sqoop.testcategories.KerberizedTest;
+import org.apache.sqoop.util.BlockJUnit4ClassRunnerWithParametersFactory;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.ClassRule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameters;
@@ -43,7 +47,9 @@
 
 import static org.junit.Assert.assertEquals;
 
+@Category({KerberizedTest.class, IntegrationTest.class})
 @RunWith(Parameterized.class)
+@Parameterized.UseParametersRunnerFactory(BlockJUnit4ClassRunnerWithParametersFactory.class)
 public class TestHiveMiniCluster {
 
   @ClassRule
diff --git a/src/test/org/apache/sqoop/hive/TestHiveServer2Client.java b/src/test/org/apache/sqoop/hive/TestHiveServer2Client.java
index 0261729..d2a4a17 100644
--- a/src/test/org/apache/sqoop/hive/TestHiveServer2Client.java
+++ b/src/test/org/apache/sqoop/hive/TestHiveServer2Client.java
@@ -22,9 +22,11 @@
 import org.apache.hadoop.fs.Path;
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.db.JdbcConnectionFactory;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 import org.mockito.InOrder;
 import org.mockito.Mockito;
@@ -46,6 +48,7 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+@Category(UnitTest.class)
 public class TestHiveServer2Client {
 
   @Rule
diff --git a/src/test/org/apache/sqoop/hive/TestHiveServer2ParquetImport.java b/src/test/org/apache/sqoop/hive/TestHiveServer2ParquetImport.java
index 65f0794..8cfd776 100644
--- a/src/test/org/apache/sqoop/hive/TestHiveServer2ParquetImport.java
+++ b/src/test/org/apache/sqoop/hive/TestHiveServer2ParquetImport.java
@@ -23,15 +23,18 @@
 import org.apache.hadoop.fs.Path;
 import org.apache.sqoop.hive.minicluster.HiveMiniCluster;
 import org.apache.sqoop.hive.minicluster.NoAuthenticationConfiguration;
+import org.apache.sqoop.testcategories.sqooptest.IntegrationTest;
 import org.apache.sqoop.testutil.ArgumentArrayBuilder;
 import org.apache.sqoop.testutil.HiveServer2TestUtil;
 import org.apache.sqoop.testutil.ImportJobTestCase;
+import org.apache.sqoop.util.BlockJUnit4ClassRunnerWithParametersFactory;
 import org.apache.sqoop.util.ParquetReader;
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.experimental.runners.Enclosed;
 import org.junit.rules.ExpectedException;
 import org.junit.runner.RunWith;
@@ -52,6 +55,7 @@
 import static org.junit.Assert.assertTrue;
 
 @RunWith(Enclosed.class)
+@Category(IntegrationTest.class)
 public class TestHiveServer2ParquetImport {
 
   private static final String[] TEST_COLUMN_NAMES = {"C1_VARCHAR", "C2#INTEGER", "3C_CHAR"};
@@ -75,6 +79,7 @@
   private static HiveServer2TestUtil hiveServer2TestUtil;
 
   @RunWith(Parameterized.class)
+  @Parameterized.UseParametersRunnerFactory(BlockJUnit4ClassRunnerWithParametersFactory.class)
   public static class ParquetCompressionCodecTestCase extends ImportJobTestCase {
 
     @Parameters(name = "compressionCodec = {0}")
diff --git a/src/test/org/apache/sqoop/hive/TestHiveServer2TextImport.java b/src/test/org/apache/sqoop/hive/TestHiveServer2TextImport.java
index 410724f..e0dd101 100644
--- a/src/test/org/apache/sqoop/hive/TestHiveServer2TextImport.java
+++ b/src/test/org/apache/sqoop/hive/TestHiveServer2TextImport.java
@@ -22,6 +22,7 @@
 import org.apache.sqoop.hive.minicluster.HiveMiniCluster;
 import org.apache.sqoop.hive.minicluster.KerberosAuthenticationConfiguration;
 import org.apache.sqoop.infrastructure.kerberos.MiniKdcInfrastructureRule;
+import org.apache.sqoop.testcategories.KerberizedTest;
 import org.apache.sqoop.testutil.ArgumentArrayBuilder;
 import org.apache.sqoop.testutil.HiveServer2TestUtil;
 import org.apache.sqoop.testutil.ImportJobTestCase;
@@ -29,12 +30,14 @@
 import org.junit.Before;
 import org.junit.ClassRule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import java.util.Arrays;
 import java.util.List;
 
 import static org.junit.Assert.assertEquals;
 
+@Category(KerberizedTest.class)
 public class TestHiveServer2TextImport extends ImportJobTestCase {
 
   @ClassRule
diff --git a/src/test/org/apache/sqoop/hive/TestHiveTypesForAvroTypeMapping.java b/src/test/org/apache/sqoop/hive/TestHiveTypesForAvroTypeMapping.java
index 276e9ea..1b65267 100644
--- a/src/test/org/apache/sqoop/hive/TestHiveTypesForAvroTypeMapping.java
+++ b/src/test/org/apache/sqoop/hive/TestHiveTypesForAvroTypeMapping.java
@@ -19,7 +19,10 @@
 package org.apache.sqoop.hive;
 
 import org.apache.avro.Schema;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
+import org.apache.sqoop.util.BlockJUnit4ClassRunnerWithParametersFactory;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameters;
@@ -29,7 +32,9 @@
 import static org.apache.sqoop.hive.HiveTypes.toHiveType;
 import static org.junit.Assert.*;
 
+@Category(UnitTest.class)
 @RunWith(Parameterized.class)
+@Parameterized.UseParametersRunnerFactory(BlockJUnit4ClassRunnerWithParametersFactory.class)
 public class TestHiveTypesForAvroTypeMapping {
 
   private final String hiveType;
diff --git a/src/test/org/apache/sqoop/hive/TestTableDefWriter.java b/src/test/org/apache/sqoop/hive/TestTableDefWriter.java
index 626ad22..b89ab0d 100644
--- a/src/test/org/apache/sqoop/hive/TestTableDefWriter.java
+++ b/src/test/org/apache/sqoop/hive/TestTableDefWriter.java
@@ -24,6 +24,7 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.sqoop.manager.ConnManager;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.apache.sqoop.util.SqlTypeMap;
 
 import org.apache.sqoop.SqoopOptions;
@@ -32,6 +33,7 @@
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 
 import java.sql.Types;
@@ -51,6 +53,7 @@
 /**
  * Test Hive DDL statement generation.
  */
+@Category(UnitTest.class)
 public class TestTableDefWriter {
 
   private static final String TEST_AVRO_SCHEMA = "{\"type\":\"record\",\"name\":\"IMPORT_TABLE_1\",\"fields\":[{\"name\":\"C1_VARCHAR\",\"type\":[\"null\",\"string\"]},{\"name\":\"C2_INTEGER\",\"type\":[\"null\",\"int\"]},{\"name\":\"_3C_CHAR\",\"type\":[\"null\",\"string\"]}]}";
diff --git a/src/test/org/apache/sqoop/hive/TestTableDefWriterForExternalTable.java b/src/test/org/apache/sqoop/hive/TestTableDefWriterForExternalTable.java
index f1768ee..978432c 100644
--- a/src/test/org/apache/sqoop/hive/TestTableDefWriterForExternalTable.java
+++ b/src/test/org/apache/sqoop/hive/TestTableDefWriterForExternalTable.java
@@ -25,14 +25,17 @@
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.BeforeClass;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.mockito.Mockito;
 
 import java.sql.*;
 import java.util.HashMap;
 import java.io.IOException;
 
+@Category(UnitTest.class)
 public class TestTableDefWriterForExternalTable {
   static String inputTableName = "genres";
   static String outputTableName = "genres";
diff --git a/src/test/org/apache/sqoop/importjob/NumericTypesImportTest.java b/src/test/org/apache/sqoop/importjob/NumericTypesImportTest.java
index 0714441..af310cb 100644
--- a/src/test/org/apache/sqoop/importjob/NumericTypesImportTest.java
+++ b/src/test/org/apache/sqoop/importjob/NumericTypesImportTest.java
@@ -31,6 +31,7 @@
 import org.apache.sqoop.importjob.configuration.OracleImportJobTestConfiguration;
 import org.apache.sqoop.importjob.configuration.ParquetTestConfiguration;
 import org.apache.sqoop.importjob.configuration.PostgresqlImportJobTestConfigurationForNumeric;
+import org.apache.sqoop.testcategories.thirdpartytest.ThirdPartyTest;
 import org.apache.sqoop.testutil.ArgumentArrayBuilder;
 import org.apache.sqoop.testutil.AvroTestUtils;
 import org.apache.sqoop.testutil.ImportJobTestCase;
@@ -42,10 +43,12 @@
 import org.apache.sqoop.importjob.configuration.OracleImportJobTestConfigurationForNumber;
 import org.apache.sqoop.importjob.configuration.PostgresqlImportJobTestConfigurationPaddingShouldSucceed;
 import org.apache.sqoop.util.ParquetReader;
+import org.apache.sqoop.util.BlockJUnit4ClassRunnerWithParametersFactory;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -61,6 +64,8 @@
 import static org.apache.sqoop.SqoopOptions.FileLayout.ParquetFile;
 
 @RunWith(Parameterized.class)
+@Parameterized.UseParametersRunnerFactory(BlockJUnit4ClassRunnerWithParametersFactory.class)
+@Category(ThirdPartyTest.class)
 /**
  * This test covers the behavior of the Avro import for fixed point decimal types, i.e. NUMBER, NUMERIC
  * and DECIMAL.
diff --git a/src/test/org/apache/sqoop/io/TestCodecMap.java b/src/test/org/apache/sqoop/io/TestCodecMap.java
index e719218..7a30a06 100644
--- a/src/test/org/apache/sqoop/io/TestCodecMap.java
+++ b/src/test/org/apache/sqoop/io/TestCodecMap.java
@@ -24,6 +24,7 @@
 import org.apache.hadoop.io.compress.CompressionCodec;
 import org.apache.hadoop.io.compress.GzipCodec;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
@@ -31,11 +32,13 @@
 
 import org.junit.Rule;
 
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 
 /**
  * Test looking up codecs by name.
  */
+@Category(UnitTest.class)
 public class TestCodecMap  {
 
 
diff --git a/src/test/org/apache/sqoop/io/TestLobFile.java b/src/test/org/apache/sqoop/io/TestLobFile.java
index 2bc95f2..bd9d510 100644
--- a/src/test/org/apache/sqoop/io/TestLobFile.java
+++ b/src/test/org/apache/sqoop/io/TestLobFile.java
@@ -36,6 +36,7 @@
 import org.apache.hadoop.fs.FSDataOutputStream;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Before;
 
 import org.junit.Test;
@@ -51,11 +52,13 @@
 import static org.mockito.Mockito.withSettings;
 
 import org.junit.Rule;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 
 /**
  * Test the LobFile reader/writer implementation.
  */
+@Category(UnitTest.class)
 public class TestLobFile {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/io/TestNamedFifo.java b/src/test/org/apache/sqoop/io/TestNamedFifo.java
index a93784e..6cbefdb 100644
--- a/src/test/org/apache/sqoop/io/TestNamedFifo.java
+++ b/src/test/org/apache/sqoop/io/TestNamedFifo.java
@@ -35,8 +35,10 @@
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.util.Shell;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
@@ -44,6 +46,7 @@
 /**
  * Test the named fifo utility.
  */
+@Category(UnitTest.class)
 public class TestNamedFifo {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/io/TestSplittableBufferedWriter.java b/src/test/org/apache/sqoop/io/TestSplittableBufferedWriter.java
index c59aa26..71d6971 100644
--- a/src/test/org/apache/sqoop/io/TestSplittableBufferedWriter.java
+++ b/src/test/org/apache/sqoop/io/TestSplittableBufferedWriter.java
@@ -35,10 +35,12 @@
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.io.compress.GzipCodec;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.apache.sqoop.testutil.ImportJobTestCase;
 
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -50,6 +52,7 @@
 /**
  * Test that the splittable buffered writer system works.
  */
+@Category(UnitTest.class)
 public class TestSplittableBufferedWriter {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/lib/TestBlobRef.java b/src/test/org/apache/sqoop/lib/TestBlobRef.java
index b271d3c..74aa205 100644
--- a/src/test/org/apache/sqoop/lib/TestBlobRef.java
+++ b/src/test/org/apache/sqoop/lib/TestBlobRef.java
@@ -20,6 +20,7 @@
 
 import java.io.*;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.apache.sqoop.testutil.BaseSqoopTestCase;
 import org.apache.sqoop.testutil.CommonArgs;
 
@@ -28,6 +29,7 @@
 import org.apache.hadoop.fs.Path;
 import org.apache.sqoop.io.LobFile;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -39,6 +41,7 @@
  * Note that we don't support inline parsing here; we only expect this to
  * really work for external BLOBs.
  */
+@Category(UnitTest.class)
 public class TestBlobRef {
 
   @Test
diff --git a/src/test/org/apache/sqoop/lib/TestBooleanParser.java b/src/test/org/apache/sqoop/lib/TestBooleanParser.java
index 914ab37..9f95c9d 100644
--- a/src/test/org/apache/sqoop/lib/TestBooleanParser.java
+++ b/src/test/org/apache/sqoop/lib/TestBooleanParser.java
@@ -19,7 +19,9 @@
 package org.apache.sqoop.lib;
 
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -27,6 +29,7 @@
 /**
  * Test the boolean parser.
  */
+@Category(UnitTest.class)
 public class TestBooleanParser {
 
   @Test
diff --git a/src/test/org/apache/sqoop/lib/TestClobRef.java b/src/test/org/apache/sqoop/lib/TestClobRef.java
index f94d1a8..d65c36f 100644
--- a/src/test/org/apache/sqoop/lib/TestClobRef.java
+++ b/src/test/org/apache/sqoop/lib/TestClobRef.java
@@ -20,6 +20,7 @@
 
 import java.io.*;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.apache.sqoop.testutil.BaseSqoopTestCase;
 import org.apache.sqoop.testutil.CommonArgs;
 
@@ -28,6 +29,7 @@
 import org.apache.hadoop.fs.Path;
 import org.apache.sqoop.io.LobFile;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -37,6 +39,7 @@
 /**
  * Test parsing of ClobRef objects.
  */
+@Category(UnitTest.class)
 public class TestClobRef {
 
   @Test
diff --git a/src/test/org/apache/sqoop/lib/TestFieldFormatter.java b/src/test/org/apache/sqoop/lib/TestFieldFormatter.java
index 9ac55e7..c7ffb10 100644
--- a/src/test/org/apache/sqoop/lib/TestFieldFormatter.java
+++ b/src/test/org/apache/sqoop/lib/TestFieldFormatter.java
@@ -18,7 +18,9 @@
 
 package org.apache.sqoop.lib;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
@@ -27,6 +29,7 @@
 /**
  * Test that the field formatter works in a variety of configurations.
  */
+@Category(UnitTest.class)
 public class TestFieldFormatter {
 
   @Test
diff --git a/src/test/org/apache/sqoop/lib/TestLargeObjectLoader.java b/src/test/org/apache/sqoop/lib/TestLargeObjectLoader.java
index 1e07d71..c5aabcc 100644
--- a/src/test/org/apache/sqoop/lib/TestLargeObjectLoader.java
+++ b/src/test/org/apache/sqoop/lib/TestLargeObjectLoader.java
@@ -24,6 +24,7 @@
 import java.sql.ResultSet;
 import java.sql.SQLException;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.apache.sqoop.testutil.BaseSqoopTestCase;
 import org.apache.sqoop.testutil.CommonArgs;
 
@@ -33,6 +34,7 @@
 import org.apache.sqoop.testutil.MockResultSet;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -42,6 +44,7 @@
 /**
  * Test deserialization of ClobRef and BlobRef fields.
  */
+@Category(UnitTest.class)
 public class TestLargeObjectLoader {
 
   protected Configuration conf;
diff --git a/src/test/org/apache/sqoop/lib/TestRecordParser.java b/src/test/org/apache/sqoop/lib/TestRecordParser.java
index d6844c1..dd8619a 100644
--- a/src/test/org/apache/sqoop/lib/TestRecordParser.java
+++ b/src/test/org/apache/sqoop/lib/TestRecordParser.java
@@ -21,8 +21,10 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 
 import static org.junit.Assert.fail;
@@ -31,6 +33,7 @@
 /**
  * Test that the record parser works in a variety of configurations.
  */
+@Category(UnitTest.class)
 public class TestRecordParser {
 
   @Rule
diff --git a/src/test/org/apache/sqoop/manager/TestDefaultManagerFactory.java b/src/test/org/apache/sqoop/manager/TestDefaultManagerFactory.java
index 8e16324..0f5d75e 100644
--- a/src/test/org/apache/sqoop/manager/TestDefaultManagerFactory.java
+++ b/src/test/org/apache/sqoop/manager/TestDefaultManagerFactory.java
@@ -22,7 +22,9 @@
 import org.apache.sqoop.metastore.JobData;
 import org.apache.commons.lang.RandomStringUtils;
 import org.apache.hadoop.conf.Configuration;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.hamcrest.core.IsInstanceOf.instanceOf;
 import static org.junit.Assert.assertThat;
@@ -32,7 +34,7 @@
 import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
 
-
+@Category(UnitTest.class)
 public class TestDefaultManagerFactory {
 
     DefaultManagerFactory mf = new DefaultManagerFactory();
diff --git a/src/test/org/apache/sqoop/manager/TestSqlManager.java b/src/test/org/apache/sqoop/manager/TestSqlManager.java
index 185f5a7..6bb5479 100644
--- a/src/test/org/apache/sqoop/manager/TestSqlManager.java
+++ b/src/test/org/apache/sqoop/manager/TestSqlManager.java
@@ -29,11 +29,13 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.sqoop.SqoopOptions;
+import org.apache.sqoop.testcategories.sqooptest.IntegrationTest;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
 import org.apache.sqoop.testutil.HsqldbTestServer;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
@@ -44,6 +46,7 @@
 /**
  * Test methods of the generic SqlManager implementation.
  */
+@Category(IntegrationTest.class)
 public class TestSqlManager {
 
   public static final Log LOG = LogFactory.getLog(TestSqlManager.class.getName());
diff --git a/src/test/org/apache/sqoop/manager/cubrid/CubridAuthTest.java b/src/test/org/apache/sqoop/manager/cubrid/CubridAuthTest.java
index 82fac12..c19385b 100644
--- a/src/test/org/apache/sqoop/manager/cubrid/CubridAuthTest.java
+++ b/src/test/org/apache/sqoop/manager/cubrid/CubridAuthTest.java
@@ -28,6 +28,7 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.sqoop.manager.CubridManager;
+import org.apache.sqoop.testcategories.thirdpartytest.CubridTest;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -35,6 +36,7 @@
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.manager.ConnManager;
 import org.apache.sqoop.testutil.ImportJobTestCase;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
@@ -62,6 +64,7 @@
  *   $csql -u dba SQOOPCUBRIDTEST
  *   csql>CREATE USER SQOOPUSER password 'PASSWORD';
  */
+@Category(CubridTest.class)
 public class CubridAuthTest extends ImportJobTestCase {
 
   public static final Log LOG = LogFactory.getLog(CubridAuthTest.class
diff --git a/src/test/org/apache/sqoop/manager/cubrid/CubridCompatTest.java b/src/test/org/apache/sqoop/manager/cubrid/CubridCompatTest.java
index 8a075e8..e47f8d1 100644
--- a/src/test/org/apache/sqoop/manager/cubrid/CubridCompatTest.java
+++ b/src/test/org/apache/sqoop/manager/cubrid/CubridCompatTest.java
@@ -28,7 +28,9 @@
 import org.apache.hadoop.conf.Configuration;
 
 import org.apache.sqoop.SqoopOptions;
+import org.apache.sqoop.testcategories.thirdpartytest.CubridTest;
 import org.apache.sqoop.testutil.ManagerCompatTestCase;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test the basic Cubrid connection manager with the various column types.
@@ -53,6 +55,7 @@
  *   $csql -u dba SQOOPCUBRIDTEST
  *   csql>CREATE USER SQOOPUSER password 'PASSWORD';
  */
+@Category(CubridTest.class)
 public class CubridCompatTest extends ManagerCompatTestCase {
 
   public static final Log LOG = LogFactory.getLog(CubridCompatTest.class
diff --git a/src/test/org/apache/sqoop/manager/cubrid/CubridManagerExportTest.java b/src/test/org/apache/sqoop/manager/cubrid/CubridManagerExportTest.java
index 4de8e40..aaacfe8 100644
--- a/src/test/org/apache/sqoop/manager/cubrid/CubridManagerExportTest.java
+++ b/src/test/org/apache/sqoop/manager/cubrid/CubridManagerExportTest.java
@@ -32,12 +32,14 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.util.StringUtils;
 import org.apache.sqoop.manager.CubridManager;
+import org.apache.sqoop.testcategories.thirdpartytest.CubridTest;
 import org.junit.After;
 import org.junit.Before;
 
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.TestExport;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
@@ -67,6 +69,7 @@
  *   $csql -u dba SQOOPCUBRIDTEST
  *   csql>CREATE USER SQOOPUSER password 'PASSWORD';
  */
+@Category(CubridTest.class)
 public class CubridManagerExportTest extends TestExport {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/cubrid/CubridManagerImportTest.java b/src/test/org/apache/sqoop/manager/cubrid/CubridManagerImportTest.java
index addf1ae..88230e9 100644
--- a/src/test/org/apache/sqoop/manager/cubrid/CubridManagerImportTest.java
+++ b/src/test/org/apache/sqoop/manager/cubrid/CubridManagerImportTest.java
@@ -36,6 +36,7 @@
 import org.apache.hadoop.io.IOUtils;
 import org.apache.sqoop.manager.ConnManager;
 import org.apache.sqoop.manager.CubridManager;
+import org.apache.sqoop.testcategories.thirdpartytest.CubridTest;
 import org.apache.sqoop.util.FileListing;
 
 import org.junit.After;
@@ -45,6 +46,7 @@
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ImportJobTestCase;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -75,6 +77,7 @@
  *   $csql -u dba SQOOPCUBRIDTEST
  *   csql>CREATE USER SQOOPUSER password 'PASSWORD';
  */
+@Category(CubridTest.class)
 public class CubridManagerImportTest extends ImportJobTestCase {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/db2/DB2ImportAllTableWithSchemaManualTest.java b/src/test/org/apache/sqoop/manager/db2/DB2ImportAllTableWithSchemaManualTest.java
index d1a6d69..ed949b9 100644
--- a/src/test/org/apache/sqoop/manager/db2/DB2ImportAllTableWithSchemaManualTest.java
+++ b/src/test/org/apache/sqoop/manager/db2/DB2ImportAllTableWithSchemaManualTest.java
@@ -34,6 +34,8 @@
 import org.apache.hadoop.io.IOUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.sqoop.manager.Db2Manager;
+import org.apache.sqoop.testcategories.thirdpartytest.Db2Test;
+import org.apache.sqoop.testcategories.sqooptest.ManualTest;
 import org.apache.sqoop.tool.ImportAllTablesTool;
 import org.apache.sqoop.Sqoop;
 import org.junit.After;
@@ -47,6 +49,7 @@
 import org.apache.sqoop.tool.SqoopTool;
 import org.apache.sqoop.util.FileListing;
 import org.apache.sqoop.util.LoggingUtils;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -72,6 +75,7 @@
  *   Create a login SQOOP with password PASSWORD and grant all
  *   access for database SQOOP to user SQOOP.
  */
+@Category({ManualTest.class, Db2Test.class})
 public class DB2ImportAllTableWithSchemaManualTest extends ImportJobTestCase {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/db2/DB2ManagerImportManualTest.java b/src/test/org/apache/sqoop/manager/db2/DB2ManagerImportManualTest.java
index b5d47f2..32dfc5e 100644
--- a/src/test/org/apache/sqoop/manager/db2/DB2ManagerImportManualTest.java
+++ b/src/test/org/apache/sqoop/manager/db2/DB2ManagerImportManualTest.java
@@ -32,6 +32,8 @@
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.io.IOUtils;
 import org.apache.sqoop.manager.Db2Manager;
+import org.apache.sqoop.testcategories.thirdpartytest.Db2Test;
+import org.apache.sqoop.testcategories.sqooptest.ManualTest;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -40,6 +42,7 @@
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ImportJobTestCase;
 import org.apache.sqoop.util.FileListing;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -65,6 +68,7 @@
  *   Create a login SQOOP with password PASSWORD and grant all
  *   access for database SQOOP to user SQOOP.
  */
+@Category({ManualTest.class, Db2Test.class})
 public class DB2ManagerImportManualTest extends ImportJobTestCase {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/db2/DB2XmlTypeImportManualTest.java b/src/test/org/apache/sqoop/manager/db2/DB2XmlTypeImportManualTest.java
index 393a110..494c75b 100644
--- a/src/test/org/apache/sqoop/manager/db2/DB2XmlTypeImportManualTest.java
+++ b/src/test/org/apache/sqoop/manager/db2/DB2XmlTypeImportManualTest.java
@@ -32,6 +32,8 @@
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.io.IOUtils;
 import org.apache.sqoop.manager.Db2Manager;
+import org.apache.sqoop.testcategories.thirdpartytest.Db2Test;
+import org.apache.sqoop.testcategories.sqooptest.ManualTest;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -40,6 +42,7 @@
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ImportJobTestCase;
 import org.apache.sqoop.util.FileListing;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -65,6 +68,7 @@
  *   Create a login SQOOP with password PASSWORD and grant all
  *   access for database SQOOP to user SQOOP.
  */
+@Category({ManualTest.class, Db2Test.class})
 public class DB2XmlTypeImportManualTest extends ImportJobTestCase {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/hsqldb/TestHsqldbManager.java b/src/test/org/apache/sqoop/manager/hsqldb/TestHsqldbManager.java
index 745a812..0faabdc 100644
--- a/src/test/org/apache/sqoop/manager/hsqldb/TestHsqldbManager.java
+++ b/src/test/org/apache/sqoop/manager/hsqldb/TestHsqldbManager.java
@@ -23,11 +23,13 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.sqoop.manager.ConnManager;
+import org.apache.sqoop.testcategories.sqooptest.IntegrationTest;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
 import org.apache.sqoop.testutil.HsqldbTestServer;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
@@ -37,6 +39,7 @@
  * Test HsqldbManager-specific functionality that overrides SqlManager
  * behavior.
  */
+@Category(IntegrationTest.class)
 public class TestHsqldbManager {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/mainframe/MainframeManagerImportTest.java b/src/test/org/apache/sqoop/manager/mainframe/MainframeManagerImportTest.java
index af5c754..38f7c06 100644
--- a/src/test/org/apache/sqoop/manager/mainframe/MainframeManagerImportTest.java
+++ b/src/test/org/apache/sqoop/manager/mainframe/MainframeManagerImportTest.java
@@ -30,12 +30,14 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.fs.Path;
 import org.apache.sqoop.mapreduce.mainframe.MainframeConfiguration;
+import org.apache.sqoop.testcategories.thirdpartytest.MainFrameTest;
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ImportJobTestCase;
 import org.apache.sqoop.tool.MainframeImportTool;
 import org.apache.sqoop.util.FileListing;
 import org.apache.commons.lang3.StringUtils;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertTrue;
 
@@ -56,7 +58,7 @@
  * <property name="sqoop.test.mainframe.ftp.dataset.gdg.filename" value="G0001V43" />
  * <property name="sqoop.test.mainframe.ftp.dataset.gdg.md5" value="43eefbe34e466dd3f65a3e867a60809a" />
  */
-
+@Category(MainFrameTest.class)
 public class MainframeManagerImportTest extends ImportJobTestCase {
   private static final Log LOG = LogFactory.getLog(
       MainframeManagerImportTest.class.getName());
diff --git a/src/test/org/apache/sqoop/manager/mysql/DirectMySQLExportTest.java b/src/test/org/apache/sqoop/manager/mysql/DirectMySQLExportTest.java
index b3570ff..8ac0aa3 100644
--- a/src/test/org/apache/sqoop/manager/mysql/DirectMySQLExportTest.java
+++ b/src/test/org/apache/sqoop/manager/mysql/DirectMySQLExportTest.java
@@ -33,6 +33,7 @@
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
 import org.apache.sqoop.manager.DirectMySQLManager;
+import org.apache.sqoop.testcategories.thirdpartytest.MysqlTest;
 import org.junit.After;
 import org.junit.Before;
 
@@ -41,6 +42,7 @@
 import org.apache.sqoop.mapreduce.MySQLExportMapper;
 import org.junit.Ignore;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -49,6 +51,7 @@
 /**
  * Test the DirectMySQLManager implementation's exportJob() functionality.
  */
+@Category( MysqlTest.class)
 public class DirectMySQLExportTest extends TestExport {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/mysql/DirectMySQLTest.java b/src/test/org/apache/sqoop/manager/mysql/DirectMySQLTest.java
index 89a7fec..b34894e 100644
--- a/src/test/org/apache/sqoop/manager/mysql/DirectMySQLTest.java
+++ b/src/test/org/apache/sqoop/manager/mysql/DirectMySQLTest.java
@@ -30,6 +30,7 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.sqoop.testcategories.thirdpartytest.MysqlTest;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -43,6 +44,7 @@
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ImportJobTestCase;
 import org.apache.sqoop.util.FileListing;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -69,6 +71,7 @@
  * flush privileges;
  *
  */
+@Category(MysqlTest.class)
 public class DirectMySQLTest extends ImportJobTestCase {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/mysql/JdbcMySQLExportTest.java b/src/test/org/apache/sqoop/manager/mysql/JdbcMySQLExportTest.java
index f655bcc..076c65a 100644
--- a/src/test/org/apache/sqoop/manager/mysql/JdbcMySQLExportTest.java
+++ b/src/test/org/apache/sqoop/manager/mysql/JdbcMySQLExportTest.java
@@ -27,12 +27,14 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.util.StringUtils;
 import org.apache.sqoop.manager.MySQLManager;
+import org.apache.sqoop.testcategories.thirdpartytest.MysqlTest;
 import org.junit.After;
 import org.junit.Before;
 
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.TestExport;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.fail;
 
@@ -41,6 +43,7 @@
  * This does a better test of ExportOutputFormat than TestExport does,
  * because it supports multi-row INSERT statements.
  */
+@Category(MysqlTest.class)
 public class JdbcMySQLExportTest extends TestExport {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/mysql/MySQLAllTablesTest.java b/src/test/org/apache/sqoop/manager/mysql/MySQLAllTablesTest.java
index baf0e2a..65cd529 100644
--- a/src/test/org/apache/sqoop/manager/mysql/MySQLAllTablesTest.java
+++ b/src/test/org/apache/sqoop/manager/mysql/MySQLAllTablesTest.java
@@ -27,10 +27,13 @@
 
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.TestAllTables;
+import org.apache.sqoop.testcategories.thirdpartytest.MysqlTest;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test the --all-tables functionality with MySQL.
  */
+@Category(MysqlTest.class)
 public class MySQLAllTablesTest extends TestAllTables {
 
   private MySQLTestUtils mySQLTestUtils = new MySQLTestUtils();
diff --git a/src/test/org/apache/sqoop/manager/mysql/MySQLAuthTest.java b/src/test/org/apache/sqoop/manager/mysql/MySQLAuthTest.java
index 1e2f70d..88b0448 100644
--- a/src/test/org/apache/sqoop/manager/mysql/MySQLAuthTest.java
+++ b/src/test/org/apache/sqoop/manager/mysql/MySQLAuthTest.java
@@ -29,6 +29,7 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.sqoop.testcategories.thirdpartytest.MysqlTest;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -39,6 +40,7 @@
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ImportJobTestCase;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -77,6 +79,7 @@
  * -Dtestcase=MySQLAuthTest
  *
  */
+@Category(MysqlTest.class)
 public class MySQLAuthTest extends ImportJobTestCase {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/mysql/MySQLCompatTest.java b/src/test/org/apache/sqoop/manager/mysql/MySQLCompatTest.java
index 7e822e6..45f6f4c 100644
--- a/src/test/org/apache/sqoop/manager/mysql/MySQLCompatTest.java
+++ b/src/test/org/apache/sqoop/manager/mysql/MySQLCompatTest.java
@@ -27,14 +27,17 @@
 import org.apache.commons.logging.LogFactory;
 
 import org.apache.hadoop.conf.Configuration;
+import org.apache.sqoop.testcategories.thirdpartytest.MysqlTest;
 import org.junit.Test;
 
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.testutil.ManagerCompatTestCase;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test the basic mysql connection manager with the various column types.
  */
+@Category(MysqlTest.class)
 public class MySQLCompatTest extends ManagerCompatTestCase {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/mysql/MySQLFreeFormQueryTest.java b/src/test/org/apache/sqoop/manager/mysql/MySQLFreeFormQueryTest.java
index f4f0b74..b4ba86b 100644
--- a/src/test/org/apache/sqoop/manager/mysql/MySQLFreeFormQueryTest.java
+++ b/src/test/org/apache/sqoop/manager/mysql/MySQLFreeFormQueryTest.java
@@ -29,10 +29,13 @@
 
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.TestFreeFormQueryImport;
+import org.apache.sqoop.testcategories.thirdpartytest.MysqlTest;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test free form query import with the MySQL db.
  */
+@Category(MysqlTest.class)
 public class MySQLFreeFormQueryTest extends TestFreeFormQueryImport {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/mysql/MySQLLobAvroImportTest.java b/src/test/org/apache/sqoop/manager/mysql/MySQLLobAvroImportTest.java
index 6208975..ca8958a 100644
--- a/src/test/org/apache/sqoop/manager/mysql/MySQLLobAvroImportTest.java
+++ b/src/test/org/apache/sqoop/manager/mysql/MySQLLobAvroImportTest.java
@@ -25,11 +25,14 @@
 import org.apache.hadoop.conf.Configuration;
 
 import org.apache.sqoop.SqoopOptions;
+import org.apache.sqoop.testcategories.thirdpartytest.MysqlTest;
 import org.apache.sqoop.testutil.LobAvroImportTestCase;
+import org.junit.experimental.categories.Category;
 
 /**
  * Tests BLOB/CLOB import for Avro with MySQL Db.
  */
+@Category(MysqlTest.class)
 public class MySQLLobAvroImportTest extends LobAvroImportTestCase {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/mysql/MySqlCallExportTest.java b/src/test/org/apache/sqoop/manager/mysql/MySqlCallExportTest.java
index 22a6676..060e03e 100644
--- a/src/test/org/apache/sqoop/manager/mysql/MySqlCallExportTest.java
+++ b/src/test/org/apache/sqoop/manager/mysql/MySqlCallExportTest.java
@@ -35,15 +35,18 @@
 import org.apache.hadoop.conf.Configuration;
 
 import org.apache.sqoop.SqoopOptions;
+import org.apache.sqoop.testcategories.thirdpartytest.MysqlTest;
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ExportJobTestCase;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test free form query import with the MySQL db.
  */
+@Category(MysqlTest.class)
 public class MySqlCallExportTest extends ExportJobTestCase {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/mysql/MySqlColumnEscapeImportTest.java b/src/test/org/apache/sqoop/manager/mysql/MySqlColumnEscapeImportTest.java
index eaab8c5..837d580 100644
--- a/src/test/org/apache/sqoop/manager/mysql/MySqlColumnEscapeImportTest.java
+++ b/src/test/org/apache/sqoop/manager/mysql/MySqlColumnEscapeImportTest.java
@@ -19,6 +19,7 @@
 package org.apache.sqoop.manager.mysql;
 
 import org.apache.sqoop.SqoopOptions;
+import org.apache.sqoop.testcategories.thirdpartytest.MysqlTest;
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ImportJobTestCase;
 import com.google.common.base.Charsets;
@@ -29,6 +30,7 @@
 import org.apache.hadoop.fs.Path;
 import org.junit.After;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import java.io.File;
 import java.io.IOException;
@@ -37,6 +39,7 @@
 
 import static org.junit.Assert.assertEquals;
 
+@Category(MysqlTest.class)
 public class MySqlColumnEscapeImportTest extends ImportJobTestCase {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/netezza/DirectNetezzaExportManualTest.java b/src/test/org/apache/sqoop/manager/netezza/DirectNetezzaExportManualTest.java
index 0a6997f..09daceb 100644
--- a/src/test/org/apache/sqoop/manager/netezza/DirectNetezzaExportManualTest.java
+++ b/src/test/org/apache/sqoop/manager/netezza/DirectNetezzaExportManualTest.java
@@ -25,15 +25,19 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.sqoop.manager.DirectNetezzaManager;
+import org.apache.sqoop.testcategories.sqooptest.ManualTest;
+import org.apache.sqoop.testcategories.thirdpartytest.NetezzaTest;
 import org.junit.Test;
 
 import org.apache.sqoop.SqoopOptions;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.fail;
 
 /**
  * Test the DirectNetezzaManager implementation's exportJob() functionality.
  */
+@Category({ManualTest.class, NetezzaTest.class})
 public class DirectNetezzaExportManualTest extends NetezzaExportManualTest {
 
   public static final Log LOG = LogFactory
diff --git a/src/test/org/apache/sqoop/manager/netezza/DirectNetezzaHCatExportManualTest.java b/src/test/org/apache/sqoop/manager/netezza/DirectNetezzaHCatExportManualTest.java
index 9365ba0..9988a57 100644
--- a/src/test/org/apache/sqoop/manager/netezza/DirectNetezzaHCatExportManualTest.java
+++ b/src/test/org/apache/sqoop/manager/netezza/DirectNetezzaHCatExportManualTest.java
@@ -31,14 +31,18 @@
 import org.apache.sqoop.hcat.HCatalogTestUtils.ColumnGenerator;
 import org.apache.sqoop.hcat.HCatalogTestUtils.KeyType;
 import org.apache.sqoop.manager.NetezzaManager;
+import org.apache.sqoop.testcategories.sqooptest.ManualTest;
+import org.apache.sqoop.testcategories.thirdpartytest.NetezzaTest;
 import org.junit.Before;
 
 import org.apache.sqoop.SqoopOptions;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test the DirectNetezzaManager implementation's hcatalog export functionality.
  */
+@Category({ManualTest.class, NetezzaTest.class})
 public class DirectNetezzaHCatExportManualTest extends HCatalogExportTest {
   // instance variables populated during setUp, used during tests
   private NetezzaManager manager;
diff --git a/src/test/org/apache/sqoop/manager/netezza/DirectNetezzaHCatImportManualTest.java b/src/test/org/apache/sqoop/manager/netezza/DirectNetezzaHCatImportManualTest.java
index c05b733..97af830 100644
--- a/src/test/org/apache/sqoop/manager/netezza/DirectNetezzaHCatImportManualTest.java
+++ b/src/test/org/apache/sqoop/manager/netezza/DirectNetezzaHCatImportManualTest.java
@@ -31,14 +31,18 @@
 import org.apache.sqoop.hcat.HCatalogTestUtils.ColumnGenerator;
 import org.apache.sqoop.hcat.HCatalogTestUtils.KeyType;
 import org.apache.sqoop.manager.NetezzaManager;
+import org.apache.sqoop.testcategories.sqooptest.ManualTest;
+import org.apache.sqoop.testcategories.thirdpartytest.NetezzaTest;
 import org.junit.Before;
 
 import org.apache.sqoop.SqoopOptions;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test the DirectNetezzaManager implementation's hcatalog import functionality.
  */
+@Category({ManualTest.class, NetezzaTest.class})
 public class DirectNetezzaHCatImportManualTest extends HCatalogImportTest {
   // instance variables populated during setUp, used during tests
   private NetezzaManager manager;
diff --git a/src/test/org/apache/sqoop/manager/netezza/NetezzaExportManualTest.java b/src/test/org/apache/sqoop/manager/netezza/NetezzaExportManualTest.java
index 95abe7a..2ca9853 100644
--- a/src/test/org/apache/sqoop/manager/netezza/NetezzaExportManualTest.java
+++ b/src/test/org/apache/sqoop/manager/netezza/NetezzaExportManualTest.java
@@ -31,12 +31,15 @@
 import org.apache.hadoop.fs.Path;
 import org.apache.sqoop.manager.DirectNetezzaManager;
 import org.apache.sqoop.manager.NetezzaManager;
+import org.apache.sqoop.testcategories.sqooptest.ManualTest;
+import org.apache.sqoop.testcategories.thirdpartytest.NetezzaTest;
 import org.junit.Before;
 
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.TestExport;
 import org.apache.sqoop.testutil.BaseSqoopTestCase;
 import org.apache.sqoop.testutil.CommonArgs;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.fail;
 
@@ -51,6 +54,7 @@
  * this manually with -Dtestcase=NetezzaExportManualTest.
  *
  */
+@Category({ManualTest.class, NetezzaTest.class})
 public class NetezzaExportManualTest extends TestExport {
   public static final Log LOG = LogFactory.getLog(NetezzaExportManualTest.class
     .getName());
diff --git a/src/test/org/apache/sqoop/manager/netezza/NetezzaImportManualTest.java b/src/test/org/apache/sqoop/manager/netezza/NetezzaImportManualTest.java
index 4002c64..84fc7fc 100644
--- a/src/test/org/apache/sqoop/manager/netezza/NetezzaImportManualTest.java
+++ b/src/test/org/apache/sqoop/manager/netezza/NetezzaImportManualTest.java
@@ -35,6 +35,8 @@
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.io.IOUtils;
 import org.apache.sqoop.manager.NetezzaManager;
+import org.apache.sqoop.testcategories.sqooptest.ManualTest;
+import org.apache.sqoop.testcategories.thirdpartytest.NetezzaTest;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -44,6 +46,7 @@
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ImportJobTestCase;
 import org.apache.sqoop.util.FileListing;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -60,6 +63,7 @@
  * this manually with -Dtestcase=NetezzaImportManualTest.
  *
  */
+@Category({ManualTest.class, NetezzaTest.class})
 public class NetezzaImportManualTest extends ImportJobTestCase {
 
   public static final Log LOG = LogFactory.
diff --git a/src/test/org/apache/sqoop/manager/oracle/OraOopDataDrivenDBInputFormatConnectionCloseTest.java b/src/test/org/apache/sqoop/manager/oracle/OraOopDataDrivenDBInputFormatConnectionCloseTest.java
index bb33c35..c20b8b6 100644
--- a/src/test/org/apache/sqoop/manager/oracle/OraOopDataDrivenDBInputFormatConnectionCloseTest.java
+++ b/src/test/org/apache/sqoop/manager/oracle/OraOopDataDrivenDBInputFormatConnectionCloseTest.java
@@ -21,8 +21,11 @@
 import org.apache.sqoop.mapreduce.db.DBConfiguration;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.mapreduce.JobContext;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
+import org.apache.sqoop.testcategories.thirdpartytest.OracleTest;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import java.io.IOException;
 import java.sql.Connection;
@@ -37,6 +40,7 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+@Category({UnitTest.class, OracleTest.class})
 public class OraOopDataDrivenDBInputFormatConnectionCloseTest {
 
   private static final OraOopLog LOG = OraOopLogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/oracle/OraOopTestCase.java b/src/test/org/apache/sqoop/manager/oracle/OraOopTestCase.java
index 1bae71c..1598813 100644
--- a/src/test/org/apache/sqoop/manager/oracle/OraOopTestCase.java
+++ b/src/test/org/apache/sqoop/manager/oracle/OraOopTestCase.java
@@ -44,12 +44,16 @@
 
 import org.apache.sqoop.Sqoop;
 import org.apache.sqoop.manager.oracle.util.OracleUtils;
+import org.apache.sqoop.testcategories.sqooptest.IntegrationTest;
+import org.apache.sqoop.testcategories.thirdpartytest.OracleTest;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 
 /**
  * Base test case for OraOop to handle common functions.
  */
+@Category({IntegrationTest.class, OracleTest.class})
 public abstract class OraOopTestCase {
 
   private static final OraOopLog LOG = OraOopLogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/oracle/OracleCallExportTest.java b/src/test/org/apache/sqoop/manager/oracle/OracleCallExportTest.java
index 6d6602a..bc93ebf 100644
--- a/src/test/org/apache/sqoop/manager/oracle/OracleCallExportTest.java
+++ b/src/test/org/apache/sqoop/manager/oracle/OracleCallExportTest.java
@@ -36,13 +36,16 @@
 
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.manager.oracle.util.OracleUtils;
+import org.apache.sqoop.testcategories.thirdpartytest.OracleTest;
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ExportJobTestCase;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test free form query import with the MySQL db.
  */
+@Category(OracleTest.class)
 public class OracleCallExportTest extends ExportJobTestCase {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/oracle/OracleColumnEscapeImportTest.java b/src/test/org/apache/sqoop/manager/oracle/OracleColumnEscapeImportTest.java
index 684586c..6a26a6e 100644
--- a/src/test/org/apache/sqoop/manager/oracle/OracleColumnEscapeImportTest.java
+++ b/src/test/org/apache/sqoop/manager/oracle/OracleColumnEscapeImportTest.java
@@ -20,6 +20,7 @@
 
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.manager.oracle.util.OracleUtils;
+import org.apache.sqoop.testcategories.thirdpartytest.OracleTest;
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ImportJobTestCase;
 import com.google.common.base.Charsets;
@@ -30,6 +31,7 @@
 import org.apache.hadoop.fs.Path;
 import org.junit.After;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import java.io.File;
 import java.io.IOException;
@@ -38,6 +40,7 @@
 
 import static org.junit.Assert.assertEquals;
 
+@Category(OracleTest.class)
 public class OracleColumnEscapeImportTest extends ImportJobTestCase {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/oracle/OracleCompatTest.java b/src/test/org/apache/sqoop/manager/oracle/OracleCompatTest.java
index 553096a..3878fc8 100644
--- a/src/test/org/apache/sqoop/manager/oracle/OracleCompatTest.java
+++ b/src/test/org/apache/sqoop/manager/oracle/OracleCompatTest.java
@@ -28,14 +28,17 @@
 
 import org.apache.hadoop.conf.Configuration;
 import org.apache.sqoop.SqoopOptions;
+import org.apache.sqoop.testcategories.thirdpartytest.OracleTest;
 import org.apache.sqoop.testutil.ManagerCompatTestCase;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.fail;
 
 /**
  * Test the basic Oracle connection manager with the various column types.
  */
+@Category(OracleTest.class)
 public class OracleCompatTest extends ManagerCompatTestCase {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/oracle/OracleExportTest.java b/src/test/org/apache/sqoop/manager/oracle/OracleExportTest.java
index a880af3..c096fe4 100644
--- a/src/test/org/apache/sqoop/manager/oracle/OracleExportTest.java
+++ b/src/test/org/apache/sqoop/manager/oracle/OracleExportTest.java
@@ -27,12 +27,14 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.util.StringUtils;
 import org.apache.sqoop.manager.OracleManager;
+import org.apache.sqoop.testcategories.thirdpartytest.OracleTest;
 import org.junit.After;
 import org.junit.Before;
 
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.TestExport;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.fail;
 
@@ -41,6 +43,7 @@
  * This tests the OracleExportOutputFormat (which subclasses
  * ExportOutputFormat with Oracle-specific SQL statements).
  */
+@Category(OracleTest.class)
 public class OracleExportTest extends TestExport {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/oracle/OracleFreeFormQueryTest.java b/src/test/org/apache/sqoop/manager/oracle/OracleFreeFormQueryTest.java
index bb3e7c4..0efcb1b 100644
--- a/src/test/org/apache/sqoop/manager/oracle/OracleFreeFormQueryTest.java
+++ b/src/test/org/apache/sqoop/manager/oracle/OracleFreeFormQueryTest.java
@@ -27,10 +27,13 @@
 
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.TestFreeFormQueryImport;
+import org.apache.sqoop.testcategories.thirdpartytest.OracleTest;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test free form query import with the Oracle db.
  */
+@Category(OracleTest.class)
 public class OracleFreeFormQueryTest extends TestFreeFormQueryImport {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/oracle/OracleIncrementalImportTest.java b/src/test/org/apache/sqoop/manager/oracle/OracleIncrementalImportTest.java
index 8e6ccc9..86505d2 100644
--- a/src/test/org/apache/sqoop/manager/oracle/OracleIncrementalImportTest.java
+++ b/src/test/org/apache/sqoop/manager/oracle/OracleIncrementalImportTest.java
@@ -20,6 +20,7 @@
 
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.manager.oracle.util.OracleUtils;
+import org.apache.sqoop.testcategories.thirdpartytest.OracleTest;
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ImportJobTestCase;
 import org.apache.commons.logging.Log;
@@ -31,6 +32,7 @@
 import org.apache.hadoop.io.IOUtils;
 import org.junit.After;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import java.io.BufferedReader;
 import java.io.BufferedWriter;
@@ -49,6 +51,7 @@
 /**
  * Test free form query import with the Oracle db.
  */
+@Category(OracleTest.class)
 public class OracleIncrementalImportTest extends ImportJobTestCase {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/oracle/OracleLobAvroImportTest.java b/src/test/org/apache/sqoop/manager/oracle/OracleLobAvroImportTest.java
index 525ccf4..95b2396 100644
--- a/src/test/org/apache/sqoop/manager/oracle/OracleLobAvroImportTest.java
+++ b/src/test/org/apache/sqoop/manager/oracle/OracleLobAvroImportTest.java
@@ -28,13 +28,16 @@
 import org.apache.hadoop.conf.Configuration;
 
 import org.apache.sqoop.SqoopOptions;
+import org.apache.sqoop.testcategories.thirdpartytest.OracleTest;
 import org.apache.sqoop.testutil.LobAvroImportTestCase;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.fail;
 
 /**
  * Tests BLOB/CLOB import for Avro with Oracle Db.
  */
+@Category(OracleTest.class)
 public class OracleLobAvroImportTest extends LobAvroImportTestCase {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/oracle/OracleManagerTest.java b/src/test/org/apache/sqoop/manager/oracle/OracleManagerTest.java
index 9251f02..8a5b3cc 100644
--- a/src/test/org/apache/sqoop/manager/oracle/OracleManagerTest.java
+++ b/src/test/org/apache/sqoop/manager/oracle/OracleManagerTest.java
@@ -39,6 +39,7 @@
 import org.apache.sqoop.manager.oracle.util.OracleUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.sqoop.testcategories.thirdpartytest.OracleTest;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
@@ -52,6 +53,7 @@
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ImportJobTestCase;
 import org.apache.sqoop.util.FileListing;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -101,6 +103,7 @@
  * ALTER SYSTEM SET processes=200 scope=spfile;
  * ... then restart your database.
  */
+@Category(OracleTest.class)
 public class OracleManagerTest extends ImportJobTestCase {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/oracle/OracleSpecialCharacterTableImportTest.java b/src/test/org/apache/sqoop/manager/oracle/OracleSpecialCharacterTableImportTest.java
index 6539e5a..ef09a2e 100644
--- a/src/test/org/apache/sqoop/manager/oracle/OracleSpecialCharacterTableImportTest.java
+++ b/src/test/org/apache/sqoop/manager/oracle/OracleSpecialCharacterTableImportTest.java
@@ -20,6 +20,7 @@
 
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.manager.oracle.util.OracleUtils;
+import org.apache.sqoop.testcategories.thirdpartytest.OracleTest;
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ImportJobTestCase;
 import com.google.common.base.Charsets;
@@ -28,8 +29,10 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.Path;
+import org.apache.sqoop.util.BlockJUnit4ClassRunnerWithParametersFactory;
 import org.junit.After;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 
@@ -42,6 +45,8 @@
 import static org.junit.Assert.assertEquals;
 
 @RunWith(Parameterized.class)
+@Category(OracleTest.class)
+@Parameterized.UseParametersRunnerFactory(BlockJUnit4ClassRunnerWithParametersFactory.class)
 public class OracleSpecialCharacterTableImportTest extends ImportJobTestCase {
 
   @Parameterized.Parameters(name = "tableName = {0}")
diff --git a/src/test/org/apache/sqoop/manager/oracle/OracleSplitterTest.java b/src/test/org/apache/sqoop/manager/oracle/OracleSplitterTest.java
index c2f9532..6d749d4 100644
--- a/src/test/org/apache/sqoop/manager/oracle/OracleSplitterTest.java
+++ b/src/test/org/apache/sqoop/manager/oracle/OracleSplitterTest.java
@@ -20,6 +20,7 @@
 
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.manager.oracle.util.OracleUtils;
+import org.apache.sqoop.testcategories.thirdpartytest.OracleTest;
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ImportJobTestCase;
 import org.apache.commons.logging.Log;
@@ -27,6 +28,7 @@
 import org.apache.commons.io.FileUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import java.io.File;
 import java.io.IOException;
@@ -39,6 +41,7 @@
 /**
  * Test various custom splitters for Oracle.
  */
+@Category(OracleTest.class)
 public class OracleSplitterTest extends ImportJobTestCase {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/postgresql/DirectPostgreSQLExportManualTest.java b/src/test/org/apache/sqoop/manager/postgresql/DirectPostgreSQLExportManualTest.java
index 22b202a..7dd6efc 100644
--- a/src/test/org/apache/sqoop/manager/postgresql/DirectPostgreSQLExportManualTest.java
+++ b/src/test/org/apache/sqoop/manager/postgresql/DirectPostgreSQLExportManualTest.java
@@ -29,8 +29,11 @@
 import org.apache.hadoop.mapred.JobConf;
 import org.apache.sqoop.TestExport;
 import org.apache.sqoop.mapreduce.db.DBConfiguration;
+import org.apache.sqoop.testcategories.sqooptest.ManualTest;
+import org.apache.sqoop.testcategories.thirdpartytest.PostgresqlTest;
 import org.junit.Ignore;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 
 /**
@@ -53,6 +56,7 @@
  * $ psql -U sqooptest sqooptest
  *
  */
+@Category({ManualTest.class, PostgresqlTest.class})
 public class DirectPostgreSQLExportManualTest extends TestExport {
 
   public static final Log LOG =
diff --git a/src/test/org/apache/sqoop/manager/postgresql/PGBulkloadManagerManualTest.java b/src/test/org/apache/sqoop/manager/postgresql/PGBulkloadManagerManualTest.java
index 8855316..1fe2644 100644
--- a/src/test/org/apache/sqoop/manager/postgresql/PGBulkloadManagerManualTest.java
+++ b/src/test/org/apache/sqoop/manager/postgresql/PGBulkloadManagerManualTest.java
@@ -28,10 +28,13 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.mapred.JobConf;
+import org.apache.sqoop.testcategories.sqooptest.ManualTest;
+import org.apache.sqoop.testcategories.thirdpartytest.PostgresqlTest;
 import org.junit.Test;
 
 import org.apache.sqoop.TestExport;
 import org.apache.sqoop.mapreduce.db.DBConfiguration;
+import org.junit.experimental.categories.Category;
 
 
 /**
@@ -62,6 +65,7 @@
  * sqooptest=# \q
  *
  */
+@Category({ManualTest.class, PostgresqlTest.class})
 public class PGBulkloadManagerManualTest extends TestExport {
 
   public static final Log LOG =
diff --git a/src/test/org/apache/sqoop/manager/postgresql/PostgresqlExportTest.java b/src/test/org/apache/sqoop/manager/postgresql/PostgresqlExportTest.java
index f86b119..eb798fa 100644
--- a/src/test/org/apache/sqoop/manager/postgresql/PostgresqlExportTest.java
+++ b/src/test/org/apache/sqoop/manager/postgresql/PostgresqlExportTest.java
@@ -18,6 +18,7 @@
 package org.apache.sqoop.manager.postgresql;
 
 import org.apache.sqoop.SqoopOptions;
+import org.apache.sqoop.testcategories.thirdpartytest.PostgresqlTest;
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ExportJobTestCase;
 import org.apache.commons.logging.Log;
@@ -26,6 +27,7 @@
 import org.apache.sqoop.manager.PostgresqlManager;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import java.io.BufferedWriter;
 import java.io.File;
@@ -45,6 +47,7 @@
 /**
  *
  */
+@Category(PostgresqlTest.class)
 public class PostgresqlExportTest extends ExportJobTestCase {
   public static final Log LOG = LogFactory.getLog(
       PostgresqlExportTest.class.getName());
diff --git a/src/test/org/apache/sqoop/manager/postgresql/PostgresqlExternalTableImportTest.java b/src/test/org/apache/sqoop/manager/postgresql/PostgresqlExternalTableImportTest.java
index dd4cfb4..8c3d2fd 100644
--- a/src/test/org/apache/sqoop/manager/postgresql/PostgresqlExternalTableImportTest.java
+++ b/src/test/org/apache/sqoop/manager/postgresql/PostgresqlExternalTableImportTest.java
@@ -38,6 +38,7 @@
 import org.apache.hadoop.io.IOUtils;
 import org.apache.sqoop.manager.ConnManager;
 import org.apache.sqoop.manager.PostgresqlManager;
+import org.apache.sqoop.testcategories.thirdpartytest.PostgresqlTest;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -46,7 +47,9 @@
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ImportJobTestCase;
 import org.apache.sqoop.util.FileListing;
+import org.junit.experimental.categories.Category;
 
+@Category(PostgresqlTest.class)
 public class PostgresqlExternalTableImportTest extends ImportJobTestCase {
 
   public static final Log LOG = LogFactory
diff --git a/src/test/org/apache/sqoop/manager/postgresql/PostgresqlImportTest.java b/src/test/org/apache/sqoop/manager/postgresql/PostgresqlImportTest.java
index b8aa17b..64d4089 100644
--- a/src/test/org/apache/sqoop/manager/postgresql/PostgresqlImportTest.java
+++ b/src/test/org/apache/sqoop/manager/postgresql/PostgresqlImportTest.java
@@ -31,6 +31,7 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.sqoop.testcategories.thirdpartytest.PostgresqlTest;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -44,6 +45,7 @@
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ImportJobTestCase;
 import org.apache.sqoop.util.FileListing;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -87,6 +89,7 @@
  * template1=&gt; \q
  *
  */
+@Category(PostgresqlTest.class)
 public class PostgresqlImportTest extends ImportJobTestCase {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerDatatypeExportDelimitedFileTest.java b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerDatatypeExportDelimitedFileTest.java
index 9b70af1..e1a91e6 100644
--- a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerDatatypeExportDelimitedFileTest.java
+++ b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerDatatypeExportDelimitedFileTest.java
@@ -23,6 +23,8 @@
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
 import org.apache.sqoop.manager.sqlserver.MSSQLTestDataFileParser.DATATYPES;
+import org.apache.sqoop.testcategories.thirdpartytest.SqlServerTest;
+import org.junit.experimental.categories.Category;
 
 import java.io.OutputStream;
 import java.io.OutputStreamWriter;
@@ -50,6 +52,7 @@
  *   Set these through -Dsqoop.test.sqlserver.connectstring.host_url, -Dsqoop.test.sqlserver.database and
  *   -Dms.sqlserver.password
  */
+@Category(SqlServerTest.class)
 public class SQLServerDatatypeExportDelimitedFileTest
     extends ManagerCompatExport {
 
diff --git a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerDatatypeExportSequenceFileTest.java b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerDatatypeExportSequenceFileTest.java
index 293da00..9820346 100644
--- a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerDatatypeExportSequenceFileTest.java
+++ b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerDatatypeExportSequenceFileTest.java
@@ -34,8 +34,10 @@
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.lib.RecordParser;
 import org.apache.sqoop.lib.SqoopRecord;
+import org.apache.sqoop.testcategories.thirdpartytest.SqlServerTest;
 import org.apache.sqoop.tool.CodeGenTool;
 import org.apache.sqoop.util.ClassLoaderStack;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
@@ -63,6 +65,7 @@
  *   Set these through -Dsqoop.test.sqlserver.connectstring.host_url, -Dsqoop.test.sqlserver.database and
  *   -Dms.sqlserver.password
  */
+@Category(SqlServerTest.class)
 public class SQLServerDatatypeExportSequenceFileTest
     extends ManagerCompatExport {
 
diff --git a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerDatatypeImportDelimitedFileTest.java b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerDatatypeImportDelimitedFileTest.java
index 520c4ac..225f6a0 100644
--- a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerDatatypeImportDelimitedFileTest.java
+++ b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerDatatypeImportDelimitedFileTest.java
@@ -34,11 +34,13 @@
 import org.apache.sqoop.Sqoop;
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.orm.CompilationManager;
+import org.apache.sqoop.testcategories.thirdpartytest.SqlServerTest;
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.tool.ImportTool;
 import org.apache.sqoop.util.ClassLoaderStack;
 import org.junit.Ignore;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
@@ -65,6 +67,7 @@
  *   Set these through -Dsqoop.test.sqlserver.connectstring.host_url, -Dsqoop.test.sqlserver.database and
  *   -Dms.sqlserver.password
  */
+@Category(SqlServerTest.class)
 public class SQLServerDatatypeImportDelimitedFileTest
   extends SQLServerDatatypeImportSequenceFileTest {
 
diff --git a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerDatatypeImportSequenceFileTest.java b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerDatatypeImportSequenceFileTest.java
index 592a78f..5745664 100644
--- a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerDatatypeImportSequenceFileTest.java
+++ b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerDatatypeImportSequenceFileTest.java
@@ -30,6 +30,7 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.util.StringUtils;
+import org.apache.sqoop.testcategories.thirdpartytest.SqlServerTest;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -37,6 +38,7 @@
 import org.apache.sqoop.testutil.ManagerCompatTestCase;
 import org.apache.sqoop.manager.sqlserver.MSSQLTestDataFileParser.DATATYPES;
 import org.apache.sqoop.manager.sqlserver.MSSQLTestData.KEY_STRINGS;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
@@ -63,6 +65,7 @@
  *   Set these through -Dsqoop.test.sqlserver.connectstring.host_url, -Dsqoop.test.sqlserver.database and
  *   -Dms.sqlserver.password
  */
+@Category(SqlServerTest.class)
 public class SQLServerDatatypeImportSequenceFileTest extends
     ManagerCompatTestCase {
 
diff --git a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerHiveImportTest.java b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerHiveImportTest.java
index e6b0865..3c6aad6 100644
--- a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerHiveImportTest.java
+++ b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerHiveImportTest.java
@@ -28,10 +28,12 @@
 
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.hive.TestHiveImport;
+import org.apache.sqoop.testcategories.thirdpartytest.SqlServerTest;
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.tool.SqoopTool;
 import org.junit.After;
 import org.junit.Before;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.fail;
 
@@ -57,6 +59,7 @@
  *   Set these through -Dsqoop.test.sqlserver.connectstring.host_url, -Dsqoop.test.sqlserver.database and
  *   -Dms.sqlserver.password
  */
+@Category(SqlServerTest.class)
 public class SQLServerHiveImportTest extends TestHiveImport {
 
   @Before
diff --git a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerManagerExportTest.java b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerManagerExportTest.java
index b7c2b75..ab1e8ff 100644
--- a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerManagerExportTest.java
+++ b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerManagerExportTest.java
@@ -19,6 +19,7 @@
 
 import org.apache.sqoop.ConnFactory;
 import org.apache.sqoop.SqoopOptions;
+import org.apache.sqoop.testcategories.thirdpartytest.SqlServerTest;
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -28,6 +29,7 @@
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import java.io.BufferedWriter;
 import java.io.File;
@@ -46,6 +48,7 @@
 /**
  * Please see instructions in SQLServerManagerImportTest.
  */
+@Category(SqlServerTest.class)
 public class SQLServerManagerExportTest extends ExportJobTestCase {
 
     public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerManagerImportTest.java b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerManagerImportTest.java
index 79e37f0..ea7942f 100644
--- a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerManagerImportTest.java
+++ b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerManagerImportTest.java
@@ -26,14 +26,17 @@
 import org.apache.sqoop.ConnFactory;
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.manager.SQLServerManager;
+import org.apache.sqoop.testcategories.thirdpartytest.SqlServerTest;
 import org.apache.sqoop.testutil.ArgumentArrayBuilder;
 import org.apache.sqoop.testutil.ImportJobTestCase;
+import org.apache.sqoop.util.BlockJUnit4ClassRunnerWithParametersFactory;
 import org.apache.sqoop.util.ExpectedLogMessage;
 import org.apache.sqoop.util.FileListing;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameters;
@@ -53,6 +56,7 @@
 import static org.junit.Assert.fail;
 
 @RunWith(Parameterized.class)
+@Parameterized.UseParametersRunnerFactory(BlockJUnit4ClassRunnerWithParametersFactory.class)
 /**
  * Test the SQLServerManager implementation.
  *
@@ -75,6 +79,7 @@
  *   Set these through -Dsqoop.test.sqlserver.connectstring.host_url, -Dsqoop.test.sqlserver.database and
  *   -Dms.sqlserver.password
  */
+@Category(SqlServerTest.class)
 public class SQLServerManagerImportTest extends ImportJobTestCase {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerManagerTest.java b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerManagerTest.java
index fdf856b..04403bc 100644
--- a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerManagerTest.java
+++ b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerManagerTest.java
@@ -30,6 +30,8 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.util.StringUtils;
+import org.apache.sqoop.testcategories.sqooptest.IntegrationTest;
+import org.apache.sqoop.testcategories.thirdpartytest.SqlServerTest;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -40,6 +42,7 @@
 import org.apache.sqoop.testutil.HsqldbTestServer;
 import org.apache.sqoop.tool.ImportTool;
 import org.apache.sqoop.tool.SqoopTool;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
@@ -68,6 +71,7 @@
  *   Set these through -Dsqoop.test.sqlserver.connectstring.host_url, -Dsqoop.test.sqlserver.database and
  *   -Dms.sqlserver.password
  */
+@Category({IntegrationTest.class, SqlServerTest.class})
 public class SQLServerManagerTest {
 
   public static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerMultiColsTest.java b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerMultiColsTest.java
index fb765fb..26f966b 100644
--- a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerMultiColsTest.java
+++ b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerMultiColsTest.java
@@ -25,8 +25,10 @@
 
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.TestMultiCols;
+import org.apache.sqoop.testcategories.thirdpartytest.SqlServerTest;
 import org.junit.After;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test multiple columns in SQL Server.
@@ -50,6 +52,7 @@
  *   Set these through -Dsqoop.test.sqlserver.connectstring.host_url, -Dsqoop.test.sqlserver.database and
  *   -Dms.sqlserver.password
  */
+@Category(SqlServerTest.class)
 public class SQLServerMultiColsTest extends TestMultiCols {
 
   protected boolean useHsqldbTestServer() {
diff --git a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerMultiMapsTest.java b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerMultiMapsTest.java
index 5e89cc9..a1da99f 100644
--- a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerMultiMapsTest.java
+++ b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerMultiMapsTest.java
@@ -39,6 +39,7 @@
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.SqoopOptions.InvalidOptionsException;
 import org.apache.sqoop.orm.CompilationManager;
+import org.apache.sqoop.testcategories.thirdpartytest.SqlServerTest;
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ImportJobTestCase;
 import org.apache.sqoop.testutil.SeqFileReader;
@@ -48,6 +49,7 @@
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
@@ -74,6 +76,7 @@
  *   Set these through -Dsqoop.test.sqlserver.connectstring.host_url, -Dsqoop.test.sqlserver.database and
  *   -Dms.sqlserver.password
  */
+@Category(SqlServerTest.class)
 public class SQLServerMultiMapsTest extends ImportJobTestCase {
 
   @Before
diff --git a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerParseMethodsTest.java b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerParseMethodsTest.java
index fbd8d96..94bbcc0 100644
--- a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerParseMethodsTest.java
+++ b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerParseMethodsTest.java
@@ -40,6 +40,7 @@
 import org.apache.sqoop.SqoopOptions.InvalidOptionsException;
 import org.apache.sqoop.config.ConfigurationHelper;
 import org.apache.sqoop.orm.CompilationManager;
+import org.apache.sqoop.testcategories.thirdpartytest.SqlServerTest;
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ImportJobTestCase;
 import org.apache.sqoop.testutil.ReparseMapper;
@@ -48,6 +49,7 @@
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.fail;
 
@@ -74,6 +76,7 @@
  *   Set these through -Dsqoop.test.sqlserver.connectstring.host_url, -Dsqoop.test.sqlserver.database and
  *   -Dms.sqlserver.password
  */
+@Category(SqlServerTest.class)
 public class SQLServerParseMethodsTest extends ImportJobTestCase {
 
   @Before
diff --git a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerQueryTest.java b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerQueryTest.java
index e0c8d67..d929a4c 100644
--- a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerQueryTest.java
+++ b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerQueryTest.java
@@ -34,6 +34,7 @@
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.SqoopOptions.InvalidOptionsException;
 import org.apache.sqoop.orm.CompilationManager;
+import org.apache.sqoop.testcategories.thirdpartytest.SqlServerTest;
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ImportJobTestCase;
 import org.apache.sqoop.testutil.SeqFileReader;
@@ -42,6 +43,7 @@
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
@@ -68,6 +70,7 @@
  *   Set these through -Dsqoop.test.sqlserver.connectstring.host_url, -Dsqoop.test.sqlserver.database and
  *   -Dms.sqlserver.password
  */
+@Category(SqlServerTest.class)
 public class SQLServerQueryTest extends ImportJobTestCase {
 
   @Before
diff --git a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerSplitByTest.java b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerSplitByTest.java
index a1c2201..eb83e8e 100644
--- a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerSplitByTest.java
+++ b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerSplitByTest.java
@@ -34,6 +34,7 @@
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.SqoopOptions.InvalidOptionsException;
 import org.apache.sqoop.orm.CompilationManager;
+import org.apache.sqoop.testcategories.thirdpartytest.SqlServerTest;
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ImportJobTestCase;
 import org.apache.sqoop.testutil.SeqFileReader;
@@ -42,6 +43,7 @@
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
@@ -68,6 +70,7 @@
  *   Set these through -Dsqoop.test.sqlserver.connectstring.host_url, -Dsqoop.test.sqlserver.database and
  *   -Dms.sqlserver.password
  */
+@Category(SqlServerTest.class)
 public class SQLServerSplitByTest extends ImportJobTestCase {
 
   @Before
diff --git a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerWhereTest.java b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerWhereTest.java
index 11d0963..e6cb7f8 100644
--- a/src/test/org/apache/sqoop/manager/sqlserver/SQLServerWhereTest.java
+++ b/src/test/org/apache/sqoop/manager/sqlserver/SQLServerWhereTest.java
@@ -34,6 +34,7 @@
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.SqoopOptions.InvalidOptionsException;
 import org.apache.sqoop.orm.CompilationManager;
+import org.apache.sqoop.testcategories.thirdpartytest.SqlServerTest;
 import org.apache.sqoop.testutil.CommonArgs;
 import org.apache.sqoop.testutil.ImportJobTestCase;
 import org.apache.sqoop.testutil.SeqFileReader;
@@ -42,6 +43,7 @@
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
@@ -68,6 +70,7 @@
  *   Set these through -Dsqoop.test.sqlserver.connectstring.host_url, -Dsqoop.test.sqlserver.database and
  *   -Dms.sqlserver.password
  */
+@Category(SqlServerTest.class)
 public class SQLServerWhereTest extends ImportJobTestCase {
 
  @Before
diff --git a/src/test/org/apache/sqoop/manager/sqlserver/TestSqlServerManagerContextConfigurator.java b/src/test/org/apache/sqoop/manager/sqlserver/TestSqlServerManagerContextConfigurator.java
index c0d0a24..7087d19 100644
--- a/src/test/org/apache/sqoop/manager/sqlserver/TestSqlServerManagerContextConfigurator.java
+++ b/src/test/org/apache/sqoop/manager/sqlserver/TestSqlServerManagerContextConfigurator.java
@@ -31,14 +31,17 @@
 import org.apache.sqoop.mapreduce.db.DataDrivenDBInputFormat;
 import org.apache.sqoop.mapreduce.db.SQLServerDBInputFormat;
 import org.apache.sqoop.mapreduce.sqlserver.SqlServerExportBatchOutputFormat;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
 /**
  * Test methods in the configuration utilities.
  */
+@Category(UnitTest.class)
 public class TestSqlServerManagerContextConfigurator {
 
   public static final Log LOG = LogFactory.getLog(TestSqlServerManagerContextConfigurator.class.getName());
diff --git a/src/test/org/apache/sqoop/mapreduce/TestJdbcExportJob.java b/src/test/org/apache/sqoop/mapreduce/TestJdbcExportJob.java
index 81ab677..f849548 100644
--- a/src/test/org/apache/sqoop/mapreduce/TestJdbcExportJob.java
+++ b/src/test/org/apache/sqoop/mapreduce/TestJdbcExportJob.java
@@ -37,16 +37,19 @@
 import org.apache.hadoop.mapreduce.Job;
 import org.apache.sqoop.mapreduce.ExportJobBase.FileType;
 import org.apache.sqoop.mapreduce.parquet.ParquetExportJobConfigurator;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Test;
 
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.manager.ConnManager;
 import org.apache.sqoop.manager.ExportJobContext;
+import org.junit.experimental.categories.Category;
 
 
 /**
  * Test methods of the JdbcExportJob implementation.
  */
+@Category(UnitTest.class)
 public class TestJdbcExportJob {
 
   @Test
diff --git a/src/test/org/apache/sqoop/mapreduce/TestJobBase.java b/src/test/org/apache/sqoop/mapreduce/TestJobBase.java
index e1781bb..7b5684d 100644
--- a/src/test/org/apache/sqoop/mapreduce/TestJobBase.java
+++ b/src/test/org/apache/sqoop/mapreduce/TestJobBase.java
@@ -28,11 +28,14 @@
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.mapreduce.Job;
 import org.apache.sqoop.config.ConfigurationConstants;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Before;
 import org.junit.Test;
 
 import org.apache.sqoop.SqoopOptions;
+import org.junit.experimental.categories.Category;
 
+@Category(UnitTest.class)
 public class TestJobBase {
 
   SqoopOptions options;
diff --git a/src/test/org/apache/sqoop/mapreduce/db/TestBigDecimalSplitter.java b/src/test/org/apache/sqoop/mapreduce/db/TestBigDecimalSplitter.java
index 951a3dc..bf90166 100644
--- a/src/test/org/apache/sqoop/mapreduce/db/TestBigDecimalSplitter.java
+++ b/src/test/org/apache/sqoop/mapreduce/db/TestBigDecimalSplitter.java
@@ -20,10 +20,13 @@
 
 import java.math.BigDecimal;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 
+@Category(UnitTest.class)
 public class TestBigDecimalSplitter {
 
   /* Test if the decimal split sizes are generated as expected */
diff --git a/src/test/org/apache/sqoop/mapreduce/db/TestDBConfiguration.java b/src/test/org/apache/sqoop/mapreduce/db/TestDBConfiguration.java
index 3160db9..c45786c 100644
--- a/src/test/org/apache/sqoop/mapreduce/db/TestDBConfiguration.java
+++ b/src/test/org/apache/sqoop/mapreduce/db/TestDBConfiguration.java
@@ -20,13 +20,16 @@
 
 import java.util.Properties;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 
 /**
  * Test aspects of DBConfiguration.
  */
+@Category(UnitTest.class)
 public class TestDBConfiguration {
 
   @Test
diff --git a/src/test/org/apache/sqoop/mapreduce/db/TestDataDrivenDBInputFormat.java b/src/test/org/apache/sqoop/mapreduce/db/TestDataDrivenDBInputFormat.java
index 9e538fd..3214491 100644
--- a/src/test/org/apache/sqoop/mapreduce/db/TestDataDrivenDBInputFormat.java
+++ b/src/test/org/apache/sqoop/mapreduce/db/TestDataDrivenDBInputFormat.java
@@ -35,11 +35,13 @@
 import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
 import org.apache.hadoop.util.StringUtils;
 import org.apache.sqoop.mapreduce.DBWritable;
+import org.apache.sqoop.testcategories.sqooptest.IntegrationTest;
 import org.apache.sqoop.mapreduce.db.DataDrivenDBInputFormat;
 import org.apache.sqoop.mapreduce.db.DBConfiguration;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -47,6 +49,7 @@
 /**
  * Test aspects of DataDrivenDBInputFormat.
  */
+@Category(IntegrationTest.class)
 public class TestDataDrivenDBInputFormat {
 
   private static final Log LOG = LogFactory.getLog(
diff --git a/src/test/org/apache/sqoop/mapreduce/db/TestIntegerSplitter.java b/src/test/org/apache/sqoop/mapreduce/db/TestIntegerSplitter.java
index b43fc41..8e82862 100644
--- a/src/test/org/apache/sqoop/mapreduce/db/TestIntegerSplitter.java
+++ b/src/test/org/apache/sqoop/mapreduce/db/TestIntegerSplitter.java
@@ -20,7 +20,9 @@
 import java.sql.SQLException;
 import java.util.List;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
@@ -28,6 +30,7 @@
 /**
  * Test that the IntegerSplitter generates sane splits.
  */
+@Category(UnitTest.class)
 public class TestIntegerSplitter {
   private long [] toLongArray(List<Long> in) {
     long [] out = new long[in.size()];
diff --git a/src/test/org/apache/sqoop/mapreduce/db/TestSQLServerDBRecordReader.java b/src/test/org/apache/sqoop/mapreduce/db/TestSQLServerDBRecordReader.java
index 70187b1..ebbd276 100644
--- a/src/test/org/apache/sqoop/mapreduce/db/TestSQLServerDBRecordReader.java
+++ b/src/test/org/apache/sqoop/mapreduce/db/TestSQLServerDBRecordReader.java
@@ -27,8 +27,10 @@
 import org.apache.hadoop.mapreduce.InputSplit;
 import org.apache.hadoop.mapreduce.TaskAttemptContext;
 import org.apache.sqoop.lib.SqoopRecord;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
 
@@ -51,6 +53,7 @@
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
 
+@Category(UnitTest.class)
 public class TestSQLServerDBRecordReader {
 
   private static final String SPLIT_BY_COLUMN = "myCol";
diff --git a/src/test/org/apache/sqoop/mapreduce/db/TestTextSplitter.java b/src/test/org/apache/sqoop/mapreduce/db/TestTextSplitter.java
index 5d9cdf0..bb92540 100644
--- a/src/test/org/apache/sqoop/mapreduce/db/TestTextSplitter.java
+++ b/src/test/org/apache/sqoop/mapreduce/db/TestTextSplitter.java
@@ -21,6 +21,7 @@
 import java.sql.SQLException;
 import java.util.List;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.apache.sqoop.validation.ValidationException;
 import org.junit.Test;
 
@@ -28,12 +29,14 @@
 import static org.junit.Assert.fail;
 import org.junit.Rule;
 
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 
 
 /**
  * Test that the TextSplitter implementation creates a sane set of splits.
  */
+@Category(UnitTest.class)
 public class TestTextSplitter {
 
   @Rule
diff --git a/src/test/org/apache/sqoop/mapreduce/db/TextSplitterHadoopConfIntegrationTest.java b/src/test/org/apache/sqoop/mapreduce/db/TextSplitterHadoopConfIntegrationTest.java
index 9eb8922..8b326a6 100644
--- a/src/test/org/apache/sqoop/mapreduce/db/TextSplitterHadoopConfIntegrationTest.java
+++ b/src/test/org/apache/sqoop/mapreduce/db/TextSplitterHadoopConfIntegrationTest.java
@@ -23,16 +23,19 @@
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.mapreduce.InputSplit;
 import org.apache.hadoop.mapreduce.Job;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.apache.sqoop.validation.ValidationException;
 
 import org.apache.sqoop.testutil.MockResultSet;
 
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 
 import static org.junit.Assert.assertFalse;
 
+@Category(UnitTest.class)
 public class TextSplitterHadoopConfIntegrationTest {
   private static final String TEXT_COL_NAME = "text_col_name";
 
diff --git a/src/test/org/apache/sqoop/mapreduce/hcat/TestSqoopHCatImportHelper.java b/src/test/org/apache/sqoop/mapreduce/hcat/TestSqoopHCatImportHelper.java
index 3f734ea..0bc32c0 100644
--- a/src/test/org/apache/sqoop/mapreduce/hcat/TestSqoopHCatImportHelper.java
+++ b/src/test/org/apache/sqoop/mapreduce/hcat/TestSqoopHCatImportHelper.java
@@ -19,13 +19,16 @@
 package org.apache.sqoop.mapreduce.hcat;
 
 import org.apache.hadoop.hive.common.type.HiveDecimal;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import java.math.BigDecimal;
 
 import static org.junit.Assert.assertEquals;
 
+@Category(UnitTest.class)
 public class TestSqoopHCatImportHelper {
 
   private SqoopHCatImportHelper importHelper;
diff --git a/src/test/org/apache/sqoop/mapreduce/hcat/TestSqoopHCatUtilities.java b/src/test/org/apache/sqoop/mapreduce/hcat/TestSqoopHCatUtilities.java
index dff11f1..3980155 100644
--- a/src/test/org/apache/sqoop/mapreduce/hcat/TestSqoopHCatUtilities.java
+++ b/src/test/org/apache/sqoop/mapreduce/hcat/TestSqoopHCatUtilities.java
@@ -23,9 +23,12 @@
 
 import java.io.IOException;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
+@Category(UnitTest.class)
 public class TestSqoopHCatUtilities {
 
   private static final String[] VALID_HCAT_ARGS = new String[] {"-h"};
diff --git a/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeDatasetFTPRecordReader.java b/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeDatasetFTPRecordReader.java
index 3547294..502e633 100644
--- a/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeDatasetFTPRecordReader.java
+++ b/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeDatasetFTPRecordReader.java
@@ -45,6 +45,7 @@
 import org.apache.sqoop.lib.SqoopRecord;
 import org.apache.sqoop.mapreduce.DBWritable;
 import org.apache.sqoop.mapreduce.db.DBConfiguration;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.apache.sqoop.util.MainframeFTPClientUtils;
 import org.junit.After;
 import org.junit.Assert;
@@ -53,7 +54,9 @@
 
 import org.apache.sqoop.lib.DelimiterSet;
 import org.apache.sqoop.lib.LargeObjectLoader;
+import org.junit.experimental.categories.Category;
 
+@Category(UnitTest.class)
 public class TestMainframeDatasetFTPRecordReader {
 
   private MainframeImportJob mfImportJob;
diff --git a/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeDatasetInputFormat.java b/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeDatasetInputFormat.java
index efef056..ed61f91 100644
--- a/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeDatasetInputFormat.java
+++ b/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeDatasetInputFormat.java
@@ -37,6 +37,7 @@
 import org.apache.sqoop.lib.SqoopRecord;
 import org.apache.sqoop.mapreduce.db.DBConfiguration;
 import org.apache.sqoop.mapreduce.mainframe.MainframeConfiguration;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.apache.sqoop.util.MainframeFTPClientUtils;
 import org.junit.After;
 import org.junit.Assert;
@@ -44,7 +45,9 @@
 import org.junit.Test;
 
 import org.apache.sqoop.config.ConfigurationHelper;
+import org.junit.experimental.categories.Category;
 
+@Category(UnitTest.class)
 public class TestMainframeDatasetInputFormat {
 
   private MainframeDatasetInputFormat<SqoopRecord> format;
diff --git a/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeDatasetInputSplit.java b/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeDatasetInputSplit.java
index 5d92f6d..174cbaa 100644
--- a/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeDatasetInputSplit.java
+++ b/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeDatasetInputSplit.java
@@ -22,10 +22,13 @@
 
 import org.apache.hadoop.io.DataInputBuffer;
 import org.apache.hadoop.io.DataOutputBuffer;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
+@Category(UnitTest.class)
 public class TestMainframeDatasetInputSplit {
 
   private MainframeDatasetInputSplit mfDatasetInputSplit;
diff --git a/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeDatasetPath.java b/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeDatasetPath.java
index 9b277b2..91bc8f7 100644
--- a/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeDatasetPath.java
+++ b/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeDatasetPath.java
@@ -24,8 +24,11 @@
 import java.text.ParseException;
 
 import org.apache.hadoop.conf.Configuration;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
+@Category(UnitTest.class)
 public class TestMainframeDatasetPath {
 
 	@Test
diff --git a/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeFTPFileEntryParser.java b/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeFTPFileEntryParser.java
index 26ed961..35fcca3 100644
--- a/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeFTPFileEntryParser.java
+++ b/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeFTPFileEntryParser.java
@@ -22,12 +22,15 @@
 import java.util.List;
 
 import org.apache.commons.net.ftp.FTPFile;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
+@Category(UnitTest.class)
 public class TestMainframeFTPFileEntryParser {
 	static List<String> listing;
 	static MainframeFTPFileEntryParser parser2;
diff --git a/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeImportJob.java b/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeImportJob.java
index be62efd..ad90cbe 100644
--- a/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeImportJob.java
+++ b/src/test/org/apache/sqoop/mapreduce/mainframe/TestMainframeImportJob.java
@@ -29,12 +29,15 @@
 import org.apache.hadoop.mapreduce.Job;
 import org.apache.hadoop.mapreduce.Mapper;
 import org.apache.sqoop.mapreduce.parquet.ParquetImportJobConfigurator;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Before;
 import org.junit.Test;
 
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.manager.ImportJobContext;
+import org.junit.experimental.categories.Category;
 
+@Category(UnitTest.class)
 public class TestMainframeImportJob {
 
   private MainframeImportJob mfImportJob;
diff --git a/src/test/org/apache/sqoop/mapreduce/sqlserver/SqlServerUpsertOutputFormatTest.java b/src/test/org/apache/sqoop/mapreduce/sqlserver/SqlServerUpsertOutputFormatTest.java
index a89e800..7b0482a 100644
--- a/src/test/org/apache/sqoop/mapreduce/sqlserver/SqlServerUpsertOutputFormatTest.java
+++ b/src/test/org/apache/sqoop/mapreduce/sqlserver/SqlServerUpsertOutputFormatTest.java
@@ -31,8 +31,11 @@
 import org.apache.sqoop.manager.SQLServerManager;
 import org.apache.sqoop.mapreduce.ExportJobBase;
 import org.apache.sqoop.mapreduce.sqlserver.SqlServerUpsertOutputFormat.SqlServerUpsertRecordWriter;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
+@Category(UnitTest.class)
 public class SqlServerUpsertOutputFormatTest {
 
   @SuppressWarnings("unchecked")
diff --git a/src/test/org/apache/sqoop/metastore/PasswordRedactorTest.java b/src/test/org/apache/sqoop/metastore/PasswordRedactorTest.java
index a2dbc71..35616ce 100644
--- a/src/test/org/apache/sqoop/metastore/PasswordRedactorTest.java
+++ b/src/test/org/apache/sqoop/metastore/PasswordRedactorTest.java
@@ -17,7 +17,9 @@
  */
 package org.apache.sqoop.metastore;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -26,6 +28,7 @@
 import static org.apache.sqoop.metastore.PasswordRedactor.REDACTED_PASSWORD_STRING;
 import static org.junit.Assert.assertEquals;
 
+@Category(UnitTest.class)
 public class PasswordRedactorTest {
 
     @Test
diff --git a/src/test/org/apache/sqoop/metastore/SavedJobsTestBase.java b/src/test/org/apache/sqoop/metastore/SavedJobsTestBase.java
index 9c9b2f4..0bd9ef3 100644
--- a/src/test/org/apache/sqoop/metastore/SavedJobsTestBase.java
+++ b/src/test/org/apache/sqoop/metastore/SavedJobsTestBase.java
@@ -28,6 +28,7 @@
 
 import org.apache.sqoop.manager.ConnManager;
 import org.apache.sqoop.SqoopOptions;
+import org.apache.sqoop.testcategories.sqooptest.IntegrationTest;
 import org.apache.sqoop.tool.VersionTool;
 
 import org.apache.hadoop.conf.Configuration;
@@ -40,6 +41,7 @@
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 
 import java.io.IOException;
@@ -56,6 +58,7 @@
  * Test the metastore and job-handling features,
  * implemented for specific database services in sub-classes.
  */
+@Category(IntegrationTest.class)
 public abstract class SavedJobsTestBase {
 
   public static final String TEST_JOB = "testJob";
diff --git a/src/test/org/apache/sqoop/metastore/TestAutoGenericJobStorage.java b/src/test/org/apache/sqoop/metastore/TestAutoGenericJobStorage.java
index d5424c6..ac67ee5 100644
--- a/src/test/org/apache/sqoop/metastore/TestAutoGenericJobStorage.java
+++ b/src/test/org/apache/sqoop/metastore/TestAutoGenericJobStorage.java
@@ -19,8 +19,10 @@
 package org.apache.sqoop.metastore;
 
 import org.apache.hadoop.conf.Configuration;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -29,6 +31,7 @@
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
+@Category(UnitTest.class)
 public class TestAutoGenericJobStorage {
 
   private AutoGenericJobStorage jobStorage;
diff --git a/src/test/org/apache/sqoop/metastore/TestGenericJobStorage.java b/src/test/org/apache/sqoop/metastore/TestGenericJobStorage.java
index 026fbde..e61fe56 100644
--- a/src/test/org/apache/sqoop/metastore/TestGenericJobStorage.java
+++ b/src/test/org/apache/sqoop/metastore/TestGenericJobStorage.java
@@ -18,9 +18,11 @@
 
 package org.apache.sqoop.metastore;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 
 import java.io.IOException;
@@ -31,6 +33,7 @@
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
+@Category(UnitTest.class)
 public class TestGenericJobStorage {
 
   @Rule
diff --git a/src/test/org/apache/sqoop/metastore/TestGenericJobStorageValidate.java b/src/test/org/apache/sqoop/metastore/TestGenericJobStorageValidate.java
index 9995a42..3cfbc0b 100644
--- a/src/test/org/apache/sqoop/metastore/TestGenericJobStorageValidate.java
+++ b/src/test/org/apache/sqoop/metastore/TestGenericJobStorageValidate.java
@@ -18,9 +18,12 @@
 
 package org.apache.sqoop.metastore;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
+import org.apache.sqoop.util.BlockJUnit4ClassRunnerWithParametersFactory;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -29,6 +32,8 @@
 import java.util.Arrays;
 
 @RunWith(Parameterized.class)
+@Category(UnitTest.class)
+@Parameterized.UseParametersRunnerFactory(BlockJUnit4ClassRunnerWithParametersFactory.class)
 public class TestGenericJobStorageValidate {
 
   @Parameters(name = "metastoreConnectionString = {0}, validationShouldFail = {1}")
diff --git a/src/test/org/apache/sqoop/metastore/TestMetastoreConfigurationParameters.java b/src/test/org/apache/sqoop/metastore/TestMetastoreConfigurationParameters.java
index 5a6fac5..bf75289 100644
--- a/src/test/org/apache/sqoop/metastore/TestMetastoreConfigurationParameters.java
+++ b/src/test/org/apache/sqoop/metastore/TestMetastoreConfigurationParameters.java
@@ -18,6 +18,7 @@
 
 package org.apache.sqoop.metastore;
 
+import org.apache.sqoop.testcategories.sqooptest.IntegrationTest;
 import org.apache.sqoop.testutil.ArgumentArrayBuilder;
 import org.apache.sqoop.testutil.HsqldbTestServer;
 import org.apache.sqoop.Sqoop;
@@ -26,6 +27,7 @@
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import java.io.IOException;
 import java.sql.Connection;
@@ -36,7 +38,7 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
-
+@Category(IntegrationTest.class)
 public class TestMetastoreConfigurationParameters {
 
     private static final int STATUS_FAILURE = 1;
diff --git a/src/test/org/apache/sqoop/metastore/db2/DB2JobToolTest.java b/src/test/org/apache/sqoop/metastore/db2/DB2JobToolTest.java
index b2b1fb6..81ef5fc 100644
--- a/src/test/org/apache/sqoop/metastore/db2/DB2JobToolTest.java
+++ b/src/test/org/apache/sqoop/metastore/db2/DB2JobToolTest.java
@@ -19,6 +19,8 @@
 package org.apache.sqoop.metastore.db2;
 
 import org.apache.sqoop.metastore.JobToolTestBase;
+import org.apache.sqoop.testcategories.thirdpartytest.Db2Test;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test that the Job Tool works in DB2
@@ -39,7 +41,7 @@
  *   -Dsqoop.test.db2.connectstring.host_url, -Dsqoop.test.db2.connectstring.database,
  *   -Dsqoop.test.db2.connectstring.username and -Dsqoop.test.db2.connectstring.password respectively
  */
-
+@Category(Db2Test.class)
 public class DB2JobToolTest extends JobToolTestBase {
 
     private static final String HOST_URL = System.getProperty(
diff --git a/src/test/org/apache/sqoop/metastore/db2/DB2MetaConnectIncrementalImportTest.java b/src/test/org/apache/sqoop/metastore/db2/DB2MetaConnectIncrementalImportTest.java
index e7969fa..5403908 100644
--- a/src/test/org/apache/sqoop/metastore/db2/DB2MetaConnectIncrementalImportTest.java
+++ b/src/test/org/apache/sqoop/metastore/db2/DB2MetaConnectIncrementalImportTest.java
@@ -19,6 +19,8 @@
 package org.apache.sqoop.metastore.db2;
 
 import org.apache.sqoop.metastore.MetaConnectIncrementalImportTestBase;
+import org.apache.sqoop.testcategories.thirdpartytest.Db2Test;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test that Incremental-Import values are stored correctly in DB2
@@ -39,7 +41,7 @@
  *   -Dsqoop.test.db2.connectstring.host_url, -Dsqoop.test.db2.connectstring.database,
  *   -Dsqoop.test.db2.connectstring.username and -Dsqoop.test.db2.connectstring.password respectively
  */
-
+@Category(Db2Test.class)
 public class DB2MetaConnectIncrementalImportTest extends MetaConnectIncrementalImportTestBase {
 
     private static final String HOST_URL = System.getProperty(
diff --git a/src/test/org/apache/sqoop/metastore/db2/DB2SavedJobsTest.java b/src/test/org/apache/sqoop/metastore/db2/DB2SavedJobsTest.java
index caf753c..b41eda1 100644
--- a/src/test/org/apache/sqoop/metastore/db2/DB2SavedJobsTest.java
+++ b/src/test/org/apache/sqoop/metastore/db2/DB2SavedJobsTest.java
@@ -20,6 +20,8 @@
 
 import org.apache.sqoop.metastore.SavedJobsTestBase;
 import org.apache.sqoop.manager.JdbcDrivers;
+import org.apache.sqoop.testcategories.thirdpartytest.Db2Test;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test of GenericJobStorage compatibility with DB2
@@ -40,7 +42,7 @@
  *   -Dsqoop.test.db2.connectstring.host_url, -Dsqoop.test.db2.connectstring.database,
  *   -Dsqoop.test.db2.connectstring.username and -Dsqoop.test.db2.connectstring.password respectively
  */
-
+@Category(Db2Test.class)
 public class DB2SavedJobsTest extends SavedJobsTestBase {
 
     private static final String HOST_URL = System.getProperty(
diff --git a/src/test/org/apache/sqoop/metastore/mysql/MySqlJobToolTest.java b/src/test/org/apache/sqoop/metastore/mysql/MySqlJobToolTest.java
index 2ec9648..6ec57f6 100644
--- a/src/test/org/apache/sqoop/metastore/mysql/MySqlJobToolTest.java
+++ b/src/test/org/apache/sqoop/metastore/mysql/MySqlJobToolTest.java
@@ -20,6 +20,8 @@
 
 import org.apache.sqoop.manager.mysql.MySQLTestUtils;
 import org.apache.sqoop.metastore.JobToolTestBase;
+import org.apache.sqoop.testcategories.thirdpartytest.MysqlTest;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test that the Job Tool works in MySql
@@ -40,7 +42,7 @@
  *   -Dsqoop.test.mysql.connectstring.host_url, -Dsqoop.test.mysql.databasename,
  *   -Dsqoop.test.mysql.username and -Dsqoop.test.mysql.password respectively
  */
-
+@Category(MysqlTest.class)
 public class MySqlJobToolTest extends JobToolTestBase {
 
     private static MySQLTestUtils mySQLTestUtils = new MySQLTestUtils();
diff --git a/src/test/org/apache/sqoop/metastore/mysql/MySqlMetaConnectIncrementalImportTest.java b/src/test/org/apache/sqoop/metastore/mysql/MySqlMetaConnectIncrementalImportTest.java
index e19bbc8..5e548cf 100644
--- a/src/test/org/apache/sqoop/metastore/mysql/MySqlMetaConnectIncrementalImportTest.java
+++ b/src/test/org/apache/sqoop/metastore/mysql/MySqlMetaConnectIncrementalImportTest.java
@@ -21,6 +21,8 @@
 
 import org.apache.sqoop.manager.mysql.MySQLTestUtils;
 import org.apache.sqoop.metastore.MetaConnectIncrementalImportTestBase;
+import org.apache.sqoop.testcategories.thirdpartytest.MysqlTest;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test that Incremental-Import values are stored correctly in MySql
@@ -41,7 +43,7 @@
  *   -Dsqoop.test.mysql.connectstring.host_url, -Dsqoop.test.mysql.databasename,
  *   -Dsqoop.test.mysql.username and -Dsqoop.test.mysql.password respectively
  */
-
+@Category(MysqlTest.class)
 public class MySqlMetaConnectIncrementalImportTest extends MetaConnectIncrementalImportTestBase {
 
     private static MySQLTestUtils mySQLTestUtils = new MySQLTestUtils();
diff --git a/src/test/org/apache/sqoop/metastore/mysql/MySqlSavedJobsTest.java b/src/test/org/apache/sqoop/metastore/mysql/MySqlSavedJobsTest.java
index e15c322..9a66165 100644
--- a/src/test/org/apache/sqoop/metastore/mysql/MySqlSavedJobsTest.java
+++ b/src/test/org/apache/sqoop/metastore/mysql/MySqlSavedJobsTest.java
@@ -21,6 +21,8 @@
 import org.apache.sqoop.manager.mysql.MySQLTestUtils;
 import org.apache.sqoop.metastore.SavedJobsTestBase;
 import org.apache.sqoop.manager.JdbcDrivers;
+import org.apache.sqoop.testcategories.thirdpartytest.MysqlTest;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test of GenericJobStorage compatibility with MySql
@@ -41,7 +43,7 @@
  *   -Dsqoop.test.mysql.connectstring.host_url, -Dsqoop.test.mysql.databasename,
  *   -Dsqoop.test.mysql.username and -Dsqoop.test.mysql.password respectively
  */
-
+@Category(MysqlTest.class)
 public class MySqlSavedJobsTest extends SavedJobsTestBase {
 
     private static MySQLTestUtils mySQLTestUtils = new MySQLTestUtils();
diff --git a/src/test/org/apache/sqoop/metastore/oracle/OracleJobToolTest.java b/src/test/org/apache/sqoop/metastore/oracle/OracleJobToolTest.java
index a3e61e9..0869ec0 100644
--- a/src/test/org/apache/sqoop/metastore/oracle/OracleJobToolTest.java
+++ b/src/test/org/apache/sqoop/metastore/oracle/OracleJobToolTest.java
@@ -20,6 +20,8 @@
 
 import org.apache.sqoop.manager.oracle.util.OracleUtils;
 import org.apache.sqoop.metastore.JobToolTestBase;
+import org.apache.sqoop.testcategories.thirdpartytest.OracleTest;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test that the Job Tool works in Oracle
@@ -40,7 +42,7 @@
  *   -Dsqoop.test.oracle.connectstring, -Dsqoop.test.oracle.username
  *   and -Dsqoop.test.oracle.password respectively
  */
-
+@Category(OracleTest.class)
 public class OracleJobToolTest extends JobToolTestBase {
 
     public OracleJobToolTest() {
diff --git a/src/test/org/apache/sqoop/metastore/oracle/OracleMetaConnectIncrementalImportTest.java b/src/test/org/apache/sqoop/metastore/oracle/OracleMetaConnectIncrementalImportTest.java
index 37beaa4..8b92ef4 100644
--- a/src/test/org/apache/sqoop/metastore/oracle/OracleMetaConnectIncrementalImportTest.java
+++ b/src/test/org/apache/sqoop/metastore/oracle/OracleMetaConnectIncrementalImportTest.java
@@ -20,6 +20,8 @@
 
 import org.apache.sqoop.manager.oracle.util.OracleUtils;
 import org.apache.sqoop.metastore.MetaConnectIncrementalImportTestBase;
+import org.apache.sqoop.testcategories.thirdpartytest.OracleTest;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test that Incremental-Import values are stored correctly in Oracle
@@ -40,7 +42,7 @@
  *   -Dsqoop.test.oracle.connectstring, -Dsqoop.test.oracle.username
  *   and -Dsqoop.test.oracle.password respectively
  */
-
+@Category(OracleTest.class)
 public class OracleMetaConnectIncrementalImportTest extends MetaConnectIncrementalImportTestBase {
 
     public OracleMetaConnectIncrementalImportTest() {
diff --git a/src/test/org/apache/sqoop/metastore/oracle/OracleSavedJobsTest.java b/src/test/org/apache/sqoop/metastore/oracle/OracleSavedJobsTest.java
index 4691530..8e6e6c4 100644
--- a/src/test/org/apache/sqoop/metastore/oracle/OracleSavedJobsTest.java
+++ b/src/test/org/apache/sqoop/metastore/oracle/OracleSavedJobsTest.java
@@ -21,6 +21,8 @@
 import org.apache.sqoop.manager.oracle.util.OracleUtils;
 import org.apache.sqoop.metastore.SavedJobsTestBase;
 import org.apache.sqoop.manager.JdbcDrivers;
+import org.apache.sqoop.testcategories.thirdpartytest.OracleTest;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test of GenericJobStorage compatibility with Oracle
@@ -41,7 +43,7 @@
  *   -Dsqoop.test.oracle.connectstring, -Dsqoop.test.oracle.username
  *   and -Dsqoop.test.oracle.password respectively
  */
-
+@Category(OracleTest.class)
 public class OracleSavedJobsTest extends SavedJobsTestBase {
 
     public OracleSavedJobsTest() {
diff --git a/src/test/org/apache/sqoop/metastore/postgres/PostgresJobToolTest.java b/src/test/org/apache/sqoop/metastore/postgres/PostgresJobToolTest.java
index 065e1bb..59ea151 100644
--- a/src/test/org/apache/sqoop/metastore/postgres/PostgresJobToolTest.java
+++ b/src/test/org/apache/sqoop/metastore/postgres/PostgresJobToolTest.java
@@ -19,6 +19,8 @@
 package org.apache.sqoop.metastore.postgres;
 
 import org.apache.sqoop.metastore.JobToolTestBase;
+import org.apache.sqoop.testcategories.thirdpartytest.PostgresqlTest;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test that the Job Tool works in PostgreSQL
@@ -35,7 +37,7 @@
  *   -Dsqoop.test.postgresql.connectstring.host_url, -Dsqoop.test.postgresql.database,
  *   -Dsqoop.test.postgresql.username and -Dsqoop.test.postgresql.password respectively
  */
-
+@Category(PostgresqlTest.class)
 public class PostgresJobToolTest extends JobToolTestBase {
 
     private static final String HOST_URL = System.getProperty("sqoop.test.postgresql.connectstring.host_url",
diff --git a/src/test/org/apache/sqoop/metastore/postgres/PostgresMetaConnectIncrementalImportTest.java b/src/test/org/apache/sqoop/metastore/postgres/PostgresMetaConnectIncrementalImportTest.java
index 0ffbf5a..afc6bd2 100644
--- a/src/test/org/apache/sqoop/metastore/postgres/PostgresMetaConnectIncrementalImportTest.java
+++ b/src/test/org/apache/sqoop/metastore/postgres/PostgresMetaConnectIncrementalImportTest.java
@@ -19,6 +19,8 @@
 package org.apache.sqoop.metastore.postgres;
 
 import org.apache.sqoop.metastore.MetaConnectIncrementalImportTestBase;
+import org.apache.sqoop.testcategories.thirdpartytest.PostgresqlTest;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test that Incremental-Import values are stored correctly in PostgreSQL
@@ -35,7 +37,7 @@
  *   -Dsqoop.test.postgresql.connectstring.host_url, -Dsqoop.test.postgresql.database,
  *   -Dsqoop.test.postgresql.username and -Dsqoop.test.postgresql.password respectively
  */
-
+@Category(PostgresqlTest.class)
 public class PostgresMetaConnectIncrementalImportTest extends MetaConnectIncrementalImportTestBase {
 
     private static final String HOST_URL = System.getProperty("sqoop.test.postgresql.connectstring.host_url",
diff --git a/src/test/org/apache/sqoop/metastore/postgres/PostgresSavedJobsTest.java b/src/test/org/apache/sqoop/metastore/postgres/PostgresSavedJobsTest.java
index ee3f005..9f9e865 100644
--- a/src/test/org/apache/sqoop/metastore/postgres/PostgresSavedJobsTest.java
+++ b/src/test/org/apache/sqoop/metastore/postgres/PostgresSavedJobsTest.java
@@ -20,6 +20,8 @@
 
 import org.apache.sqoop.metastore.SavedJobsTestBase;
 import org.apache.sqoop.manager.JdbcDrivers;
+import org.apache.sqoop.testcategories.thirdpartytest.PostgresqlTest;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test of GenericJobStorage compatibility with PostgreSQL
@@ -36,7 +38,7 @@
  *   -Dsqoop.test.postgresql.connectstring.host_url, -Dsqoop.test.postgresql.database,
  *   -Dsqoop.test.postgresql.username and -Dsqoop.test.postgresql.password respectively
  */
-
+@Category(PostgresqlTest.class)
 public class PostgresSavedJobsTest extends SavedJobsTestBase {
 
     private static final String HOST_URL = System.getProperty("sqoop.test.postgresql.connectstring.host_url",
diff --git a/src/test/org/apache/sqoop/metastore/sqlserver/SqlServerJobToolTest.java b/src/test/org/apache/sqoop/metastore/sqlserver/SqlServerJobToolTest.java
index 87d7b34..8a27b0d 100644
--- a/src/test/org/apache/sqoop/metastore/sqlserver/SqlServerJobToolTest.java
+++ b/src/test/org/apache/sqoop/metastore/sqlserver/SqlServerJobToolTest.java
@@ -20,6 +20,8 @@
 
 import org.apache.sqoop.metastore.JobToolTestBase;
 import org.apache.sqoop.manager.sqlserver.MSSQLTestUtils;
+import org.apache.sqoop.testcategories.thirdpartytest.SqlServerTest;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test that the Job Tool works in SQLServer
@@ -40,7 +42,7 @@
  *   -Dsqoop.test.sqlserver.connectstring.host_url, -Dsqoop.test.sqlserver.database,
  *   -Dms.sqlserver.username and -Dms.sqlserver.password respectively
  */
-
+@Category(SqlServerTest.class)
 public class SqlServerJobToolTest extends JobToolTestBase {
 
     private static MSSQLTestUtils msSQLTestUtils = new MSSQLTestUtils();
diff --git a/src/test/org/apache/sqoop/metastore/sqlserver/SqlServerMetaConnectIncrementalImportTest.java b/src/test/org/apache/sqoop/metastore/sqlserver/SqlServerMetaConnectIncrementalImportTest.java
index f1a2a66..87028a4 100644
--- a/src/test/org/apache/sqoop/metastore/sqlserver/SqlServerMetaConnectIncrementalImportTest.java
+++ b/src/test/org/apache/sqoop/metastore/sqlserver/SqlServerMetaConnectIncrementalImportTest.java
@@ -20,6 +20,8 @@
 
 import org.apache.sqoop.metastore.MetaConnectIncrementalImportTestBase;
 import org.apache.sqoop.manager.sqlserver.MSSQLTestUtils;
+import org.apache.sqoop.testcategories.thirdpartytest.SqlServerTest;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test that Incremental-Import values are stored correctly in SQLServer
@@ -40,7 +42,7 @@
  *   -Dsqoop.test.sqlserver.connectstring.host_url, -Dsqoop.test.sqlserver.database,
  *   -Dms.sqlserver.username and -Dms.sqlserver.password respectively
  */
-
+@Category(SqlServerTest.class)
 public class SqlServerMetaConnectIncrementalImportTest extends MetaConnectIncrementalImportTestBase {
 
     private static MSSQLTestUtils msSQLTestUtils = new MSSQLTestUtils();
diff --git a/src/test/org/apache/sqoop/metastore/sqlserver/SqlServerSavedJobsTest.java b/src/test/org/apache/sqoop/metastore/sqlserver/SqlServerSavedJobsTest.java
index b37623b..34987b6 100644
--- a/src/test/org/apache/sqoop/metastore/sqlserver/SqlServerSavedJobsTest.java
+++ b/src/test/org/apache/sqoop/metastore/sqlserver/SqlServerSavedJobsTest.java
@@ -21,6 +21,8 @@
 import org.apache.sqoop.metastore.SavedJobsTestBase;
 import org.apache.sqoop.manager.JdbcDrivers;
 import org.apache.sqoop.manager.sqlserver.MSSQLTestUtils;
+import org.apache.sqoop.testcategories.thirdpartytest.SqlServerTest;
+import org.junit.experimental.categories.Category;
 
 /**
  * Test of GenericJobStorage compatibility with SQLServer
@@ -41,7 +43,7 @@
  *   -Dsqoop.test.sqlserver.connectstring.host_url, -Dsqoop.test.sqlserver.database,
  *   -Dms.sqlserver.username and -Dms.sqlserver.password respectively
  */
-
+@Category(SqlServerTest.class)
 public class SqlServerSavedJobsTest extends SavedJobsTestBase {
 
     private static MSSQLTestUtils msSQLTestUtils = new MSSQLTestUtils();
diff --git a/src/test/org/apache/sqoop/orm/TestClassWriter.java b/src/test/org/apache/sqoop/orm/TestClassWriter.java
index 0cc07cf..59a8908 100644
--- a/src/test/org/apache/sqoop/orm/TestClassWriter.java
+++ b/src/test/org/apache/sqoop/orm/TestClassWriter.java
@@ -34,6 +34,7 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.util.Shell;
+import org.apache.sqoop.testcategories.sqooptest.IntegrationTest;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
@@ -47,6 +48,7 @@
 import org.apache.sqoop.testutil.ImportJobTestCase;
 import org.apache.sqoop.tool.ImportTool;
 import org.apache.sqoop.util.ClassLoaderStack;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 
 import java.lang.reflect.Field;
@@ -61,6 +63,7 @@
  * Test that the ClassWriter generates Java classes based on the given table,
  * which compile.
  */
+@Category(IntegrationTest.class)
 public class TestClassWriter {
 
   public static final Log LOG =
diff --git a/src/test/org/apache/sqoop/orm/TestCompilationManager.java b/src/test/org/apache/sqoop/orm/TestCompilationManager.java
index abd72d8..fb39f29 100644
--- a/src/test/org/apache/sqoop/orm/TestCompilationManager.java
+++ b/src/test/org/apache/sqoop/orm/TestCompilationManager.java
@@ -18,12 +18,15 @@
 package org.apache.sqoop.orm;
 
 import org.apache.sqoop.SqoopOptions;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.mockito.Mockito.mock;
 
+@Category(UnitTest.class)
 public class TestCompilationManager {
 
   private CompilationManager compilationManager;
diff --git a/src/test/org/apache/sqoop/testcategories/KerberizedTest.java b/src/test/org/apache/sqoop/testcategories/KerberizedTest.java
new file mode 100644
index 0000000..2a1bd7c
--- /dev/null
+++ b/src/test/org/apache/sqoop/testcategories/KerberizedTest.java
@@ -0,0 +1,24 @@
+/**
+ * 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.sqoop.testcategories;
+
+/**
+ * A kerberized test shall run in kerberized environment thus it starts mini KDC server.
+ */
+public interface KerberizedTest {
+}
diff --git a/src/test/org/apache/sqoop/testcategories/sqooptest/IntegrationTest.java b/src/test/org/apache/sqoop/testcategories/sqooptest/IntegrationTest.java
new file mode 100644
index 0000000..aa3fa97
--- /dev/null
+++ b/src/test/org/apache/sqoop/testcategories/sqooptest/IntegrationTest.java
@@ -0,0 +1,26 @@
+/**
+ * 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.sqoop.testcategories.sqooptest;
+
+/**
+ * An integration test shall test if independently developed classes work together correctly.
+ * An integration test checks a whole scenario and thus may start mini clusters or embedded databases and may connect to
+ * external resources like RDBMS instances.
+ */
+public interface IntegrationTest extends SqoopTest {
+}
diff --git a/src/test/org/apache/sqoop/testcategories/sqooptest/ManualTest.java b/src/test/org/apache/sqoop/testcategories/sqooptest/ManualTest.java
new file mode 100644
index 0000000..e349117
--- /dev/null
+++ b/src/test/org/apache/sqoop/testcategories/sqooptest/ManualTest.java
@@ -0,0 +1,24 @@
+/**
+ * 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.sqoop.testcategories.sqooptest;
+
+/**
+ * Deprecated category, shall not be used nor extended.
+ */
+public interface ManualTest extends IntegrationTest {
+}
diff --git a/src/test/org/apache/sqoop/testcategories/sqooptest/SqoopTest.java b/src/test/org/apache/sqoop/testcategories/sqooptest/SqoopTest.java
new file mode 100644
index 0000000..c1dc529
--- /dev/null
+++ b/src/test/org/apache/sqoop/testcategories/sqooptest/SqoopTest.java
@@ -0,0 +1,35 @@
+/**
+ * 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.sqoop.testcategories.sqooptest;
+
+/**
+ * SqoopTest includes UnitTest, IntegrationTest and ManualTest.
+ *
+ * UnitTest:
+ * A unit test shall test one class at a time having it's dependencies mocked.
+ * A unit test shall not start a mini cluster nor an embedded database and it shall not use a JDBC driver.
+ *
+ * IntegrationTest:
+ * An integration test shall test if independently developed classes work together correctly.
+ * An integration test checks a whole scenario and thus may start mini clusters or embedded databases and may connect to external resources like RDBMS instances.
+ *
+ * ManualTest:
+ * Deprecated category, shall not be used nor extended.
+ */
+public interface SqoopTest {
+}
diff --git a/src/test/org/apache/sqoop/testcategories/sqooptest/UnitTest.java b/src/test/org/apache/sqoop/testcategories/sqooptest/UnitTest.java
new file mode 100644
index 0000000..b6afac6
--- /dev/null
+++ b/src/test/org/apache/sqoop/testcategories/sqooptest/UnitTest.java
@@ -0,0 +1,25 @@
+/**
+ * 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.sqoop.testcategories.sqooptest;
+
+/**
+ * A unit test shall test one class at a time having it's dependencies mocked.
+ * A unit test shall not start a mini cluster nor an embedded database and it shall not use a JDBC driver.
+ */
+public interface UnitTest extends SqoopTest {
+}
diff --git a/src/test/org/apache/sqoop/testcategories/thirdpartytest/CubridTest.java b/src/test/org/apache/sqoop/testcategories/thirdpartytest/CubridTest.java
new file mode 100644
index 0000000..4efc262
--- /dev/null
+++ b/src/test/org/apache/sqoop/testcategories/thirdpartytest/CubridTest.java
@@ -0,0 +1,24 @@
+/**
+ * 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.sqoop.testcategories.thirdpartytest;
+
+/**
+ * A CubridTest shall test scenarios where a Cubrid driver and/or external instance is required.
+ */
+public interface CubridTest extends ThirdPartyTest {
+}
diff --git a/src/test/org/apache/sqoop/testcategories/thirdpartytest/Db2Test.java b/src/test/org/apache/sqoop/testcategories/thirdpartytest/Db2Test.java
new file mode 100644
index 0000000..e33aa81
--- /dev/null
+++ b/src/test/org/apache/sqoop/testcategories/thirdpartytest/Db2Test.java
@@ -0,0 +1,24 @@
+/**
+ * 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.sqoop.testcategories.thirdpartytest;
+
+/**
+ * A DB2 test shall test scenarios where a DB2 driver and/or external instance is required.
+ */
+public interface Db2Test extends ThirdPartyTest {
+}
diff --git a/src/test/org/apache/sqoop/testcategories/thirdpartytest/MainFrameTest.java b/src/test/org/apache/sqoop/testcategories/thirdpartytest/MainFrameTest.java
new file mode 100644
index 0000000..8f3ed36
--- /dev/null
+++ b/src/test/org/apache/sqoop/testcategories/thirdpartytest/MainFrameTest.java
@@ -0,0 +1,24 @@
+/**
+ * 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.sqoop.testcategories.thirdpartytest;
+
+/**
+ * A MainFrame test shall test scenarios where a MainFrame external instance is required.
+ */
+public interface MainFrameTest extends ThirdPartyTest {
+}
diff --git a/src/test/org/apache/sqoop/testcategories/thirdpartytest/MysqlTest.java b/src/test/org/apache/sqoop/testcategories/thirdpartytest/MysqlTest.java
new file mode 100644
index 0000000..db9fc69
--- /dev/null
+++ b/src/test/org/apache/sqoop/testcategories/thirdpartytest/MysqlTest.java
@@ -0,0 +1,24 @@
+/**
+ * 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.sqoop.testcategories.thirdpartytest;
+
+/**
+ * A MySql test shall test scenarios where a MySql driver and/or external instance is required.
+ */
+public interface MysqlTest extends ThirdPartyTest {
+}
diff --git a/src/test/org/apache/sqoop/testcategories/thirdpartytest/NetezzaTest.java b/src/test/org/apache/sqoop/testcategories/thirdpartytest/NetezzaTest.java
new file mode 100644
index 0000000..7ea2768
--- /dev/null
+++ b/src/test/org/apache/sqoop/testcategories/thirdpartytest/NetezzaTest.java
@@ -0,0 +1,24 @@
+/**
+ * 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.sqoop.testcategories.thirdpartytest;
+
+/**
+ * A Netezza test shall test scenarios where a Netezza driver and/or external instance is required.
+ */
+public interface NetezzaTest extends ThirdPartyTest {
+}
diff --git a/src/test/org/apache/sqoop/testcategories/thirdpartytest/OracleTest.java b/src/test/org/apache/sqoop/testcategories/thirdpartytest/OracleTest.java
new file mode 100644
index 0000000..045f545
--- /dev/null
+++ b/src/test/org/apache/sqoop/testcategories/thirdpartytest/OracleTest.java
@@ -0,0 +1,24 @@
+/**
+ * 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.sqoop.testcategories.thirdpartytest;
+
+/**
+ * An Oracle test shall test scenarios where a Oracle driver and/or external instance is required.
+ */
+public interface OracleTest extends ThirdPartyTest {
+}
diff --git a/src/test/org/apache/sqoop/testcategories/thirdpartytest/PostgresqlTest.java b/src/test/org/apache/sqoop/testcategories/thirdpartytest/PostgresqlTest.java
new file mode 100644
index 0000000..663e668
--- /dev/null
+++ b/src/test/org/apache/sqoop/testcategories/thirdpartytest/PostgresqlTest.java
@@ -0,0 +1,24 @@
+/**
+ * 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.sqoop.testcategories.thirdpartytest;
+
+/**
+ * A PostgreSql test shall test scenarios where a PostgreSql driver and/or external instance is required.
+ */
+public interface PostgresqlTest extends ThirdPartyTest {
+}
diff --git a/src/test/org/apache/sqoop/testcategories/thirdpartytest/SqlServerTest.java b/src/test/org/apache/sqoop/testcategories/thirdpartytest/SqlServerTest.java
new file mode 100644
index 0000000..7832017
--- /dev/null
+++ b/src/test/org/apache/sqoop/testcategories/thirdpartytest/SqlServerTest.java
@@ -0,0 +1,24 @@
+/**
+ * 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.sqoop.testcategories.thirdpartytest;
+
+/**
+ * An SqlServer test shall test scenarios where a SqlServer driver and/or external instance is required.
+ */
+public interface SqlServerTest extends ThirdPartyTest {
+}
diff --git a/src/test/org/apache/sqoop/testcategories/thirdpartytest/ThirdPartyTest.java b/src/test/org/apache/sqoop/testcategories/thirdpartytest/ThirdPartyTest.java
new file mode 100644
index 0000000..d2dd29a
--- /dev/null
+++ b/src/test/org/apache/sqoop/testcategories/thirdpartytest/ThirdPartyTest.java
@@ -0,0 +1,25 @@
+/**
+ * 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.sqoop.testcategories.thirdpartytest;
+
+/**
+ * A third party test shall test a scenario where a third party side is required such as a JDBC driver or an external
+ * RDBMS instance.
+ */
+public interface ThirdPartyTest {
+}
diff --git a/src/test/org/apache/sqoop/testutil/BaseSqoopTestCase.java b/src/test/org/apache/sqoop/testutil/BaseSqoopTestCase.java
index fe6ba83..e23aad3 100644
--- a/src/test/org/apache/sqoop/testutil/BaseSqoopTestCase.java
+++ b/src/test/org/apache/sqoop/testutil/BaseSqoopTestCase.java
@@ -22,6 +22,7 @@
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.manager.ConnManager;
 import org.apache.sqoop.metastore.JobData;
+import org.apache.sqoop.testcategories.sqooptest.IntegrationTest;
 import org.apache.sqoop.tool.ImportTool;
 import com.google.common.collect.ObjectArrays;
 import org.apache.commons.logging.Log;
@@ -34,6 +35,7 @@
 import org.apache.sqoop.SqoopJobDataPublisher;
 import org.junit.After;
 import org.junit.Before;
+import org.junit.experimental.categories.Category;
 
 import java.io.File;
 import java.io.IOException;
@@ -53,6 +55,7 @@
 /**
  * Class that implements common methods required for tests.
  */
+@Category(IntegrationTest.class)
 public abstract class BaseSqoopTestCase {
 
   public static class DummyDataPublisher extends SqoopJobDataPublisher {
diff --git a/src/test/org/apache/sqoop/testutil/TestArgumentArrayBuilder.java b/src/test/org/apache/sqoop/testutil/TestArgumentArrayBuilder.java
index 6d701ab..0c38eac 100644
--- a/src/test/org/apache/sqoop/testutil/TestArgumentArrayBuilder.java
+++ b/src/test/org/apache/sqoop/testutil/TestArgumentArrayBuilder.java
@@ -18,10 +18,13 @@
 
 package org.apache.sqoop.testutil;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertArrayEquals;
 
+@Category(UnitTest.class)
 public class TestArgumentArrayBuilder {
 
   @Test
diff --git a/src/test/org/apache/sqoop/tool/ImportToolValidateOptionsTest.java b/src/test/org/apache/sqoop/tool/ImportToolValidateOptionsTest.java
index bdac437..b192415 100644
--- a/src/test/org/apache/sqoop/tool/ImportToolValidateOptionsTest.java
+++ b/src/test/org/apache/sqoop/tool/ImportToolValidateOptionsTest.java
@@ -19,9 +19,12 @@
 package org.apache.sqoop.tool;
 
 import org.apache.sqoop.SqoopOptions;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
+import org.apache.sqoop.util.BlockJUnit4ClassRunnerWithParametersFactory;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -34,7 +37,9 @@
 import static org.apache.sqoop.SqoopOptions.FileLayout.ParquetFile;
 import static org.apache.sqoop.SqoopOptions.FileLayout.TextFile;
 
+@Category(UnitTest.class)
 @RunWith(Parameterized.class)
+@Parameterized.UseParametersRunnerFactory(BlockJUnit4ClassRunnerWithParametersFactory.class)
 public class ImportToolValidateOptionsTest {
 
   @Parameters(name = "fileLayout = {0}, validationMessage = {1}")
diff --git a/src/test/org/apache/sqoop/tool/TestBaseSqoopTool.java b/src/test/org/apache/sqoop/tool/TestBaseSqoopTool.java
index aecfa8b..5767e0a 100644
--- a/src/test/org/apache/sqoop/tool/TestBaseSqoopTool.java
+++ b/src/test/org/apache/sqoop/tool/TestBaseSqoopTool.java
@@ -23,9 +23,11 @@
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.cli.RelatedOptions;
 import org.apache.sqoop.mapreduce.parquet.ParquetJobConfiguratorImplementation;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 import org.mockito.Mockito;
 
@@ -36,6 +38,7 @@
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+@Category(UnitTest.class)
 public class TestBaseSqoopTool {
 
   private static final String PARQUET_CONFIGURATOR_IMPLEMENTATION = "parquet-configurator-implementation";
diff --git a/src/test/org/apache/sqoop/tool/TestExportToolValidateOptions.java b/src/test/org/apache/sqoop/tool/TestExportToolValidateOptions.java
index f16d187..6a5184a 100644
--- a/src/test/org/apache/sqoop/tool/TestExportToolValidateOptions.java
+++ b/src/test/org/apache/sqoop/tool/TestExportToolValidateOptions.java
@@ -21,7 +21,9 @@
 import org.apache.sqoop.SqoopOptions;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.sqoop.manager.SupportedManagers;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
@@ -44,6 +46,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+@Category(UnitTest.class)
 public class TestExportToolValidateOptions {
   ExportTool exportTool = new ExportTool();
 
diff --git a/src/test/org/apache/sqoop/tool/TestHiveServer2OptionValidations.java b/src/test/org/apache/sqoop/tool/TestHiveServer2OptionValidations.java
index ed4b5a4..926d2fc 100644
--- a/src/test/org/apache/sqoop/tool/TestHiveServer2OptionValidations.java
+++ b/src/test/org/apache/sqoop/tool/TestHiveServer2OptionValidations.java
@@ -19,9 +19,12 @@
 package org.apache.sqoop.tool;
 
 import org.apache.sqoop.SqoopOptions;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
+import org.apache.sqoop.util.BlockJUnit4ClassRunnerWithParametersFactory;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.ExpectedException;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -30,7 +33,6 @@
 import java.util.Arrays;
 import java.util.Properties;
 
-import static org.apache.sqoop.SqoopOptions.FileLayout.ParquetFile;
 import static org.apache.sqoop.SqoopOptions.IncrementalMode.None;
 import static org.mockito.Matchers.any;
 import static org.mockito.Mockito.doReturn;
@@ -39,6 +41,8 @@
 import static org.mockito.Mockito.when;
 
 @RunWith(Parameterized.class)
+@Category(UnitTest.class)
+@Parameterized.UseParametersRunnerFactory(BlockJUnit4ClassRunnerWithParametersFactory.class)
 public class TestHiveServer2OptionValidations {
 
   @Parameters(name = "sqoopTool = {0}")
diff --git a/src/test/org/apache/sqoop/tool/TestImportTool.java b/src/test/org/apache/sqoop/tool/TestImportTool.java
index 8c2be3b..9f7c50c 100644
--- a/src/test/org/apache/sqoop/tool/TestImportTool.java
+++ b/src/test/org/apache/sqoop/tool/TestImportTool.java
@@ -38,17 +38,20 @@
 import org.apache.sqoop.SqoopOptions;
 import org.apache.sqoop.avro.AvroSchemaMismatchException;
 import org.apache.sqoop.hive.HiveClientFactory;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.apache.sqoop.util.ExpectedLogMessage;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.experimental.theories.DataPoints;
 import org.junit.experimental.theories.Theories;
 import org.junit.experimental.theories.Theory;
 import org.junit.runner.RunWith;
 
 @RunWith(Theories.class)
+@Category(UnitTest.class)
 public class TestImportTool {
   @DataPoints
   public static final Object[][] TRANSACTION_ISOLATION_LEVEL_NAMES_AND_VALUES = {
diff --git a/src/test/org/apache/sqoop/tool/TestToolPlugin.java b/src/test/org/apache/sqoop/tool/TestToolPlugin.java
index 19dea22..70d13dd 100644
--- a/src/test/org/apache/sqoop/tool/TestToolPlugin.java
+++ b/src/test/org/apache/sqoop/tool/TestToolPlugin.java
@@ -38,7 +38,9 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
@@ -46,6 +48,7 @@
 /**
  * Test that tool plugins work.
  */
+@Category(UnitTest.class)
 public class TestToolPlugin {
 
   public static final Log LOG = LogFactory
diff --git a/src/test/org/apache/sqoop/tool/TestValidateImportOptions.java b/src/test/org/apache/sqoop/tool/TestValidateImportOptions.java
index 9b61bd5..99814b4 100644
--- a/src/test/org/apache/sqoop/tool/TestValidateImportOptions.java
+++ b/src/test/org/apache/sqoop/tool/TestValidateImportOptions.java
@@ -22,7 +22,9 @@
 import org.apache.hadoop.conf.Configuration;
 import org.apache.sqoop.manager.SupportedManagers;
 import org.apache.commons.lang.RandomStringUtils;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.times;
@@ -30,6 +32,7 @@
 import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
 
+@Category(UnitTest.class)
 public class TestValidateImportOptions {
 
     ImportTool importTool = new ImportTool();
diff --git a/src/test/org/apache/sqoop/util/BlockJUnit4ClassRunnerWithParameters.java b/src/test/org/apache/sqoop/util/BlockJUnit4ClassRunnerWithParameters.java
new file mode 100644
index 0000000..2bb2a09
--- /dev/null
+++ b/src/test/org/apache/sqoop/util/BlockJUnit4ClassRunnerWithParameters.java
@@ -0,0 +1,45 @@
+/**
+ * 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.sqoop.util;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.model.InitializationError;
+import org.junit.runners.parameterized.TestWithParameters;
+
+import java.lang.annotation.Annotation;
+
+public class BlockJUnit4ClassRunnerWithParameters extends org.junit.runners.parameterized.BlockJUnit4ClassRunnerWithParameters {
+  public BlockJUnit4ClassRunnerWithParameters(TestWithParameters test) throws InitializationError {
+    super(test);
+  }
+
+  @Override
+  protected Annotation[] getRunnerAnnotations() {
+    Annotation[] allAnnotations = getTestClass().getAnnotations();
+    Annotation[] annotationsWithoutRunWith = new Annotation[allAnnotations.length - 1];
+    int i = 0;
+    for (Annotation annotation: allAnnotations) {
+      if (!annotation.annotationType().equals(RunWith.class)) {
+        annotationsWithoutRunWith[i] = annotation;
+        ++i;
+      }
+    }
+    return annotationsWithoutRunWith;
+  }
+}
diff --git a/src/test/org/apache/sqoop/util/BlockJUnit4ClassRunnerWithParametersFactory.java b/src/test/org/apache/sqoop/util/BlockJUnit4ClassRunnerWithParametersFactory.java
new file mode 100644
index 0000000..2e9d330
--- /dev/null
+++ b/src/test/org/apache/sqoop/util/BlockJUnit4ClassRunnerWithParametersFactory.java
@@ -0,0 +1,37 @@
+/**
+ * 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.sqoop.util;
+
+import org.junit.runner.Runner;
+import org.junit.runners.model.InitializationError;
+import org.junit.runners.parameterized.ParametersRunnerFactory;
+import org.junit.runners.parameterized.TestWithParameters;
+
+/**
+ * Due to an issue in JUnit Gradle does not execute categorized tests which are parameterized too.
+ * The issue is already reported(https://github.com/junit-team/junit4/issues/751) but its fix will be released in JUnit 4.13.
+ * This factory returns a custom BlockJUnit4ClassRunnerWithParameters instance which contains the fix for this issue so
+ * we have to use @Parameterized.UseParametersRunnerFactory(BlockJUnit4ClassRunnerWithParametersFactory.class) annotation
+ * on parameterized test classes until JUnit 4.13 is released and we migrate to it.
+ */
+public class BlockJUnit4ClassRunnerWithParametersFactory implements ParametersRunnerFactory {
+  @Override
+  public Runner createRunnerForTestWithParameters(TestWithParameters test) throws InitializationError {
+    return new BlockJUnit4ClassRunnerWithParameters(test);
+  }
+}
diff --git a/src/test/org/apache/sqoop/util/TestDirCleanupHook.java b/src/test/org/apache/sqoop/util/TestDirCleanupHook.java
index 41146fd..1af5033 100644
--- a/src/test/org/apache/sqoop/util/TestDirCleanupHook.java
+++ b/src/test/org/apache/sqoop/util/TestDirCleanupHook.java
@@ -18,13 +18,16 @@
 
 package org.apache.sqoop.util;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.junit.rules.TemporaryFolder;
 
 import static org.junit.Assert.assertFalse;
 
+@Category(UnitTest.class)
 public class TestDirCleanupHook {
   @Rule
   public TemporaryFolder tmpFolder = new TemporaryFolder();
diff --git a/src/test/org/apache/sqoop/util/TestFileSystemUtil.java b/src/test/org/apache/sqoop/util/TestFileSystemUtil.java
index 28fb58c..961c8fa 100644
--- a/src/test/org/apache/sqoop/util/TestFileSystemUtil.java
+++ b/src/test/org/apache/sqoop/util/TestFileSystemUtil.java
@@ -23,10 +23,14 @@
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.fs.RawLocalFileSystem;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Test;
 import org.junit.Before;
+import org.junit.experimental.categories.Category;
+
 import static org.junit.Assert.*;
 
+@Category(UnitTest.class)
 public class TestFileSystemUtil {
   private Configuration conf;
 
diff --git a/src/test/org/apache/sqoop/util/TestMainframeFTPClientUtils.java b/src/test/org/apache/sqoop/util/TestMainframeFTPClientUtils.java
index 0714bdc..fc6e56d 100644
--- a/src/test/org/apache/sqoop/util/TestMainframeFTPClientUtils.java
+++ b/src/test/org/apache/sqoop/util/TestMainframeFTPClientUtils.java
@@ -34,11 +34,14 @@
 import org.apache.sqoop.mapreduce.JobBase;
 import org.apache.sqoop.mapreduce.db.DBConfiguration;
 import org.apache.sqoop.mapreduce.mainframe.MainframeConfiguration;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
+@Category(UnitTest.class)
 public class TestMainframeFTPClientUtils {
 
   private JobConf conf;
diff --git a/src/test/org/apache/sqoop/util/TestOptionsFileExpansion.java b/src/test/org/apache/sqoop/util/TestOptionsFileExpansion.java
index 3fc9e60..98e2bde 100644
--- a/src/test/org/apache/sqoop/util/TestOptionsFileExpansion.java
+++ b/src/test/org/apache/sqoop/util/TestOptionsFileExpansion.java
@@ -22,15 +22,18 @@
 import java.io.FileWriter;
 import java.io.IOException;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.apache.sqoop.util.OptionsFileUtil;
 import org.junit.Assert;
 
 import org.apache.sqoop.Sqoop;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 /**
  * Tests various options file loading scenarios.
  */
+@Category(UnitTest.class)
 public class TestOptionsFileExpansion {
 
   /**
diff --git a/src/test/org/apache/sqoop/util/TestSqoopJsonUtil.java b/src/test/org/apache/sqoop/util/TestSqoopJsonUtil.java
index fdf972c..a19b955 100644
--- a/src/test/org/apache/sqoop/util/TestSqoopJsonUtil.java
+++ b/src/test/org/apache/sqoop/util/TestSqoopJsonUtil.java
@@ -23,9 +23,12 @@
 
 import java.util.HashMap;
 import java.util.Map;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.BeforeClass;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
+@Category(UnitTest.class)
 public class TestSqoopJsonUtil {
 
   private static Map<String, String> paramMap;
diff --git a/src/test/org/apache/sqoop/util/TestSubstitutionUtils.java b/src/test/org/apache/sqoop/util/TestSubstitutionUtils.java
index a2ac341..53e790a 100644
--- a/src/test/org/apache/sqoop/util/TestSubstitutionUtils.java
+++ b/src/test/org/apache/sqoop/util/TestSubstitutionUtils.java
@@ -17,14 +17,17 @@
  */
 package org.apache.sqoop.util;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.apache.sqoop.util.SubstitutionUtils;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 
 /**
  *
  */
+@Category(UnitTest.class)
 public class TestSubstitutionUtils {
 
   @Test
diff --git a/src/test/org/apache/sqoop/validation/AbortOnFailureHandlerTest.java b/src/test/org/apache/sqoop/validation/AbortOnFailureHandlerTest.java
index ee04563..6bc0d44 100644
--- a/src/test/org/apache/sqoop/validation/AbortOnFailureHandlerTest.java
+++ b/src/test/org/apache/sqoop/validation/AbortOnFailureHandlerTest.java
@@ -20,7 +20,9 @@
 
 import org.apache.sqoop.SqoopOptions;
 import org.apache.hadoop.conf.Configuration;
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
@@ -28,6 +30,7 @@
 /**
  * Tests for AbortOnFailureHandler.
  */
+@Category(UnitTest.class)
 public class AbortOnFailureHandlerTest {
 
   @Test
diff --git a/src/test/org/apache/sqoop/validation/AbsoluteValidationThresholdTest.java b/src/test/org/apache/sqoop/validation/AbsoluteValidationThresholdTest.java
index 86a99c4..2c44349 100644
--- a/src/test/org/apache/sqoop/validation/AbsoluteValidationThresholdTest.java
+++ b/src/test/org/apache/sqoop/validation/AbsoluteValidationThresholdTest.java
@@ -18,7 +18,9 @@
 
 package org.apache.sqoop.validation;
 
+import org.apache.sqoop.testcategories.sqooptest.UnitTest;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -26,6 +28,7 @@
 /**
  * Tests for AbsoluteValidationThreshold.
  */
+@Category(UnitTest.class)
 public class AbsoluteValidationThresholdTest {
 
   /**
