diff --git a/dep/QMP/qemu-ga-client b/dep/QMP/qemu-ga-client
index caf44b10..bb4ca2ac 100755
--- a/dep/QMP/qemu-ga-client
+++ b/dep/QMP/qemu-ga-client
@@ -276,9 +276,9 @@ def main(address, cmd, args):
 
 
 if __name__ == '__main__':
-    import sys
-    import os
     import optparse
+    import os
+    import sys
 
     address = os.environ['QGA_CLIENT_ADDRESS'] if 'QGA_CLIENT_ADDRESS' in os.environ else None
 
diff --git a/dep/QMP/qmp.py b/dep/QMP/qmp.py
index 430887de..3fd5f1b2 100755
--- a/dep/QMP/qmp.py
+++ b/dep/QMP/qmp.py
@@ -8,10 +8,11 @@
 # This work is licensed under the terms of the GNU GPL, version 2.  See
 # the COPYING file in the top-level directory.
 
-import json
 import errno
+import json
 import socket
 
+
 class QMPError(Exception):
     pass
 
diff --git a/dep/__init__.py b/dep/__init__.py
new file mode 100644
index 00000000..ae0043b7
--- /dev/null
+++ b/dep/__init__.py
@@ -0,0 +1,30 @@
+#!/usr/bin/python3
+# BSD LICENSE
+#
+# Copyright (c) 2021 PANTHEON.tech s.r.o.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#   * Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+#   * Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in
+#     the documentation and/or other materials provided with the
+#     distribution.
+#   * Neither the name of PANTHEON.tech s.r.o. nor the names of its
+#     contributors may be used to endorse or promote products derived
+#     from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/dep/scapy_modules/Dot1BR.py b/dep/scapy_modules/Dot1BR.py
index 4a681ad1..162ac7dc 100644
--- a/dep/scapy_modules/Dot1BR.py
+++ b/dep/scapy_modules/Dot1BR.py
@@ -9,10 +9,11 @@
 VBPE (virtual brige port extenstion)
 """
 
-from scapy.packet import *
+from scapy.data import ETHER_TYPES
 from scapy.fields import *
 from scapy.layers.l2 import Ether
-from scapy.data import ETHER_TYPES
+from scapy.packet import *
+
 
 class Dot1BR(Packet):
     name = "802.1BR"
diff --git a/dep/scapy_modules/__init__.py b/dep/scapy_modules/__init__.py
new file mode 100644
index 00000000..ae0043b7
--- /dev/null
+++ b/dep/scapy_modules/__init__.py
@@ -0,0 +1,30 @@
+#!/usr/bin/python3
+# BSD LICENSE
+#
+# Copyright (c) 2021 PANTHEON.tech s.r.o.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#   * Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+#   * Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in
+#     the documentation and/or other materials provided with the
+#     distribution.
+#   * Neither the name of PANTHEON.tech s.r.o. nor the names of its
+#     contributors may be used to endorse or promote products derived
+#     from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/dts b/dts
index f408e5b9..97032cd7 100755
--- a/dts
+++ b/dts
@@ -4,4 +4,4 @@
 
 PWD=`dirname $0`
 
-(cd $PWD/framework; ./main.py $@)
+./main.py $@
diff --git a/framework/__init__.py b/framework/__init__.py
new file mode 100644
index 00000000..ae0043b7
--- /dev/null
+++ b/framework/__init__.py
@@ -0,0 +1,30 @@
+#!/usr/bin/python3
+# BSD LICENSE
+#
+# Copyright (c) 2021 PANTHEON.tech s.r.o.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#   * Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+#   * Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in
+#     the documentation and/or other materials provided with the
+#     distribution.
+#   * Neither the name of PANTHEON.tech s.r.o. nor the names of its
+#     contributors may be used to endorse or promote products derived
+#     from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/framework/checkCase.py b/framework/checkCase.py
index 3c1db994..3182dc77 100644
--- a/framework/checkCase.py
+++ b/framework/checkCase.py
@@ -1,9 +1,10 @@
-import xlrd
 import collections
 import json
 
-from settings import get_nic_name, load_global_setting, HOST_DRIVER_SETTING
-from utils import RED
+import xlrd
+
+from .settings import HOST_DRIVER_SETTING, get_nic_name, load_global_setting
+from .utils import RED
 
 filter_json_file = './conf/test_case_checklist.json'
 support_json_file = './conf/test_case_supportlist.json'
diff --git a/framework/config.py b/framework/config.py
index ac075233..d0e63bfd 100644
--- a/framework/config.py
+++ b/framework/config.py
@@ -32,14 +32,27 @@
 """
 Generic port and crbs configuration file load function
 """
+import argparse  # parse arguments module
+import configparser  # config parse module
 import os
 import re
-import configparser  # config parse module
-import argparse      # parse arguments module
-from settings import (PKTGEN, PKTGEN_DPDK, PKTGEN_TREX, PKTGEN_IXIA, PKTGEN_IXIA_NETWORK,
-                      CONFIG_ROOT_PATH, SUITE_SECTION_NAME)
-from settings import load_global_setting, DTS_CFG_FOLDER
-from exception import ConfigParseException, VirtConfigParseException, PortConfigParseException
+
+from .exception import (
+    ConfigParseException,
+    PortConfigParseException,
+    VirtConfigParseException,
+)
+from .settings import (
+    CONFIG_ROOT_PATH,
+    DTS_CFG_FOLDER,
+    PKTGEN,
+    PKTGEN_DPDK,
+    PKTGEN_IXIA,
+    PKTGEN_IXIA_NETWORK,
+    PKTGEN_TREX,
+    SUITE_SECTION_NAME,
+    load_global_setting,
+)
 
 PORTCONF = "%s/ports.cfg" % CONFIG_ROOT_PATH
 CRBCONF = "%s/crbs.cfg" % CONFIG_ROOT_PATH
@@ -99,7 +112,7 @@ class GlobalConf(UserConf):
             self.global_conf = UserConf(GLOBALCONF)
         except ConfigParseException:
             self.global_conf = None
-        
+
         # load global configuration
         self.global_cfg = self.load_global_config()
 
@@ -115,10 +128,10 @@ class GlobalConf(UserConf):
             return global_cfg
 
         global_cfg = dict(section_confs)
-        
+
         return global_cfg
-        
-        
+
+
 class SuiteConf(UserConf):
     def __init__(self, suite_name=""):
         self.suite_cfg = GlobalConf().load_global_config()
diff --git a/framework/crb.py b/framework/crb.py
index 40fe4fd1..251ee3dd 100644
--- a/framework/crb.py
+++ b/framework/crb.py
@@ -29,13 +29,14 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-import time
-import re
 import os
-from settings import TIMEOUT
-from ssh_connection import SSHConnection
-from logger import getLogger
-from config import PortConf, PORTCONF, PktgenConf
+import re
+import time
+
+from .config import PORTCONF, PktgenConf, PortConf
+from .logger import getLogger
+from .settings import TIMEOUT
+from .ssh_connection import SSHConnection
 
 """
 CRB (customer reference board) basic functions and handlers
@@ -578,7 +579,7 @@ class Crb(object):
         """
         Get OS type from execution configuration file.
         """
-        from dut import Dut
+        from .dut import Dut
         if isinstance(self, Dut) and 'OS' in self.crb:
             return str(self.crb['OS']).lower()
 
@@ -588,7 +589,7 @@ class Crb(object):
         """
         Check real OS type whether match configured type.
         """
-        from dut import Dut
+        from .dut import Dut
         expected = 'Linux.*#'
         if isinstance(self, Dut) and self.get_os_type() == 'freebsd':
             expected = 'FreeBSD.*#'
diff --git a/framework/debugger.py b/framework/debugger.py
index 0eaf7377..cdc36d3a 100644
--- a/framework/debugger.py
+++ b/framework/debugger.py
@@ -22,16 +22,16 @@
 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 
-import sys
+import code
+import imp
 import os
 import signal
-import code
+import sys
 import time
-import imp
-from settings import load_global_setting, DEBUG_SETTING, DTS_PARALLEL_SETTING
-from utils import get_subclasses, copy_instance_attr, GREEN
 
-from test_case import TestCase
+from .settings import DEBUG_SETTING, DTS_PARALLEL_SETTING, load_global_setting
+from .test_case import TestCase
+from .utils import GREEN, copy_instance_attr, get_subclasses
 
 console = None      # global console object
 debug_cmd = ''      # global debug state
@@ -59,7 +59,7 @@ def list_command():
     List all connection sessions and can be reference of connect command.
     """
     index = 0
-    from ssh_connection import CONNECTIONS
+    from .ssh_connection import CONNECTIONS
     for connection in CONNECTIONS:
         for name, session in list(connection.items()):
             console.push('print \'connect %d: %10s\'' % (index, name))
@@ -70,7 +70,7 @@ def connect_command(connect):
     """
     Connect to ssh session and give control to user.
     """
-    from ssh_connection import CONNECTIONS
+    from .ssh_connection import CONNECTIONS
     if type(connect) == int:
         name, session = list(CONNECTIONS[connect].items())[0]
         print(GREEN("Connecting to session[%s]" % name))
diff --git a/framework/dts.py b/framework/dts.py
index e83a6ce5..25927d47 100644
--- a/framework/dts.py
+++ b/framework/dts.py
@@ -29,39 +29,44 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-import re           # regular expressions module
+import atexit  # register callback when exit
 import configparser  # config parse module
-import os           # operation system module
-import texttable    # text format
-import traceback    # exception traceback
-import inspect      # load attribute
-import atexit       # register callback when exit
-import json         # json format
-import signal       # signal module for debug mode
-import time         # time module for unique output folder
-import copy         # copy module for duplicate variable
-
-import rst          # rst file support
-import sys          # system module
-import settings     # dts settings
-from tester import Tester
-from dut import Dut
-from serializer import Serializer
-from test_case import TestCase
-from test_result import Result
-from stats_reporter import StatsReporter
-from excel_reporter import ExcelReporter
-from json_reporter import JSONReporter
-from exception import TimeoutException, ConfigParseException, VerifyFailure
-from logger import getLogger
-import logger
-import debugger
-from config import CrbsConf
-from checkCase import CheckCase
-from utils import (get_subclasses, copy_instance_attr, create_parallel_locks,
-                   check_dts_python_version)
-import sys
+import copy  # copy module for duplicate variable
 import imp
+import inspect  # load attribute
+import json  # json format
+import os  # operation system module
+import re  # regular expressions module
+import signal  # signal module for debug mode
+import sys  # system module
+import time  # time module for unique output folder
+import traceback  # exception traceback
+
+import framework.debugger as debugger
+import framework.logger as logger
+import framework.rst as rst  # rst file support
+import framework.settings as settings  # dts settings
+import framework.texttable as texttable  # text format
+
+from .checkCase import CheckCase
+from .config import CrbsConf
+from .dut import Dut
+from .excel_reporter import ExcelReporter
+from .exception import ConfigParseException, TimeoutException, VerifyFailure
+from .json_reporter import JSONReporter
+from .logger import getLogger
+from .serializer import Serializer
+from .stats_reporter import StatsReporter
+from .test_case import TestCase
+from .test_result import Result
+from .tester import Tester
+from .utils import (
+    check_dts_python_version,
+    copy_instance_attr,
+    create_parallel_locks,
+    get_subclasses,
+)
+
 imp.reload(sys)
 
 requested_tests = None
@@ -247,7 +252,7 @@ def get_project_obj(project_name, super_class, crbInst, serializer, dut_id):
     project_obj = None
     PROJECT_MODULE_PREFIX = 'project_'
     try:
-        project_module = __import__(PROJECT_MODULE_PREFIX + project_name)
+        project_module = __import__('framework.' + PROJECT_MODULE_PREFIX + project_name)
 
         for project_subclassname, project_subclass in get_subclasses(project_module, super_class):
             project_obj = project_subclass(crbInst, serializer, dut_id)
@@ -445,7 +450,7 @@ def dts_run_suite(duts, tester, test_suites, target, subtitle):
                 append_requested_case_list = case_list.split('\\')
                 suite_name = suite_name[:suite_name.find(':')]
             result.test_suite = suite_name
-            suite_module = __import__('TestSuite_' + suite_name)
+            suite_module = __import__('tests.TestSuite_' + suite_name)
             for test_classname, test_class in get_subclasses(suite_module, TestCase):
 
                 suite_obj = test_class(duts, tester, target, suite_name)
@@ -524,9 +529,6 @@ def run_all(config_file, pkgName, git, patch, skip_setup,
     if not os.path.exists(output_dir):
         os.mkdir(output_dir)
 
-    # add python module search path
-    sys.path.append(suite_dir)
-
     # enable debug mode
     if debug is True:
         settings.save_global_setting(settings.DEBUG_SETTING, 'yes')
diff --git a/framework/dut.py b/framework/dut.py
index f5481d06..fa09a102 100644
--- a/framework/dut.py
+++ b/framework/dut.py
@@ -32,16 +32,18 @@
 import os
 import re
 import time
-import settings
-from config import PortConf,AppNameConf
-from settings import NICS, LOG_NAME_SEP
-from ssh_connection import SSHConnection
-from crb import Crb
-from net_device import GetNicObj
-from virt_resource import VirtResource
-from utils import RED, remove_old_rsa_key
 from uuid import uuid4
 
+import framework.settings as settings
+from nics.net_device import GetNicObj
+
+from .config import AppNameConf, PortConf
+from .crb import Crb
+from .settings import LOG_NAME_SEP, NICS
+from .ssh_connection import SSHConnection
+from .utils import RED, remove_old_rsa_key
+from .virt_resource import VirtResource
+
 
 class Dut(Crb):
 
diff --git a/framework/flow/flow.py b/framework/flow/flow.py
index 24ed2d7d..4b52aab4 100644
--- a/framework/flow/flow.py
+++ b/framework/flow/flow.py
@@ -36,16 +36,16 @@ import copy
 import itertools
 import operator
 from functools import reduce
-from typing import List, FrozenSet, Union, Iterable, Tuple
+from typing import FrozenSet, Iterable, List, Tuple, Union
 
 from scapy.layers.l2 import Ether
 from scapy.packet import Raw
 
-from flow.enums import FlowItemType, FlowActionType
-from flow.exceptions import InvalidFlowItemException
-from flow.flow_action_items import ActionFlowItem
-from flow.flow_items import FlowItem
-from flow.flow_pattern_items import PatternFlowItem, TUNNELING_PROTOCOLS
+from .enums import FlowActionType, FlowItemType
+from .exceptions import InvalidFlowItemException
+from .flow_action_items import ActionFlowItem
+from .flow_items import FlowItem
+from .flow_pattern_items import TUNNELING_PROTOCOLS, PatternFlowItem
 
 # Get reserved mac addresses
 NEVER_MATCH_PACKET = Ether(src="", dst="") / Raw('\x00' * 64)
diff --git a/framework/flow/flow_action_items.py b/framework/flow/flow_action_items.py
index 7130f846..9dc387dc 100644
--- a/framework/flow/flow_action_items.py
+++ b/framework/flow/flow_action_items.py
@@ -30,10 +30,10 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-from typing import FrozenSet, Dict, Tuple
+from typing import Dict, FrozenSet, Tuple
 
-from flow.enums import FlowActionType
-from flow.flow_pattern_items import FlowItem
+from .enums import FlowActionType
+from .flow_items import FlowItem
 
 ALWAYS_ALLOWED_ACTIONS = {FlowActionType.VOID}
 
diff --git a/framework/flow/flow_items.py b/framework/flow/flow_items.py
index d7be3456..49684381 100644
--- a/framework/flow/flow_items.py
+++ b/framework/flow/flow_items.py
@@ -35,12 +35,13 @@ from __future__ import annotations
 import copy
 import itertools
 from functools import reduce
-from typing import FrozenSet, Union, Any, Set, Dict, Tuple, Iterable, Hashable
+from typing import Any, Dict, FrozenSet, Hashable, Iterable, Set, Tuple, Union
 
-from flow.enums import FlowItemType, FlowActionType
-from flow.exceptions import InvalidFlowItemException
-from flow import flow_action_items
-from flow import flow_pattern_items
+import framework.flow.flow_action_items as flow_action_items
+import framework.flow.flow_pattern_items as flow_pattern_items
+
+from .enums import FlowActionType, FlowItemType
+from .exceptions import InvalidFlowItemException
 
 PATTERN_ACTION_ITEMS = {FlowItemType.INVERT, FlowItemType.VOID, FlowItemType.MARK, FlowItemType.META}
 
@@ -90,7 +91,7 @@ class FlowItem(object):
             raise InvalidFlowItemException(self, other)
         elif other.type in self.valid_next_items:
             # This import is in here so there is no circular import
-            from flow.flow import Flow
+            from .flow import Flow
             if isinstance(self, flow_pattern_items.PatternFlowItem):
                 return Flow(pattern_items=[self, other])
             elif isinstance(self, flow_action_items.ActionFlowItem):
diff --git a/framework/flow/flow_pattern_items.py b/framework/flow/flow_pattern_items.py
index 965d8cd2..61377274 100644
--- a/framework/flow/flow_pattern_items.py
+++ b/framework/flow/flow_pattern_items.py
@@ -31,18 +31,18 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 # Allows the type system to handle referencing a class inside it's definition
-from typing import FrozenSet, Dict, List, Tuple, Iterable
+from typing import Dict, FrozenSet, Iterable, List, Tuple
 
-from scapy.layers.inet import UDP, TCP, IP, ICMP
+from scapy.layers.inet import ICMP, IP, TCP, UDP
 from scapy.layers.inet6 import IPv6
-from scapy.layers.l2 import Ether, Dot1Q, GRE, ARP
+from scapy.layers.l2 import ARP, GRE, Dot1Q, Ether
 from scapy.layers.sctp import SCTP
 from scapy.layers.vxlan import VXLAN
 from scapy.packet import Packet
 
-from flow.enums import FlowItemType
-from flow.exceptions import InvalidFlowItemException
-from flow.flow_items import FlowItem
+from .enums import FlowItemType
+from .exceptions import InvalidFlowItemException
+from .flow_items import FlowItem
 
 ALWAYS_ALLOWED_ITEMS = {
     FlowItemType.RAW,
@@ -89,7 +89,7 @@ class PatternFlowItem(FlowItem):
         if other.type in self.valid_next_items or \
                 other.type == FlowItemType.END:
             # This import is in here so there is no circular import
-            from flow.flow import Flow
+            from flow import Flow
             return Flow(pattern_items=[self, other])
         else:
             raise InvalidFlowItemException(self, other)
diff --git a/framework/flow/flow_rule.py b/framework/flow/flow_rule.py
index 361afae3..6687bffe 100644
--- a/framework/flow/flow_rule.py
+++ b/framework/flow/flow_rule.py
@@ -32,9 +32,10 @@
 
 from typing import Union
 
-from flow.enums import *
-from flow.flow import Flow
-import flow.flow_action_items as flow_action_items
+import framework.flow.flow_action_items as flow_action_items
+
+from .enums import *
+from .flow import Flow
 
 
 class FlowPattern(Flow):
diff --git a/framework/flow/generator.py b/framework/flow/generator.py
index c4633a4a..487431c8 100644
--- a/framework/flow/generator.py
+++ b/framework/flow/generator.py
@@ -33,17 +33,26 @@ from __future__ import annotations
 
 import os
 import sys
-from typing import List, Set, Generator, Iterable, FrozenSet, Tuple
+from typing import FrozenSet, Generator, Iterable, List, Set, Tuple
 
 path = os.path.dirname(os.path.dirname(__file__))
 if path not in sys.path:
     sys.path.append(path)
 
-from flow.flow import Flow
-from flow.flow_pattern_items import PATTERN_ITEMS_TYPE_CLASS_MAPPING, PatternFlowItem, \
-    PATTERN_OPERATION_TYPES, ALWAYS_ALLOWED_ITEMS, FlowItemVxlan, FlowItemIpv4, \
-    FlowItemEth, FlowItemGre, L3_FLOW_TYPES, FlowItemUdp
-from flow.flow_rule import FlowItemType
+from .flow import Flow
+from .flow_pattern_items import (
+    ALWAYS_ALLOWED_ITEMS,
+    L3_FLOW_TYPES,
+    PATTERN_ITEMS_TYPE_CLASS_MAPPING,
+    PATTERN_OPERATION_TYPES,
+    FlowItemEth,
+    FlowItemGre,
+    FlowItemIpv4,
+    FlowItemUdp,
+    FlowItemVxlan,
+    PatternFlowItem,
+)
+from .flow_rule import FlowItemType
 
 
 def get_valid_next_protocols(current_protocol, protocol_stack, type_denylist):
diff --git a/framework/ixia_network/ixnet.py b/framework/ixia_network/ixnet.py
index a8de15ca..479b4448 100644
--- a/framework/ixia_network/ixnet.py
+++ b/framework/ixia_network/ixnet.py
@@ -32,19 +32,20 @@
 This module implant from pei,yulong ixNetwork tool.
 """
 
+import csv
+import json
 import os
-import time
 import re
-import requests
-import json
-import csv
+import time
 from collections import OrderedDict
 from datetime import datetime
 
+import requests
+
+from .ixnet_stream import IxnetConfigStream
 
 # local lib deps
 from .packet_parser import PacketParser
-from .ixnet_stream import IxnetConfigStream
 
 
 class IxnetTrafficGenerator(object):
diff --git a/framework/ixia_network/ixnet_stream.py b/framework/ixia_network/ixnet_stream.py
index 56cd53b6..07f3a051 100644
--- a/framework/ixia_network/ixnet_stream.py
+++ b/framework/ixia_network/ixnet_stream.py
@@ -28,10 +28,10 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-import os
 import json
+import os
 
-from utils import convert_int2ip, convert_ip2int
+from framework.utils import convert_int2ip, convert_ip2int
 
 
 class IxnetConfigStream(object):
diff --git a/framework/ixia_network/packet_parser.py b/framework/ixia_network/packet_parser.py
index 6bb0e2f3..3aa23977 100644
--- a/framework/ixia_network/packet_parser.py
+++ b/framework/ixia_network/packet_parser.py
@@ -32,9 +32,9 @@ import os
 from collections import OrderedDict
 
 from scapy.all import conf
+from scapy.fields import ConditionalField
 from scapy.packet import NoPayload
 from scapy.packet import Packet as scapyPacket
-from scapy.fields import ConditionalField
 from scapy.utils import rdpcap
 
 
diff --git a/framework/json_reporter.py b/framework/json_reporter.py
index f7025c2c..4cc5fb17 100644
--- a/framework/json_reporter.py
+++ b/framework/json_reporter.py
@@ -31,6 +31,7 @@
 
 import json
 
+
 class JSONReporter(object):
 
     def __init__(self, filename):
diff --git a/framework/logger.py b/framework/logger.py
index 5a04bdd2..ce1512a1 100644
--- a/framework/logger.py
+++ b/framework/logger.py
@@ -29,14 +29,14 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+import inspect
 import logging
 import os
-import sys
-import inspect
 import re
+import sys
 
-from settings import LOG_NAME_SEP, FOLDERS, load_global_setting, DTS_PARALLEL_SETTING
-from utils import RED
+from .settings import DTS_PARALLEL_SETTING, FOLDERS, LOG_NAME_SEP, load_global_setting
+from .utils import RED
 
 """
 DTS logger module with several log level. DTS framework and TestSuite log
diff --git a/framework/multiple_vm.py b/framework/multiple_vm.py
index 68d2f5ec..ae9b945b 100644
--- a/framework/multiple_vm.py
+++ b/framework/multiple_vm.py
@@ -1,11 +1,13 @@
-import time
 import re
-import threadpool
-import traceback
 import threading
-from settings import DTS_ERR_TBL, save_global_setting, DTS_PARALLEL_SETTING
-from utils import RED
-from logger import getLogger
+import time
+import traceback
+
+import threadpool
+
+from .logger import getLogger
+from .settings import DTS_ERR_TBL, DTS_PARALLEL_SETTING, save_global_setting
+from .utils import RED
 
 
 class MultipleVM(object):
@@ -74,7 +76,8 @@ class MultipleVM(object):
         self.logger.info("Parallel task start for DUT%d %s" % (dut_id, vm_name))
         threading.current_thread().name = vm_name
 
-        from qemu_kvm import QEMUKvm
+        from .qemu_kvm import QEMUKvm
+
         # VM configured by configuration file 
         if 'virt_config' in args:
             suite_name = args['virt_config']['suite_name']
diff --git a/framework/packet.py b/framework/packet.py
index 6d9bf246..e6fd74a0 100644
--- a/framework/packet.py
+++ b/framework/packet.py
@@ -33,9 +33,13 @@ Generic packet create, transmit and analyze module
 Base on scapy(python program for packet manipulation)
 """
 
-from socket import AF_INET6
 from importlib import import_module
+from socket import AF_INET6
+
 from scapy.all import *
+
+from .utils import convert_int2ip, convert_ip2int
+
 # load extension layers
 exec_file = os.path.realpath(__file__)
 DTS_PATH = exec_file.replace('/framework/packet.py', '')
@@ -44,43 +48,27 @@ TMP_PATH = DTS_PATH[:-1] + '/output/tmp/pcap/' if exec_file.endswith('.pyc') els
 if not os.path.exists(TMP_PATH):
     os.system('mkdir -p %s' % TMP_PATH)
 
-DEP_FOLDER = DTS_PATH + '/dep'
-sys.path.append(DEP_FOLDER)
-sys.path.append(DEP_FOLDER + '/scapy_modules')
-
-from utils import convert_ip2int
-from utils import convert_int2ip
-
-scapy_modules_required = {'gtp': ['GTP_U_Header', 'GTPPDUSessionContainer'],
-                          'lldp': ['LLDPDU', 'LLDPDUManagementAddress'],
-                          'Dot1BR': ['Dot1BR'],
-                          'pfcp': ['PFCP'],
-                          'nsh': ['NSH'],
-                          'igmp': ['IGMP'],
-                          'mpls': ['MPLS'],
+scapy_modules_required = {'scapy.contrib.gtp': ['GTP_U_Header', 'GTPPDUSessionContainer'],
+                          'scapy.contrib.lldp': ['LLDPDU', 'LLDPDUManagementAddress'],
+                          'dep.scapy_modules.Dot1BR': ['Dot1BR'],
+                          'scapy.contrib.pfcp': ['PFCP'],
+                          'scapy.contrib.nsh': ['NSH'],
+                          'scapy.contrib.igmp': ['IGMP'],
+                          'scapy.contrib.mpls': ['MPLS'],
                           }
-local_modules = [m[:-3] for m in os.listdir(DEP_FOLDER + '/scapy_modules') if (m.endswith('.py') and not m.startswith('__'))]
 
 for m in scapy_modules_required:
     try:
-        if m in local_modules:
-            module = import_module(m)
-            for clazz in scapy_modules_required[m]:
-                locals().update({clazz: getattr(module, clazz)})
-        else:
-            module = import_module(f'scapy.contrib.{m}')
-            for clazz in scapy_modules_required[m]:
-                locals().update({clazz: getattr(module, clazz)})
+        module = import_module(m)
+        for clazz in scapy_modules_required[m]:
+            locals().update({clazz: getattr(module, clazz)})
     except Exception as e:
         print(e)
 
 def get_scapy_module_impcmd():
     cmd_li = list()
     for m in scapy_modules_required:
-        if m in local_modules:
-            cmd_li.append(f'from {m} import {",".join(scapy_modules_required[m])}')
-        else:
-            cmd_li.append(f'from scapy.contrib.{m} import {",".join(scapy_modules_required[m])}')
+        cmd_li.append(f'from {m} import {",".join(scapy_modules_required[m])}')
     return ';'.join(cmd_li)
 
 SCAPY_IMP_CMD = get_scapy_module_impcmd()
diff --git a/framework/pktgen.py b/framework/pktgen.py
index a00bc090..e4f2bad3 100644
--- a/framework/pktgen.py
+++ b/framework/pktgen.py
@@ -33,21 +33,28 @@ import os
 from copy import deepcopy
 
 from scapy.all import conf
+from scapy.fields import ConditionalField
 from scapy.packet import NoPayload
 from scapy.packet import Packet as scapyPacket
-from scapy.fields import ConditionalField
 from scapy.utils import rdpcap
 
+from .pktgen_base import (
+    PKTGEN_DPDK,
+    PKTGEN_IXIA,
+    PKTGEN_IXIA_NETWORK,
+    PKTGEN_TREX,
+    STAT_TYPE,
+    TRANSMIT_CONT,
+    TRANSMIT_M_BURST,
+    TRANSMIT_S_BURST,
+    DpdkPacketGenerator,
+)
+from .pktgen_ixia import IxiaPacketGenerator
+from .pktgen_ixia_network import IxNetworkPacketGenerator
+from .pktgen_trex import TrexPacketGenerator
+
 # dts libs
-from utils import (convert_int2ip, convert_ip2int,
-                   convert_mac2long, convert_mac2str)
-
-from pktgen_base import (PKTGEN_DPDK, PKTGEN_TREX, PKTGEN_IXIA, PKTGEN_IXIA_NETWORK, STAT_TYPE,
-                         TRANSMIT_CONT, TRANSMIT_M_BURST, TRANSMIT_S_BURST)
-from pktgen_base import DpdkPacketGenerator
-from pktgen_ixia import IxiaPacketGenerator
-from pktgen_ixia_network import IxNetworkPacketGenerator
-from pktgen_trex import TrexPacketGenerator
+from .utils import convert_int2ip, convert_ip2int, convert_mac2long, convert_mac2str
 
 
 class PacketGeneratorHelper(object):
diff --git a/framework/pktgen_base.py b/framework/pktgen_base.py
index f30785d0..023652cc 100644
--- a/framework/pktgen_base.py
+++ b/framework/pktgen_base.py
@@ -29,17 +29,18 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-import time
 import logging
+import time
 from abc import abstractmethod
 from copy import deepcopy
-from logger import getLogger
-from pprint import pformat
 from enum import Enum, unique
+from pprint import pformat
+
+from .config import PktgenConf
+from .logger import getLogger
 
-from config import PktgenConf
 # packet generator name
-from settings import PKTGEN_DPDK, PKTGEN_TREX, PKTGEN_IXIA, PKTGEN_IXIA_NETWORK, PKTGEN
+from .settings import PKTGEN, PKTGEN_DPDK, PKTGEN_IXIA, PKTGEN_IXIA_NETWORK, PKTGEN_TREX
 
 # macro definition
 TRANSMIT_CONT = 'continuous'
diff --git a/framework/pktgen_ixia.py b/framework/pktgen_ixia.py
index 0273f3ad..06667047 100644
--- a/framework/pktgen_ixia.py
+++ b/framework/pktgen_ixia.py
@@ -34,17 +34,20 @@ import string
 import time
 from pprint import pformat
 
-from ssh_connection import SSHConnection
-from settings import SCAPY2IXIA
-from utils import (convert_int2ip, convert_ip2int,
-                   convert_mac2long, convert_mac2str)
-
-from pktgen_base import (PacketGenerator, PKTGEN_IXIA,
-                         TRANSMIT_CONT, TRANSMIT_M_BURST, TRANSMIT_S_BURST)
-
 from scapy.packet import Packet
 from scapy.utils import wrpcap
 
+from .pktgen_base import (
+    PKTGEN_IXIA,
+    TRANSMIT_CONT,
+    TRANSMIT_M_BURST,
+    TRANSMIT_S_BURST,
+    PacketGenerator,
+)
+from .settings import SCAPY2IXIA
+from .ssh_connection import SSHConnection
+from .utils import convert_int2ip, convert_ip2int, convert_mac2long, convert_mac2str
+
 
 class Ixia(SSHConnection):
     """
diff --git a/framework/pktgen_ixia_network.py b/framework/pktgen_ixia_network.py
index 3cca2578..f3a232d2 100644
--- a/framework/pktgen_ixia_network.py
+++ b/framework/pktgen_ixia_network.py
@@ -33,7 +33,7 @@ import time
 import traceback
 from pprint import pformat
 
-from pktgen_base import PacketGenerator, PKTGEN_IXIA_NETWORK
+from .pktgen_base import PKTGEN_IXIA_NETWORK, PacketGenerator
 
 
 class IxNetworkPacketGenerator(PacketGenerator):
diff --git a/framework/pktgen_trex.py b/framework/pktgen_trex.py
index c0b13428..2ad05fe6 100644
--- a/framework/pktgen_trex.py
+++ b/framework/pktgen_trex.py
@@ -29,14 +29,20 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+import logging
 import os
 import sys
 import time
-import logging
 from pprint import pformat
 
-from pktgen_base import (PacketGenerator, PKTGEN_TREX, PKTGEN,
-                         TRANSMIT_CONT, TRANSMIT_M_BURST, TRANSMIT_S_BURST)
+from .pktgen_base import (
+    PKTGEN,
+    PKTGEN_TREX,
+    TRANSMIT_CONT,
+    TRANSMIT_M_BURST,
+    TRANSMIT_S_BURST,
+    PacketGenerator,
+)
 
 
 class TrexConfigVm(object):
@@ -44,7 +50,7 @@ class TrexConfigVm(object):
     config one stream vm format of trex
     '''
     def __init__(self):
-        from trex_stl_lib.api import (ipv4_str_to_num, mac2str, is_valid_ipv4_ret)
+        from trex_stl_lib.api import ipv4_str_to_num, is_valid_ipv4_ret, mac2str
         self.ipv4_str_to_num = ipv4_str_to_num
         self.is_valid_ipv4_ret = is_valid_ipv4_ret
         self.mac2str = mac2str
@@ -214,10 +220,16 @@ class TrexConfigStream(object):
 
     def __init__(self):
         from trex_stl_lib.api import (
-                    STLTXCont, STLTXSingleBurst, STLTXMultiBurst,
-                    STLPktBuilder, STLProfile, STLVM,
-                    STLStream, STLStreamDstMAC_PKT,
-                    STLFlowLatencyStats)
+            STLVM,
+            STLFlowLatencyStats,
+            STLPktBuilder,
+            STLProfile,
+            STLStream,
+            STLStreamDstMAC_PKT,
+            STLTXCont,
+            STLTXMultiBurst,
+            STLTXSingleBurst,
+        )
 
         # set trex class
         self.STLStream = STLStream
@@ -447,6 +459,7 @@ class TrexPacketGenerator(PacketGenerator):
         # import t-rex libs
         sys.path.insert(0, trex_lib_dir)
         from trex_stl_lib.api import STLClient
+
         # set trex class
         self.STLClient = STLClient
         # get configuration from pktgen config file
diff --git a/framework/plotgraph.py b/framework/plotgraph.py
index 56fd2b71..1ef26bce 100644
--- a/framework/plotgraph.py
+++ b/framework/plotgraph.py
@@ -30,11 +30,14 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 import math
+
 import matplotlib as mp
+
 mp.use('Agg')
+import itertools
+
 import matplotlib.pyplot as plt
 import numpy as np
-import itertools
 
 """
 Generate graphs for each test suite
diff --git a/framework/plotting.py b/framework/plotting.py
index 7d036fe4..0f8c86da 100644
--- a/framework/plotting.py
+++ b/framework/plotting.py
@@ -31,13 +31,15 @@
 
 import os
 import shutil
-from plotgraph import Plot2DGraph
+
 from docutils.parsers.rst.directives import path
-from rst import path2Result
-import plotgraph
-import utils
-from exception import VerifyFailure
 
+import framework.plotgraph as plotgraph
+import framework.utils as utils
+
+from .exception import VerifyFailure
+from .plotgraph import Plot2DGraph
+from .rst import path2Result
 
 """
 Generate Plots for performance test results
diff --git a/framework/pmd_output.py b/framework/pmd_output.py
index 838fa0bd..e2bf3687 100644
--- a/framework/pmd_output.py
+++ b/framework/pmd_output.py
@@ -32,8 +32,9 @@
 import os
 import re
 from time import sleep
-from settings import TIMEOUT, PROTOCOL_PACKET_SIZE, get_nic_driver
-from utils import create_mask
+
+from .settings import PROTOCOL_PACKET_SIZE, TIMEOUT, get_nic_driver
+from .utils import create_mask
 
 
 class PmdOutput():
diff --git a/framework/project_dpdk.py b/framework/project_dpdk.py
index 51d32229..9927bcc1 100644
--- a/framework/project_dpdk.py
+++ b/framework/project_dpdk.py
@@ -32,16 +32,25 @@
 import os
 import re
 
-from settings import NICS, load_global_setting, save_global_setting, accepted_nic
-from settings import DPDK_RXMODE_SETTING, HOST_DRIVER_SETTING, HOST_DRIVER_MODE_SETTING, HOST_BUILD_TYPE_SETTING
-from settings import HOST_SHARED_LIB_SETTING, HOST_SHARED_LIB_PATH
-from ssh_connection import SSHConnection
-from crb import Crb
-from dut import Dut
-from tester import Tester
-from logger import getLogger
-from settings import DRIVERS
-from utils import RED
+from .crb import Crb
+from .dut import Dut
+from .logger import getLogger
+from .settings import (
+    DPDK_RXMODE_SETTING,
+    DRIVERS,
+    HOST_BUILD_TYPE_SETTING,
+    HOST_DRIVER_MODE_SETTING,
+    HOST_DRIVER_SETTING,
+    HOST_SHARED_LIB_PATH,
+    HOST_SHARED_LIB_SETTING,
+    NICS,
+    accepted_nic,
+    load_global_setting,
+    save_global_setting,
+)
+from .ssh_connection import SSHConnection
+from .tester import Tester
+from .utils import RED
 
 
 class DPDKdut(Dut):
@@ -131,7 +140,7 @@ class DPDKdut(Dut):
 
         elif drivername == "mlx5_core":
             pass
- 
+
         elif drivername == "igb_uio":
             self.send_expect("modprobe uio", "#", 70)
             out = self.send_expect("lsmod | grep igb_uio", "#")
diff --git a/framework/qemu_kvm.py b/framework/qemu_kvm.py
index 757737ec..515a4c04 100644
--- a/framework/qemu_kvm.py
+++ b/framework/qemu_kvm.py
@@ -30,15 +30,14 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
-import time
-import re
 import os
+import re
+import time
 
-from virt_base import VirtBase
-from virt_base import ST_NOTSTART, ST_PAUSE, ST_RUNNING, ST_UNKNOWN
-from exception import StartVMFailedException
-from settings import get_host_ip, load_global_setting, DTS_PARALLEL_SETTING
-from utils import parallel_lock, RED
+from .exception import StartVMFailedException
+from .settings import DTS_PARALLEL_SETTING, get_host_ip, load_global_setting
+from .utils import RED, parallel_lock
+from .virt_base import ST_NOTSTART, ST_PAUSE, ST_RUNNING, ST_UNKNOWN, VirtBase
 
 # This name is directly defined in the qemu guest service
 # So you can not change it except it is changed by the service
diff --git a/framework/qemu_libvirt.py b/framework/qemu_libvirt.py
index e0aeb6c6..6d3733cf 100644
--- a/framework/qemu_libvirt.py
+++ b/framework/qemu_libvirt.py
@@ -29,22 +29,22 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-import time
-import re
 import os
-
-import utils
-from dut import Dut
-from ssh_connection import SSHConnection
-from virt_base import VirtBase
-from virt_resource import VirtResource
-from logger import getLogger
-from config import VirtConf
-from config import VIRTCONF
-from exception import StartVMFailedException
+import re
+import time
 import xml.etree.ElementTree as ET
-from xml.etree.ElementTree import ElementTree
 from xml.dom import minidom
+from xml.etree.ElementTree import ElementTree
+
+import framework.utils as utils
+
+from .config import VIRTCONF, VirtConf
+from .dut import Dut
+from .exception import StartVMFailedException
+from .logger import getLogger
+from .ssh_connection import SSHConnection
+from .virt_base import VirtBase
+from .virt_resource import VirtResource
 
 
 class LibvirtKvm(VirtBase):
diff --git a/framework/rst.py b/framework/rst.py
index 2b8e6132..daaf6f30 100644
--- a/framework/rst.py
+++ b/framework/rst.py
@@ -30,15 +30,16 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 import os
-import shutil
 import re
-from exception import VerifyFailure
+import shutil
+
+from .exception import VerifyFailure
 
 """
 Generate Rst Test Result Report
 
 Example:
-    import rst
+    import framework.rst as rst
     rst.write_title("Test Case: " + test_case.__name__)
     out = table.draw()
     rst.write_text('\n' + out + '\n\n')
diff --git a/framework/settings.py b/framework/settings.py
index c08b8709..ae9dc164 100644
--- a/framework/settings.py
+++ b/framework/settings.py
@@ -32,9 +32,9 @@
 Folders for framework running environment.
 """
 import os
-import sys
 import re
 import socket
+import sys
 
 FOLDERS = {
     'Framework': 'framework',
diff --git a/framework/ssh_connection.py b/framework/ssh_connection.py
index c9886b2b..8887ec52 100644
--- a/framework/ssh_connection.py
+++ b/framework/ssh_connection.py
@@ -29,8 +29,8 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-from ssh_pexpect import SSHPexpect
-from settings import USERNAME
+from .settings import USERNAME
+from .ssh_pexpect import SSHPexpect
 
 """
 Global structure for saving connections
diff --git a/framework/ssh_pexpect.py b/framework/ssh_pexpect.py
index fbc7dd4a..783f989f 100644
--- a/framework/ssh_pexpect.py
+++ b/framework/ssh_pexpect.py
@@ -1,9 +1,11 @@
 import time
+
 import pexpect
 from pexpect import pxssh
-from debugger import ignore_keyintr, aware_keyintr
-from exception import TimeoutException, SSHConnectionException, SSHSessionDeadException
-from utils import RED, GREEN, parallel_lock
+
+from .debugger import aware_keyintr, ignore_keyintr
+from .exception import SSHConnectionException, SSHSessionDeadException, TimeoutException
+from .utils import GREEN, RED, parallel_lock
 
 """
 Module handle ssh sessions between tester and DUT.
diff --git a/framework/test_case.py b/framework/test_case.py
index 98b716b9..e2387435 100644
--- a/framework/test_case.py
+++ b/framework/test_case.py
@@ -33,23 +33,34 @@
 A base class for creating DTF test cases.
 """
 import re
-import debugger
-import traceback
 import signal
 import time
-
-from exception import VerifyFailure, VerifySkip, TimeoutException
-from settings import DRIVERS, NICS, get_nic_name, load_global_setting
-from settings import PERF_SETTING, FUNC_SETTING, DEBUG_SETTING
-from settings import DEBUG_CASE_SETTING, HOST_DRIVER_SETTING
-from settings import UPDATE_EXPECTED, SUITE_SECTION_NAME
-from rst import RstReport
-from test_result import ResultTable, Result
-from logger import getLogger
-from config import SuiteConf
-from utils import BLUE, RED
+import traceback
 from functools import wraps
 
+import framework.debugger as debugger
+
+from .config import SuiteConf
+from .exception import TimeoutException, VerifyFailure, VerifySkip
+from .logger import getLogger
+from .rst import RstReport
+from .settings import (
+    DEBUG_CASE_SETTING,
+    DEBUG_SETTING,
+    DRIVERS,
+    FUNC_SETTING,
+    HOST_DRIVER_SETTING,
+    NICS,
+    PERF_SETTING,
+    SUITE_SECTION_NAME,
+    UPDATE_EXPECTED,
+    get_nic_name,
+    load_global_setting,
+)
+from .test_result import Result, ResultTable
+from .utils import BLUE, RED
+
+
 class TestCase(object):
 
     def __init__(self, duts, tester, target, suitename):
@@ -377,7 +388,7 @@ class TestCase(object):
         # prepare debugger rerun case environment
         if self._enable_debug or self._debug_case:
             debugger.AliveSuite = self
-            debugger.AliveModule = __import__('TestSuite_' + self.suite_name)
+            debugger.AliveModule = __import__('tests.TestSuite_' + self.suite_name)
 
         if load_global_setting(FUNC_SETTING) == 'yes':
             for case_obj in self._get_functional_cases():
diff --git a/framework/test_result.py b/framework/test_result.py
index a718034d..13f3f1c6 100644
--- a/framework/test_result.py
+++ b/framework/test_result.py
@@ -32,7 +32,7 @@
 """
 Generic result container and reporters
 """
-import texttable    # text format
+import framework.texttable as texttable  # text format
 
 
 class Result(object):
diff --git a/framework/tester.py b/framework/tester.py
index 8f6e97ae..2db2aeed 100644
--- a/framework/tester.py
+++ b/framework/tester.py
@@ -33,22 +33,30 @@
 Interface for bulk traffic generators.
 """
 
-import re
-import subprocess
 import os
-from time import sleep
-from settings import NICS, load_global_setting, PERF_SETTING
-from settings import USERNAME, PKTGEN, PKTGEN_GRP
-from crb import Crb
-from net_device import GetNicObj
 import random
-from utils import (GREEN, convert_int2ip, convert_ip2int,
-                   check_crb_python_version)
-from exception import ParameterInvalidException
+import re
+import subprocess
 from multiprocessing import Process
-from pktgen import getPacketGenerator
-from config import PktgenConf
-from packet import SCAPY_IMP_CMD
+from time import sleep
+
+from nics.net_device import GetNicObj
+
+from .config import PktgenConf
+from .crb import Crb
+from .exception import ParameterInvalidException
+from .packet import SCAPY_IMP_CMD
+from .pktgen import getPacketGenerator
+from .settings import (
+    NICS,
+    PERF_SETTING,
+    PKTGEN,
+    PKTGEN_GRP,
+    USERNAME,
+    load_global_setting,
+)
+from .utils import GREEN, check_crb_python_version, convert_int2ip, convert_ip2int
+
 
 class Tester(Crb):
 
@@ -665,11 +673,6 @@ class Tester(Crb):
         """
         Send several random packets and check rx packets matched
         """
-        # load functions in packet module
-        module = __import__("packet")
-        pkt_c = getattr(module, "Packet")
-        compare_f = getattr(module, "compare_pktload")
-        strip_f = getattr(module, "strip_pktload")
         tx_pkts = {}
         rx_inst = {}
         # packet type random between tcp/udp/ipv6
@@ -678,13 +681,13 @@ class Tester(Crb):
             txIntf = self.get_interface(txport)
             rxIntf = self.get_interface(rxport)
             self.logger.info(GREEN("Preparing transmit packets, please wait few minutes..."))
-            pkt = pkt_c()
+            pkt = Packet()
             pkt.generate_random_pkts(pktnum=pktnum, random_type=random_type, ip_increase=True, random_payload=True,
                                      options={"layers_config": params})
 
             tx_pkts[txport] = pkt
             # sniff packets
-            inst = module.start_tcpdump(self, rxIntf, count=pktnum,
+            inst = start_tcpdump(self, rxIntf, count=pktnum,
                                         filters=[{'layer': 'network', 'config': {'srcport': '65535'}},
                                                  {'layer': 'network', 'config': {'dstport': '65535'}}])
             rx_inst[rxport] = inst
@@ -708,10 +711,10 @@ class Tester(Crb):
                     break
             else:
                 self.logger.info('exceeded timeout, force to stop background packet sending to avoid dead loop')
-                pkt_c.stop_send_pkt_bg(i)
+                Packet.stop_send_pkt_bg(i)
         prev_id = -1
         for txport, rxport in portList:
-            p = module.stop_and_load_tcpdump_packets(rx_inst[rxport])
+            p = stop_and_load_tcpdump_packets(rx_inst[rxport])
             recv_pkts = p.pktgen.pkts
             # only report when received number not matched
             if len(tx_pkts[txport].pktgen.pkts) > len(recv_pkts):
@@ -744,11 +747,11 @@ class Tester(Crb):
                     else:
                         prev_id = t_idx
 
-                if compare_f(tx_pkts[txport].pktgen.pkts[idx], recv_pkts[idx], "L4") is False:
+                if compare_pktload(tx_pkts[txport].pktgen.pkts[idx], recv_pkts[idx], "L4") is False:
                     self.logger.warning("Pkt received index %d not match original " \
                           "index %d" % (idx, idx))
-                    self.logger.info("Sent: %s" % strip_f(tx_pkts[txport].pktgen.pkts[idx], "L4"))
-                    self.logger.info("Recv: %s" % strip_f(recv_pkts[idx], "L4"))
+                    self.logger.info("Sent: %s" % strip_pktload(tx_pkts[txport].pktgen.pkts[idx], "L4"))
+                    self.logger.info("Recv: %s" % strip_pktload(recv_pkts[idx], "L4"))
                     return False
 
         return True
@@ -757,19 +760,14 @@ class Tester(Crb):
         """
         Wrapper for packet module sniff_packets
         """
-        # load functions in packet module
-        packet = __import__("packet")
-        inst = packet.start_tcpdump(self, intf=intf, count=count, filters=filters, lldp_forbid=lldp_forbid)
+        inst = start_tcpdump(self, intf=intf, count=count, filters=filters, lldp_forbid=lldp_forbid)
         return inst
 
     def load_tcpdump_sniff_packets(self, index='', timeout=1):
         """
         Wrapper for packet module load_pcapfile
         """
-        # load functions in packet module
-        packet = __import__("packet")
-        p = packet.stop_and_load_tcpdump_packets(index, timeout=timeout)
-
+        p = stop_and_load_tcpdump_packets(index, timeout=timeout)
         return p
 
     def kill_all(self, killall=False):
diff --git a/framework/texttable.py b/framework/texttable.py
index d4aad6f6..42eb6c76 100644
--- a/framework/texttable.py
+++ b/framework/texttable.py
@@ -94,9 +94,9 @@ Maximilian Hils:
     - fix minor bug for Python 3 compatibility
 """
 
-import sys
-import string
 import re
+import string
+import sys
 
 try:
     if sys.version >= '2.3':
diff --git a/framework/utils.py b/framework/utils.py
index 6084ea6a..70759195 100644
--- a/framework/utils.py
+++ b/framework/utils.py
@@ -29,13 +29,13 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-import json         # json format
-import re
-import os
-import sys
 import inspect
+import json  # json format
+import os
+import re
 import socket
 import struct
+import sys
 import threading
 import types
 from functools import wraps
diff --git a/framework/virt_base.py b/framework/virt_base.py
index f19cbc4b..148a4d18 100644
--- a/framework/virt_base.py
+++ b/framework/virt_base.py
@@ -30,19 +30,18 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 import os
 import sys
-import traceback
 import threading
+import traceback
 from random import randint
 
+import framework.exception as exception
+import framework.utils as utils
 
-import utils
-import exception
-from dut import Dut
-from config import VirtConf
-from config import VIRTCONF
-from logger import getLogger
-from settings import CONFIG_ROOT_PATH
-from virt_dut import VirtDut
+from .config import VIRTCONF, VirtConf
+from .dut import Dut
+from .logger import getLogger
+from .settings import CONFIG_ROOT_PATH
+from .virt_dut import VirtDut
 
 ST_NOTSTART = "NOTSTART"
 ST_PAUSE = "PAUSE"
diff --git a/framework/virt_common.py b/framework/virt_common.py
index 628cadf7..6f509eb0 100644
--- a/framework/virt_common.py
+++ b/framework/virt_common.py
@@ -30,11 +30,11 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 import os
 
-from config import VirtConf
-from settings import CONFIG_ROOT_PATH
+from .config import VirtConf
+from .qemu_kvm import QEMUKvm
+from .qemu_libvirt import LibvirtKvm
+from .settings import CONFIG_ROOT_PATH
 
-from qemu_kvm import QEMUKvm
-from qemu_libvirt import LibvirtKvm
 
 def VM(dut, vm_name, suite_name):
     conf = VirtConf(CONFIG_ROOT_PATH + os.sep + suite_name + '.cfg')
diff --git a/framework/virt_dut.py b/framework/virt_dut.py
index 9b0126b3..bde65667 100644
--- a/framework/virt_dut.py
+++ b/framework/virt_dut.py
@@ -32,14 +32,21 @@
 import os
 import re
 import time
-import settings
-from utils import RED, parallel_lock
-from config import PortConf, AppNameConf
-from settings import NICS, LOG_NAME_SEP, get_netdev, load_global_setting, HOST_BUILD_TYPE_SETTING
-from project_dpdk import DPDKdut
-from dut import Dut
-from net_device import GetNicObj
-from net_device import RemoveNicObj
+
+import framework.settings as settings
+from nics.net_device import GetNicObj, RemoveNicObj
+
+from .config import AppNameConf, PortConf
+from .dut import Dut
+from .project_dpdk import DPDKdut
+from .settings import (
+    HOST_BUILD_TYPE_SETTING,
+    LOG_NAME_SEP,
+    NICS,
+    get_netdev,
+    load_global_setting,
+)
+from .utils import RED, parallel_lock
 
 
 class VirtDut(DPDKdut):
diff --git a/framework/virt_resource.py b/framework/virt_resource.py
index 6ae2a28b..8a19f1b2 100644
--- a/framework/virt_resource.py
+++ b/framework/virt_resource.py
@@ -30,7 +30,7 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 from random import randint
 
-from utils import get_obj_funcs, parallel_lock, RED
+from .utils import RED, get_obj_funcs, parallel_lock
 
 INIT_FREE_PORT = 6000
 INIT_SERIAL_PORT = 7000
diff --git a/framework/virt_scene.py b/framework/virt_scene.py
index e67b3b6b..cc36a09b 100644
--- a/framework/virt_scene.py
+++ b/framework/virt_scene.py
@@ -29,15 +29,15 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 import time
-import utils
-
-from settings import CONFIG_ROOT_PATH, get_netdev
-from config import VirtConf
-from config import VIRTCONF
-from exception import *
-from qemu_kvm import QEMUKvm
-from pmd_output import PmdOutput
-from utils import create_mask
+
+import framework.utils as utils
+
+from .config import VIRTCONF, VirtConf
+from .exception import *
+from .pmd_output import PmdOutput
+from .qemu_kvm import QEMUKvm
+from .settings import CONFIG_ROOT_PATH, get_netdev
+from .utils import create_mask
 
 # scenario module for handling scenario
 # 1. load configurations
diff --git a/framework/main.py b/main.py
similarity index 96%
rename from framework/main.py
rename to main.py
index a081b85d..10ed88b5 100755
--- a/framework/main.py
+++ b/main.py
@@ -34,20 +34,16 @@
 A test framework for testing DPDK.
 """
 
-import os
-import sys
 import argparse
+import os
 import subprocess
+import sys
+
+from framework import dts
 
 # change operation directory
-os.chdir("../")
 cwd = os.getcwd()
-sys.path.append(cwd + '/nics')
-sys.path.append(cwd + '/framework')
-#sys.path.append(cwd + '/tests') # suites module path should be loaded in dts/run_all, not here
-sys.path.append(cwd + '/dep')
 
-import dts
 
 def git_build_package(gitLabel, pkgName):
     """
diff --git a/nics/__init__.py b/nics/__init__.py
new file mode 100644
index 00000000..ae0043b7
--- /dev/null
+++ b/nics/__init__.py
@@ -0,0 +1,30 @@
+#!/usr/bin/python3
+# BSD LICENSE
+#
+# Copyright (c) 2021 PANTHEON.tech s.r.o.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#   * Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+#   * Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in
+#     the documentation and/or other materials provided with the
+#     distribution.
+#   * Neither the name of PANTHEON.tech s.r.o. nor the names of its
+#     contributors may be used to endorse or promote products derived
+#     from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/nics/net_device.py b/nics/net_device.py
index 3ddfc4eb..96f31327 100644
--- a/nics/net_device.py
+++ b/nics/net_device.py
@@ -32,14 +32,13 @@
 
 import os
 import re
-from functools import wraps
 import time
+from functools import wraps
 
-
-import settings
-from crb import Crb
-from settings import TIMEOUT, HEADER_SIZE
-from utils import RED
+import framework.settings as settings
+from framework.crb import Crb
+from framework.settings import HEADER_SIZE, TIMEOUT
+from framework.utils import RED
 
 NICS_LIST = []      # global list for save nic objects
 
diff --git a/nics/perf_report.py b/nics/perf_report.py
index b80067ba..e2893abf 100644
--- a/nics/perf_report.py
+++ b/nics/perf_report.py
@@ -30,19 +30,22 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 import os
-import time
 import re
+import smtplib
+import time
+from collections import OrderedDict
+from email.mime.multipart import MIMEMultipart
+from email.mime.text import MIMEText
 
 import jinja2
-import smtplib
 
-from email.mime.text import MIMEText
-from email.mime.multipart import MIMEMultipart
-from collections import OrderedDict
 #install GitPython
 from git import Repo
-from system_info import SystemInfo
-import utils
+
+import framework.utils as utils
+
+from .system_info import SystemInfo
+
 
 def get_dpdk_git_info(repo_dir="/root/dpdk"):
 
@@ -63,14 +66,14 @@ def get_dpdk_git_info(repo_dir="/root/dpdk"):
     return commit
 
 def generate_html_report(file_tpl, perf_data, git_info, nic_info, system_info):
-   
+
     if not os.path.exists(file_tpl):
         return None
 
     templateLoader = jinja2.FileSystemLoader(searchpath = "/")
     templateEnv = jinja2.Environment(loader=templateLoader)
     template = templateEnv.get_template(file_tpl)
- 
+
     templateVars = { "title" : "Daily Performance Test Report", \
                      "test_results" : perf_data, \
                      "system_infos" : system_info, \
@@ -106,6 +109,6 @@ def send_email(sender, mailto, message, smtp_server):
         print(utils.RED("Failed to send email " + str(e)))
 
 def send_html_report(sender, mailto, subject, html_msg, smtp_server):
-    
+
     message = html_message(sender, mailto, subject, html_msg)
     send_email(sender, mailto, message, smtp_server)
diff --git a/nics/system_info.py b/nics/system_info.py
index 70fdbf6f..9ee96091 100644
--- a/nics/system_info.py
+++ b/nics/system_info.py
@@ -30,13 +30,14 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 import os
-import time
 import re
-
+import time
 from collections import OrderedDict
+
 #install GitPython
 from git import Repo
 
+
 class SystemInfo(object):
 
     def __init__(self, dut, pci_device_id):
diff --git a/pyproject.toml b/pyproject.toml
new file mode 100644
index 00000000..e5befba3
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,3 @@
+[tool.isort]
+profile = "black"
+
diff --git a/requirements.txt b/requirements.txt
index fae0ace8..dc71e603 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -38,3 +38,4 @@ pcapy
 xlrd
 scapy==2.4.4
 threadpool
+isort
\ No newline at end of file
diff --git a/tests/TestSuite_ABI_stable.py b/tests/TestSuite_ABI_stable.py
index 522296ad..9c5a206d 100644
--- a/tests/TestSuite_ABI_stable.py
+++ b/tests/TestSuite_ABI_stable.py
@@ -51,12 +51,16 @@ DPDK Test suite.
 Test support of ABI .
 
 """
-import utils
 import time
 
-from test_case import TestCase
-from pmd_output import PmdOutput
-from settings import load_global_setting, HOST_SHARED_LIB_SETTING, HOST_SHARED_LIB_PATH
+import framework.utils as utils
+from framework.pmd_output import PmdOutput
+from framework.settings import (
+    HOST_SHARED_LIB_PATH,
+    HOST_SHARED_LIB_SETTING,
+    load_global_setting,
+)
+from framework.test_case import TestCase
 
 
 class TestABIStable(TestCase):
diff --git a/tests/TestSuite_acl.py b/tests/TestSuite_acl.py
index 963f3fb5..e713ed0d 100644
--- a/tests/TestSuite_acl.py
+++ b/tests/TestSuite_acl.py
@@ -30,7 +30,7 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
-from test_case import TestCase
+from framework.test_case import TestCase
 
 
 class TestACL(TestCase):
diff --git a/tests/TestSuite_af_xdp_2.py b/tests/TestSuite_af_xdp_2.py
index bcc9a751..cbbfa5d6 100644
--- a/tests/TestSuite_af_xdp_2.py
+++ b/tests/TestSuite_af_xdp_2.py
@@ -32,10 +32,11 @@
 import os
 import re
 import time
-from settings import HEADER_SIZE
-from test_case import TestCase
-from packet import Packet
-from pktgen import PacketGeneratorHelper
+
+from framework.packet import Packet
+from framework.pktgen import PacketGeneratorHelper
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
 
 
 class TestAfXdp(TestCase):
diff --git a/tests/TestSuite_blocklist.py b/tests/TestSuite_blocklist.py
index 3692dfbb..591a45be 100644
--- a/tests/TestSuite_blocklist.py
+++ b/tests/TestSuite_blocklist.py
@@ -33,10 +33,11 @@
 DPDK Test suite.
 Test device blocklisting.
 """
-import utils
-from test_case import TestCase
-from pmd_output import PmdOutput
-from settings import DRIVERS
+import framework.utils as utils
+from framework.pmd_output import PmdOutput
+from framework.settings import DRIVERS
+from framework.test_case import TestCase
+
 
 class TestBlockList(TestCase):
     def set_up_all(self):
diff --git a/tests/TestSuite_cbdma.py b/tests/TestSuite_cbdma.py
index 0cf598dc..dd1e4e44 100644
--- a/tests/TestSuite_cbdma.py
+++ b/tests/TestSuite_cbdma.py
@@ -33,13 +33,14 @@
 DPDK Test suite.
 """
 
-import utils
 import re
 import time
-from test_case import TestCase
-from packet import Packet
-from pktgen import TRANSMIT_CONT
-from pmd_output import PmdOutput
+
+import framework.utils as utils
+from framework.packet import Packet
+from framework.pktgen import TRANSMIT_CONT
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
 
 
 class TestCBDMA(TestCase):
diff --git a/tests/TestSuite_checksum_offload.py b/tests/TestSuite_checksum_offload.py
index 36a351cc..6e2b59c6 100644
--- a/tests/TestSuite_checksum_offload.py
+++ b/tests/TestSuite_checksum_offload.py
@@ -41,31 +41,25 @@ import os
 import re
 import subprocess
 import time
-from typing import List, Union, Tuple, Pattern
+from typing import List, Pattern, Tuple, Union
 
-import time
-
-from rst import RstReport
-import utils
-from exception import VerifyFailure
-from pktgen import PacketGeneratorHelper
-from scapy.layers.inet import UDP, TCP, IP
+from scapy.layers.inet import IP, TCP, UDP
 from scapy.layers.inet6 import IPv6
-from scapy.layers.l2 import Ether, GRE
+from scapy.layers.l2 import GRE, Ether
 from scapy.layers.sctp import SCTP
 from scapy.layers.vxlan import VXLAN
 from scapy.packet import Raw
-from scapy.utils import wrpcap, rdpcap
-from test_capabilities import DRIVER_TEST_LACK_CAPA
-from test_case import TestCase
-
-from pmd_output import PmdOutput
-from test_capabilities import DRIVER_TEST_LACK_CAPA
-from pktgen import PacketGeneratorHelper
-from exception import VerifyFailure
-import packet
-
-from settings import FOLDERS
+from scapy.utils import rdpcap, wrpcap
+
+import framework.packet as packet
+import framework.utils as utils
+from framework.exception import VerifyFailure
+from framework.pktgen import PacketGeneratorHelper
+from framework.pmd_output import PmdOutput
+from framework.rst import RstReport
+from framework.settings import FOLDERS
+from framework.test_capabilities import DRIVER_TEST_LACK_CAPA
+from framework.test_case import TestCase
 
 l3_proto_classes = [
     IP,
diff --git a/tests/TestSuite_cloud_filter_with_l4_port.py b/tests/TestSuite_cloud_filter_with_l4_port.py
index 272b86cb..d6df8b2e 100644
--- a/tests/TestSuite_cloud_filter_with_l4_port.py
+++ b/tests/TestSuite_cloud_filter_with_l4_port.py
@@ -36,20 +36,21 @@ Test the support of generic flow API by Poll Mode Drivers.
 
 """
 
-import utils
-import time
 import re
+import time
 
-from test_case import TestCase
-from pmd_output import PmdOutput
-from settings import DRIVERS
-from crb import Crb
-from dut import Dut
-import packet
-from exception import VerifyFailure
 import scapy.layers.inet
 from scapy.utils import rdpcap
 
+import framework.packet as packet
+import framework.utils as utils
+from framework.crb import Crb
+from framework.dut import Dut
+from framework.exception import VerifyFailure
+from framework.pmd_output import PmdOutput
+from framework.settings import DRIVERS
+from framework.test_case import TestCase
+
 MAX_QUEUE = 16
 
 class TestCloudFilterWithL4Port(TestCase):
diff --git a/tests/TestSuite_cmdline.py b/tests/TestSuite_cmdline.py
index c189934f..7557c7f5 100644
--- a/tests/TestSuite_cmdline.py
+++ b/tests/TestSuite_cmdline.py
@@ -34,9 +34,8 @@ DPDK Test suite.
 Test cmdline.
 """
 
-import utils
-
-from test_case import TestCase
+import framework.utils as utils
+from framework.test_case import TestCase
 
 
 class TestCmdline(TestCase):
diff --git a/tests/TestSuite_compressdev_isal_pmd.py b/tests/TestSuite_compressdev_isal_pmd.py
index 1c2b7775..559c68de 100644
--- a/tests/TestSuite_compressdev_isal_pmd.py
+++ b/tests/TestSuite_compressdev_isal_pmd.py
@@ -30,11 +30,13 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
-import os
-from test_case import TestCase
-import json
 import copy
-import compress_common as cc
+import json
+import os
+
+import tests.compress_common as cc
+from framework.test_case import TestCase
+
 
 class TestCompressdevIsalPmd(TestCase):
 
diff --git a/tests/TestSuite_compressdev_qat_pmd.py b/tests/TestSuite_compressdev_qat_pmd.py
index 4ac45938..38f0bff3 100644
--- a/tests/TestSuite_compressdev_qat_pmd.py
+++ b/tests/TestSuite_compressdev_qat_pmd.py
@@ -30,11 +30,12 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
-import os
-from test_case import TestCase
-import json
 import copy
-import compress_common as cc
+import json
+import os
+
+import tests.compress_common as cc
+from framework.test_case import TestCase
 
 
 class TestCompressdevQatPmd(TestCase):
diff --git a/tests/TestSuite_compressdev_zlib_pmd.py b/tests/TestSuite_compressdev_zlib_pmd.py
index 35a7502b..f1b3d4c4 100644
--- a/tests/TestSuite_compressdev_zlib_pmd.py
+++ b/tests/TestSuite_compressdev_zlib_pmd.py
@@ -30,11 +30,13 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
-import os
-from test_case import TestCase
-import json
 import copy
-import compress_common as cc
+import json
+import os
+
+import tests.compress_common as cc
+from framework.test_case import TestCase
+
 
 class TestCompressdevZlibPmd(TestCase):
 
diff --git a/tests/TestSuite_coremask.py b/tests/TestSuite_coremask.py
index 43c68e9d..db809cf3 100644
--- a/tests/TestSuite_coremask.py
+++ b/tests/TestSuite_coremask.py
@@ -36,10 +36,9 @@ Test coremask parsing in DPDK.
 
 """
 
-import utils
-
-from exception import VerifyFailure
-from test_case import TestCase
+import framework.utils as utils
+from framework.exception import VerifyFailure
+from framework.test_case import TestCase
 
 #
 #
diff --git a/tests/TestSuite_crypto_perf_cryptodev_perf.py b/tests/TestSuite_crypto_perf_cryptodev_perf.py
index d1f104e2..759c5186 100644
--- a/tests/TestSuite_crypto_perf_cryptodev_perf.py
+++ b/tests/TestSuite_crypto_perf_cryptodev_perf.py
@@ -29,10 +29,11 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-import re
 import json
-from test_case import TestCase
-import cryptodev_common as cc
+import re
+
+import tests.cryptodev_common as cc
+from framework.test_case import TestCase
 
 
 class PerfTestsCryptodev(TestCase):
diff --git a/tests/TestSuite_cvl_advanced_iavf_rss.py b/tests/TestSuite_cvl_advanced_iavf_rss.py
index 249f6bcf..25dd9976 100644
--- a/tests/TestSuite_cvl_advanced_iavf_rss.py
+++ b/tests/TestSuite_cvl_advanced_iavf_rss.py
@@ -30,12 +30,14 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
-import re
 import random
-from packet import Packet
-from pmd_output import PmdOutput
-from test_case import TestCase
-from rte_flow_common import RssProcessing
+import re
+
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
+
+from .rte_flow_common import RssProcessing
 
 vf0_mac = "00:11:22:33:44:55"
 
diff --git a/tests/TestSuite_cvl_advanced_iavf_rss_gtpogre.py b/tests/TestSuite_cvl_advanced_iavf_rss_gtpogre.py
index 8ed9974a..f13af968 100755
--- a/tests/TestSuite_cvl_advanced_iavf_rss_gtpogre.py
+++ b/tests/TestSuite_cvl_advanced_iavf_rss_gtpogre.py
@@ -32,10 +32,12 @@
 
 import re
 import time
-from packet import Packet
-from pmd_output import PmdOutput
-from test_case import TestCase
-from rte_flow_common import RssProcessing
+
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
+
+from .rte_flow_common import RssProcessing
 
 # ipv4+ipv4+ipv4
 mac_ipv4_gre_ipv4_gtpu_ipv4_basic = {
diff --git a/tests/TestSuite_cvl_advanced_iavf_rss_gtpu.py b/tests/TestSuite_cvl_advanced_iavf_rss_gtpu.py
index d19ddbf0..5ec08d8d 100644
--- a/tests/TestSuite_cvl_advanced_iavf_rss_gtpu.py
+++ b/tests/TestSuite_cvl_advanced_iavf_rss_gtpu.py
@@ -30,13 +30,15 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
-import re
 import random
+import re
 import time
-from packet import Packet
-from pmd_output import PmdOutput
-from test_case import TestCase, skip_unsupported_pkg, check_supported_nic
-from rte_flow_common import RssProcessing
+
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase, check_supported_nic, skip_unsupported_pkg
+
+from .rte_flow_common import RssProcessing
 
 mac_ipv4_gtpu_ipv4_basic = {
     'ipv4-nonfrag': 'Ether(dst="00:11:22:33:44:55")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst="192.168.0.1", src="192.168.0.2")/("X"*480)',
diff --git a/tests/TestSuite_cvl_advanced_iavf_rss_vlan_esp_ah_l2tp_pfcp.py b/tests/TestSuite_cvl_advanced_iavf_rss_vlan_esp_ah_l2tp_pfcp.py
index f7236eec..df2f8d58 100644
--- a/tests/TestSuite_cvl_advanced_iavf_rss_vlan_esp_ah_l2tp_pfcp.py
+++ b/tests/TestSuite_cvl_advanced_iavf_rss_vlan_esp_ah_l2tp_pfcp.py
@@ -28,15 +28,17 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-import re
 import random
+import re
 import string
 import time
-from test_case import TestCase, skip_unsupported_pkg, check_supported_nic
-from pmd_output import PmdOutput
-from packet import Packet
-from rte_flow_common import RssProcessing
-from config import UserConf
+
+from framework.config import UserConf
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase, check_supported_nic, skip_unsupported_pkg
+
+from .rte_flow_common import RssProcessing
 
 vf0_mac = '00:11:22:33:44:55'
 
diff --git a/tests/TestSuite_cvl_advanced_rss.py b/tests/TestSuite_cvl_advanced_rss.py
index 8ed6d1af..fc2921ee 100644
--- a/tests/TestSuite_cvl_advanced_rss.py
+++ b/tests/TestSuite_cvl_advanced_rss.py
@@ -30,12 +30,14 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
-import re
 import random
-from packet import Packet
-from pmd_output import PmdOutput
-from test_case import TestCase
-from rte_flow_common import RssProcessing
+import re
+
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
+
+from .rte_flow_common import RssProcessing
 
 # toeplitz related data start
 mac_ipv4_toeplitz_basic_pkt = {
diff --git a/tests/TestSuite_cvl_advanced_rss_gtpogre.py b/tests/TestSuite_cvl_advanced_rss_gtpogre.py
index 4a889ead..98309ea4 100755
--- a/tests/TestSuite_cvl_advanced_rss_gtpogre.py
+++ b/tests/TestSuite_cvl_advanced_rss_gtpogre.py
@@ -32,11 +32,12 @@
 
 import re
 import time
-from packet import Packet
-from pmd_output import PmdOutput
-from test_case import TestCase
-from rte_flow_common import RssProcessing
 
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
+
+from .rte_flow_common import RssProcessing
 
 mac_ipv4_gtpu_ipv4_basic = {
     'gtpogre-ipv4-nonfrag': 'Ether(dst="68:05:CA:BB:26:E0")/IP(proto=0x2F)/GRE(proto=0x0800)/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst="192.168.0.1",src="192.168.0.2")/("X"*480)',
diff --git a/tests/TestSuite_cvl_advanced_rss_gtpu.py b/tests/TestSuite_cvl_advanced_rss_gtpu.py
index 37be57f7..1d6514d7 100755
--- a/tests/TestSuite_cvl_advanced_rss_gtpu.py
+++ b/tests/TestSuite_cvl_advanced_rss_gtpu.py
@@ -32,11 +32,12 @@
 
 import re
 import time
-from packet import Packet
-from pmd_output import PmdOutput
-from test_case import TestCase, skip_unsupported_pkg, check_supported_nic
-from rte_flow_common import RssProcessing
 
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase, check_supported_nic, skip_unsupported_pkg
+
+from .rte_flow_common import RssProcessing
 
 mac_ipv4_gtpu_ipv4_basic = {
     'ipv4-nonfrag': 'Ether(dst="68:05:CA:BB:26:E0")/IP()/UDP(dport=2152)/GTP_U_Header(gtp_type=255, teid=0x123456)/IP(dst="192.168.0.1",src="192.168.0.2")/("X"*480)',
diff --git a/tests/TestSuite_cvl_advanced_rss_pppoe.py b/tests/TestSuite_cvl_advanced_rss_pppoe.py
index 3952bbf0..f74b6193 100644
--- a/tests/TestSuite_cvl_advanced_rss_pppoe.py
+++ b/tests/TestSuite_cvl_advanced_rss_pppoe.py
@@ -29,13 +29,15 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-import re
 import random
+import re
 import string
-from test_case import TestCase, skip_unsupported_pkg
-from pmd_output import PmdOutput
-from packet import Packet
-from rte_flow_common import RssProcessing
+
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase, skip_unsupported_pkg
+
+from .rte_flow_common import RssProcessing
 
 mac_pppoe_pay_packets = {
     'mismatch': [
diff --git a/tests/TestSuite_cvl_advanced_rss_vlan_esp_ah_l2tp_pfcp.py b/tests/TestSuite_cvl_advanced_rss_vlan_esp_ah_l2tp_pfcp.py
index df071e91..5f76d89e 100644
--- a/tests/TestSuite_cvl_advanced_rss_vlan_esp_ah_l2tp_pfcp.py
+++ b/tests/TestSuite_cvl_advanced_rss_vlan_esp_ah_l2tp_pfcp.py
@@ -28,14 +28,16 @@
 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-import re
 import random
+import re
 import string
-from test_case import TestCase, skip_unsupported_pkg, check_supported_nic
-from pmd_output import PmdOutput
-from packet import Packet
-from rte_flow_common import RssProcessing
-from config import UserConf
+
+from framework.config import UserConf
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase, check_supported_nic, skip_unsupported_pkg
+
+from .rte_flow_common import RssProcessing
 
 mac_ipv4_pfcp_session_packets = {
     'match': [
diff --git a/tests/TestSuite_cvl_dcf_acl_filter.py b/tests/TestSuite_cvl_dcf_acl_filter.py
index 70d57e14..95b6e58a 100644
--- a/tests/TestSuite_cvl_dcf_acl_filter.py
+++ b/tests/TestSuite_cvl_dcf_acl_filter.py
@@ -29,18 +29,17 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+import copy
 import json
-import time
+import os
 import re
-import copy
-
-from test_case import TestCase
-from pmd_output import PmdOutput
-from packet import Packet
-from utils import BLUE, RED, GREEN
-import rte_flow_common as rfc
+import time
 
-import os
+import tests.rte_flow_common as rfc
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
+from framework.utils import BLUE, GREEN, RED
 
 vf1_mac = "00:01:23:45:67:89"
 
diff --git a/tests/TestSuite_cvl_dcf_date_path.py b/tests/TestSuite_cvl_dcf_date_path.py
index 04ac5de6..858cf621 100644
--- a/tests/TestSuite_cvl_dcf_date_path.py
+++ b/tests/TestSuite_cvl_dcf_date_path.py
@@ -32,9 +32,10 @@
 
 import re
 import time
-from pmd_output import PmdOutput
-from test_case import TestCase
-from packet import Packet
+
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
 
 
 class DcfDatePathTest(TestCase):
diff --git a/tests/TestSuite_cvl_dcf_flow_priority.py b/tests/TestSuite_cvl_dcf_flow_priority.py
index 07d99d2c..d40fee59 100644
--- a/tests/TestSuite_cvl_dcf_flow_priority.py
+++ b/tests/TestSuite_cvl_dcf_flow_priority.py
@@ -29,18 +29,17 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+import copy
 import json
-import time
+import os
 import re
-import copy
-
-from test_case import TestCase, skip_unsupported_pkg, check_supported_nic
-from pmd_output import PmdOutput
-from packet import Packet
-from utils import BLUE, RED, GREEN
-import rte_flow_common as rfc
+import time
 
-import os
+import tests.rte_flow_common as rfc
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase, check_supported_nic, skip_unsupported_pkg
+from framework.utils import BLUE, GREEN, RED
 
 tv_mac_pay = {
     "name":"tv_mac_pay",
diff --git a/tests/TestSuite_cvl_dcf_switch_filter.py b/tests/TestSuite_cvl_dcf_switch_filter.py
index a73db424..e319366d 100755
--- a/tests/TestSuite_cvl_dcf_switch_filter.py
+++ b/tests/TestSuite_cvl_dcf_switch_filter.py
@@ -29,18 +29,17 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+import copy
 import json
-import time
+import os
 import re
-import copy
-
-from test_case import TestCase, skip_unsupported_pkg, check_supported_nic
-from pmd_output import PmdOutput
-from packet import Packet
-from utils import BLUE, RED, GREEN
-import rte_flow_common as rfc
+import time
 
-import os
+import tests.rte_flow_common as rfc
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase, check_supported_nic, skip_unsupported_pkg
+from framework.utils import BLUE, GREEN, RED
 
 tv_mac_pay = {
     "name":"tv_mac_pay",
diff --git a/tests/TestSuite_cvl_dcf_switch_filter_gtpu.py b/tests/TestSuite_cvl_dcf_switch_filter_gtpu.py
index 830c996f..1296d0a2 100644
--- a/tests/TestSuite_cvl_dcf_switch_filter_gtpu.py
+++ b/tests/TestSuite_cvl_dcf_switch_filter_gtpu.py
@@ -29,18 +29,17 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+import copy
 import json
-import time
+import os
 import re
-import copy
-
-from test_case import TestCase, skip_unsupported_pkg, check_supported_nic
-from pmd_output import PmdOutput
-from packet import Packet
-from utils import BLUE, RED, GREEN
-import rte_flow_common as rfc
+import time
 
-import os
+import tests.rte_flow_common as rfc
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase, check_supported_nic, skip_unsupported_pkg
+from framework.utils import BLUE, GREEN, RED
 
 mac_ipv4_gtpu_basic = {
     'ipv4_gtpu': 'Ether(dst="00:11:22:33:44:55")/IP()/UDP()/GTP_U_Header()/Raw("x" *20)',
diff --git a/tests/TestSuite_cvl_dcf_switch_filter_pppoe.py b/tests/TestSuite_cvl_dcf_switch_filter_pppoe.py
index c51d14b1..3badab20 100644
--- a/tests/TestSuite_cvl_dcf_switch_filter_pppoe.py
+++ b/tests/TestSuite_cvl_dcf_switch_filter_pppoe.py
@@ -29,19 +29,17 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-import json
-import time
-import re
 import copy
-
-from test_case import TestCase, skip_unsupported_pkg, check_supported_nic
-from pmd_output import PmdOutput
-from packet import Packet
-from utils import BLUE, RED, GREEN
-import rte_flow_common as rfc
-
+import json
 import os
+import re
+import time
 
+import tests.rte_flow_common as rfc
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase, check_supported_nic, skip_unsupported_pkg
+from framework.utils import BLUE, GREEN, RED
 
 tv_mac_vlan_pppoe_ipv4_pay_session_id_proto_id = {
     "name":"tv_mac_vlan_pppoe_ipv4_pay_session_id_proto_id",
diff --git a/tests/TestSuite_cvl_ecpri.py b/tests/TestSuite_cvl_ecpri.py
index 0bcd0ace..f3d503bb 100644
--- a/tests/TestSuite_cvl_ecpri.py
+++ b/tests/TestSuite_cvl_ecpri.py
@@ -1,12 +1,13 @@
 import re
-from packet import Packet
-from pmd_output import PmdOutput
-from test_case import TestCase
-import rte_flow_common as rfc
-import utils
-from utils import GREEN, RED
 import time
 
+import framework.utils as utils
+import tests.rte_flow_common as rfc
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
+from framework.utils import GREEN, RED
+
 Mac_list = ['00:11:22:33:44:55', '00:11:22:33:44:11', '00:11:22:33:44:22', '00:11:22:33:44:33']
 
 pkt_lst = ["Ether(dst='{}')/IP()/UDP(dport={})/Raw(\'\\x10\\x00\')",
diff --git a/tests/TestSuite_cvl_fdir.py b/tests/TestSuite_cvl_fdir.py
index 18836756..807c0865 100644
--- a/tests/TestSuite_cvl_fdir.py
+++ b/tests/TestSuite_cvl_fdir.py
@@ -30,18 +30,17 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
-import re
-import time
 import copy
 import os
+import re
+import time
 
-from packet import Packet
-from pmd_output import PmdOutput
-from test_case import TestCase, skip_unsupported_pkg
-import rte_flow_common as rfc
-
-from utils import GREEN, RED
-import utils
+import framework.utils as utils
+import tests.rte_flow_common as rfc
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase, skip_unsupported_pkg
+from framework.utils import GREEN, RED
 
 MAC_IPV4_PAY = {
     "match": [
diff --git a/tests/TestSuite_cvl_iavf_ip_fragment_rte_flow.py b/tests/TestSuite_cvl_iavf_ip_fragment_rte_flow.py
index 3866fe72..aa054053 100644
--- a/tests/TestSuite_cvl_iavf_ip_fragment_rte_flow.py
+++ b/tests/TestSuite_cvl_iavf_ip_fragment_rte_flow.py
@@ -30,14 +30,16 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
-from packet import Packet
-from pmd_output import PmdOutput
-from test_case import TestCase
 import re
-from utils import GREEN, RED
 import time
+
 from scapy.all import *
-import rte_flow_common as rfc
+
+import tests.rte_flow_common as rfc
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
+from framework.utils import GREEN, RED
 
 LAUNCH_QUEUE = 16
 
diff --git a/tests/TestSuite_cvl_iavf_rss_configure.py b/tests/TestSuite_cvl_iavf_rss_configure.py
index 86b2819e..de7f0929 100755
--- a/tests/TestSuite_cvl_iavf_rss_configure.py
+++ b/tests/TestSuite_cvl_iavf_rss_configure.py
@@ -30,14 +30,17 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 import json
-import time
-import re
-import packet
 import os
+import re
+import time
+
 from scapy.contrib.gtp import *
-from test_case import TestCase
-from pmd_output import PmdOutput
-from rte_flow_common import RssProcessing
+
+import framework.packet as packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
+
+from .rte_flow_common import RssProcessing
 
 tv_packets_basic = {
     'tv_mac_ipv4': 'Ether(dst="00:11:22:33:44:55")/IP(src="192.168.0.2",dst="192.168.0.3")/("X"*40)',
diff --git a/tests/TestSuite_cvl_ip_fragment_rte_flow.py b/tests/TestSuite_cvl_ip_fragment_rte_flow.py
index e3c03b0f..181634c3 100644
--- a/tests/TestSuite_cvl_ip_fragment_rte_flow.py
+++ b/tests/TestSuite_cvl_ip_fragment_rte_flow.py
@@ -30,13 +30,15 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
-from packet import Packet
-from pmd_output import PmdOutput
-from test_case import TestCase
-from utils import GREEN, RED
 import time
+
 from scapy.all import *
-import rte_flow_common as rfc
+
+import tests.rte_flow_common as rfc
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
+from framework.utils import GREEN, RED
 
 LAUNCH_QUEUE = 16
 
diff --git a/tests/TestSuite_cvl_limit_value_test.py b/tests/TestSuite_cvl_limit_value_test.py
index f8224258..84c4198b 100644
--- a/tests/TestSuite_cvl_limit_value_test.py
+++ b/tests/TestSuite_cvl_limit_value_test.py
@@ -30,16 +30,18 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
+import copy
+import os
 import re
 import time
-import os
-import copy
-from packet import Packet
-from pmd_output import PmdOutput
-from test_case import TestCase
-import rte_flow_common as rfc
-from rte_flow_common import CVL_TXQ_RXQ_NUMBER
-import utils
+
+import framework.utils as utils
+import tests.rte_flow_common as rfc
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
+
+from .rte_flow_common import CVL_TXQ_RXQ_NUMBER
 
 # max rule number case: rte_flow_pattern and matched packets will be generated by code, and rte_flow_pattern will be writed to file.
 tv_max_rule_number = {
diff --git a/tests/TestSuite_cvl_qinq.py b/tests/TestSuite_cvl_qinq.py
index 0c950b03..39d590f6 100644
--- a/tests/TestSuite_cvl_qinq.py
+++ b/tests/TestSuite_cvl_qinq.py
@@ -30,14 +30,16 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
+import random
 import re
 import time
-import random
-from packet import Packet
-from pmd_output import PmdOutput
-from test_case import TestCase, check_supported_nic, skip_unsupported_pkg
-from utils import GREEN, RED
-from rte_flow_common import RssProcessing
+
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase, check_supported_nic, skip_unsupported_pkg
+from framework.utils import GREEN, RED
+
+from .rte_flow_common import RssProcessing
 
 mac_qinq_ipv4_pay_src_ip = {
     'name': 'mac_qinq_ipv4_pay_src_ip',
diff --git a/tests/TestSuite_cvl_rss_configure.py b/tests/TestSuite_cvl_rss_configure.py
index 904c3ca3..1c4ffbfc 100644
--- a/tests/TestSuite_cvl_rss_configure.py
+++ b/tests/TestSuite_cvl_rss_configure.py
@@ -30,17 +30,19 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 import json
-import time
-import re
-import packet
 import os
-from scapy.contrib.gtp import *
-from test_case import TestCase
-from pmd_output import PmdOutput
-from utils import BLUE, RED
+import re
+import time
 from collections import OrderedDict
-from packet import IncreaseIP, IncreaseIPv6
-import rte_flow_common as rfc
+
+from scapy.contrib.gtp import *
+
+import framework.packet as packet
+import tests.rte_flow_common as rfc
+from framework.packet import IncreaseIP, IncreaseIPv6
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
+from framework.utils import BLUE, RED
 
 out = os.popen("pip list|grep scapy ")
 version_result =out.read()
diff --git a/tests/TestSuite_cvl_switch_filter.py b/tests/TestSuite_cvl_switch_filter.py
index 95bc6cb7..c9869259 100644
--- a/tests/TestSuite_cvl_switch_filter.py
+++ b/tests/TestSuite_cvl_switch_filter.py
@@ -30,21 +30,20 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
-import json
-import time
-import re
 import copy
+import json
+import os
 import random
-from itertools import groupby
-
-from test_case import TestCase, skip_unsupported_pkg
-from pmd_output import PmdOutput
-from packet import Packet
-from utils import BLUE, RED, GREEN
+import re
+import time
 from collections import OrderedDict
-import rte_flow_common as rfc
+from itertools import groupby
 
-import os
+import tests.rte_flow_common as rfc
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase, skip_unsupported_pkg
+from framework.utils import BLUE, GREEN, RED
 
 #vxlan non-pipeline mode
 #test vector mac_ipv4_vxlan_ipv4
diff --git a/tests/TestSuite_cvl_switch_filter_pppoe.py b/tests/TestSuite_cvl_switch_filter_pppoe.py
index a33bb2fe..a8058f94 100644
--- a/tests/TestSuite_cvl_switch_filter_pppoe.py
+++ b/tests/TestSuite_cvl_switch_filter_pppoe.py
@@ -30,21 +30,20 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
-import json
-import time
-import re
 import copy
+import json
+import os
 import random
-from itertools import groupby
-
-from test_case import TestCase, skip_unsupported_pkg
-from pmd_output import PmdOutput
-from packet import Packet
-from utils import BLUE, RED, GREEN
+import re
+import time
 from collections import OrderedDict
-import rte_flow_common as rfc
+from itertools import groupby
 
-import os
+import tests.rte_flow_common as rfc
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase, skip_unsupported_pkg
+from framework.utils import BLUE, GREEN, RED
 
 #test vector ethertype_filter_pppoes
 ethertype_filter_pppoes_scapy_str = {
diff --git a/tests/TestSuite_cvl_vf_support_multicast_address.py b/tests/TestSuite_cvl_vf_support_multicast_address.py
index dd241a82..72c918ae 100644
--- a/tests/TestSuite_cvl_vf_support_multicast_address.py
+++ b/tests/TestSuite_cvl_vf_support_multicast_address.py
@@ -30,9 +30,10 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 import re
-from test_case import TestCase
-from pmd_output import PmdOutput
-from packet import Packet
+
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
 
 vf0_mac = "00:11:22:33:44:55"
 vf1_mac = "00:11:22:33:44:66"
diff --git a/tests/TestSuite_dcf_lifecycle.py b/tests/TestSuite_dcf_lifecycle.py
index d47ef2b1..65b80e69 100755
--- a/tests/TestSuite_dcf_lifecycle.py
+++ b/tests/TestSuite_dcf_lifecycle.py
@@ -48,16 +48,15 @@ import re
 import time
 import traceback
 from contextlib import contextmanager
-from pprint import pformat
 from functools import partial
+from pprint import pformat
 
-
-from settings import HEADER_SIZE
-from test_case import TestCase
-from exception import VerifyFailure
-from packet import Packet
-from pmd_output import PmdOutput
-import utils
+import framework.utils as utils
+from framework.exception import VerifyFailure
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
 
 
 class TestDcfLifeCycle(TestCase):
diff --git a/tests/TestSuite_ddp_gtp.py b/tests/TestSuite_ddp_gtp.py
index c992e049..3db48ee3 100644
--- a/tests/TestSuite_ddp_gtp.py
+++ b/tests/TestSuite_ddp_gtp.py
@@ -29,15 +29,16 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-import time
+import random
 import re
 import sys
-import utils
-from qemu_kvm import QEMUKvm
-from test_case import TestCase
-from pmd_output import PmdOutput
-from settings import get_nic_name
-import random
+import time
+
+import framework.utils as utils
+from framework.pmd_output import PmdOutput
+from framework.qemu_kvm import QEMUKvm
+from framework.settings import get_nic_name
+from framework.test_case import TestCase
 
 VM_CORES_MASK = 'all'
 
diff --git a/tests/TestSuite_ddp_gtp_qregion.py b/tests/TestSuite_ddp_gtp_qregion.py
index e7e40cfc..6eff85a4 100644
--- a/tests/TestSuite_ddp_gtp_qregion.py
+++ b/tests/TestSuite_ddp_gtp_qregion.py
@@ -29,15 +29,17 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-import time
 import re
 import sys
-import utils
+import time
+
 from scapy.all import *
-from test_case import TestCase
-from pmd_output import PmdOutput
-from settings import get_nic_name
-import packet
+
+import framework.packet as packet
+import framework.utils as utils
+from framework.pmd_output import PmdOutput
+from framework.settings import get_nic_name
+from framework.test_case import TestCase
 
 
 class TestDdpGtpQregion(TestCase):
diff --git a/tests/TestSuite_ddp_l2tpv3.py b/tests/TestSuite_ddp_l2tpv3.py
index 22ae0be7..b0a35a7c 100644
--- a/tests/TestSuite_ddp_l2tpv3.py
+++ b/tests/TestSuite_ddp_l2tpv3.py
@@ -33,12 +33,14 @@
 DPDK Test suite.
 l2tpv3 test script.
 """
-import time
+import random
 import re
-from test_case import TestCase
-from pmd_output import PmdOutput
+import time
+
 from scapy.all import *
-import random
+
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
 
 
 class TestDdpL2tpv3(TestCase):
diff --git a/tests/TestSuite_ddp_mpls.py b/tests/TestSuite_ddp_mpls.py
index 7c677c3c..5b0e908b 100644
--- a/tests/TestSuite_ddp_mpls.py
+++ b/tests/TestSuite_ddp_mpls.py
@@ -29,16 +29,17 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-import time
+import random
 import sys
-import utils 
+import time
+
 from scapy.utils import rdpcap
 
-from qemu_kvm import QEMUKvm
-from test_case import TestCase
-from pmd_output import PmdOutput
-from settings import get_nic_name
-import random
+import framework.utils as utils
+from framework.pmd_output import PmdOutput
+from framework.qemu_kvm import QEMUKvm
+from framework.settings import get_nic_name
+from framework.test_case import TestCase
 
 VM_CORES_MASK = 'all'
 PF_MAX_QUEUE = 64
diff --git a/tests/TestSuite_ddp_ppp_l2tp.py b/tests/TestSuite_ddp_ppp_l2tp.py
index 57b8c352..8f1dc96b 100644
--- a/tests/TestSuite_ddp_ppp_l2tp.py
+++ b/tests/TestSuite_ddp_ppp_l2tp.py
@@ -29,15 +29,17 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-import time
+import random
 import re
 import sys
-import utils
-from test_case import TestCase
-from pmd_output import PmdOutput
-from settings import get_nic_name
+import time
+
 from scapy.all import *
-import random
+
+import framework.utils as utils
+from framework.pmd_output import PmdOutput
+from framework.settings import get_nic_name
+from framework.test_case import TestCase
 
 
 class TestDdpPppL2tp(TestCase):
diff --git a/tests/TestSuite_distributor.py b/tests/TestSuite_distributor.py
index 09a493b3..55eef18f 100644
--- a/tests/TestSuite_distributor.py
+++ b/tests/TestSuite_distributor.py
@@ -32,11 +32,12 @@
 """
 DPDK Test suite.
 """
-import re
-import utils
 import os
-from test_case import TestCase
-from pktgen import PacketGeneratorHelper
+import re
+
+import framework.utils as utils
+from framework.pktgen import PacketGeneratorHelper
+from framework.test_case import TestCase
 
 
 class TestDistributor(TestCase):
diff --git a/tests/TestSuite_dpdk_gro_lib.py b/tests/TestSuite_dpdk_gro_lib.py
index f5668ad4..08ce9f8a 100644
--- a/tests/TestSuite_dpdk_gro_lib.py
+++ b/tests/TestSuite_dpdk_gro_lib.py
@@ -38,10 +38,11 @@ hostcpu to start qemu and only have one vcpu
 """
 import re
 import time
-import utils
-from test_case import TestCase
-from virt_common import VM
-import vhost_peer_conf as peer
+
+import framework.utils as utils
+import tests.vhost_peer_conf as peer
+from framework.test_case import TestCase
+from framework.virt_common import VM
 
 
 class TestDPDKGROLib(TestCase):
diff --git a/tests/TestSuite_dpdk_gso_lib.py b/tests/TestSuite_dpdk_gso_lib.py
index 8cb13a8f..63973567 100644
--- a/tests/TestSuite_dpdk_gso_lib.py
+++ b/tests/TestSuite_dpdk_gso_lib.py
@@ -36,13 +36,14 @@ DPDK gso lib test suite.
 In this suite, in order to check the performance of gso lib, will use one
 hostcpu to start qemu and only have one vcpu
 """
-import time
-import utils
 import re
-from test_case import TestCase
-from virt_common import VM
-from config import UserConf
-import vhost_peer_conf as peer
+import time
+
+import framework.utils as utils
+import tests.vhost_peer_conf as peer
+from framework.config import UserConf
+from framework.test_case import TestCase
+from framework.virt_common import VM
 
 
 class TestDPDKGsoLib(TestCase):
diff --git a/tests/TestSuite_dpdk_hugetlbfs_mount_size.py b/tests/TestSuite_dpdk_hugetlbfs_mount_size.py
index 48fdc8ef..162449f6 100644
--- a/tests/TestSuite_dpdk_hugetlbfs_mount_size.py
+++ b/tests/TestSuite_dpdk_hugetlbfs_mount_size.py
@@ -34,9 +34,10 @@ This feature is to limit DPDK to use the exact size which is the mounted hugepag
 """
 
 import re
-import utils
 import time
-from test_case import TestCase
+
+import framework.utils as utils
+from framework.test_case import TestCase
 
 DEFAULT_MNT = '/mnt/huge'
 MNT_PATH = ["/mnt/huge1", "/mnt/huge2", "/mnt/huge3"]
diff --git a/tests/TestSuite_dual_vlan.py b/tests/TestSuite_dual_vlan.py
index 933ffb90..0f9247f6 100644
--- a/tests/TestSuite_dual_vlan.py
+++ b/tests/TestSuite_dual_vlan.py
@@ -37,11 +37,12 @@ Test the support of Dual VLAN Offload Features by Poll Mode Drivers.
 
 """
 
-import utils
 import random
 import re
 import time
 
+import framework.utils as utils
+
 txvlan = 3
 outvlan = 1
 invlan = 2
@@ -71,8 +72,8 @@ vlanCase = ["OUTER+INNER", "INNER", ("OUTER+INNER", "NONE"), ("INNER", "NONE"),
             "TX+OUTER+INNER", "TX+OUTER", ("NONE", "TX+OUTER+INNER"), ("NONE", "TX+OUTER")]
 
 
-from test_case import TestCase
-from pmd_output import PmdOutput
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
 
 
 class TestDualVlan(TestCase):
diff --git a/tests/TestSuite_dynamic_config.py b/tests/TestSuite_dynamic_config.py
index 92f15d36..6163731f 100644
--- a/tests/TestSuite_dynamic_config.py
+++ b/tests/TestSuite_dynamic_config.py
@@ -36,12 +36,11 @@ Test the dynamic driver configuration feature.
 
 """
 
-import utils
 import time
 
-from test_case import TestCase
-from pmd_output import PmdOutput
-
+import framework.utils as utils
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
 
 #
 #
diff --git a/tests/TestSuite_dynamic_flowtype.py b/tests/TestSuite_dynamic_flowtype.py
index d60a5822..75fb19f8 100644
--- a/tests/TestSuite_dynamic_flowtype.py
+++ b/tests/TestSuite_dynamic_flowtype.py
@@ -29,12 +29,13 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-import time
 import re
-import utils
-from test_case import TestCase
-from pmd_output import PmdOutput
-import packet
+import time
+
+import framework.packet as packet
+import framework.utils as utils
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
 
 VM_CORES_MASK = 'all'
 
diff --git a/tests/TestSuite_dynamic_queue.py b/tests/TestSuite_dynamic_queue.py
index 9314ff73..4f23ca44 100644
--- a/tests/TestSuite_dynamic_queue.py
+++ b/tests/TestSuite_dynamic_queue.py
@@ -29,14 +29,15 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-import time
-import re
-import utils
-from test_case import TestCase
-from pmd_output import PmdOutput
-from settings import get_nic_name
-from packet import Packet
 import random
+import re
+import time
+
+import framework.utils as utils
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.settings import get_nic_name
+from framework.test_case import TestCase
 
 test_loop = 3
 
diff --git a/tests/TestSuite_eeprom_dump.py b/tests/TestSuite_eeprom_dump.py
index 8c2bf4c4..6d68d31d 100644
--- a/tests/TestSuite_eeprom_dump.py
+++ b/tests/TestSuite_eeprom_dump.py
@@ -33,10 +33,11 @@
 """
 DPDK Test suite.
 """
-import utils
 import re
-from pmd_output import PmdOutput
-from test_case import TestCase
+
+import framework.utils as utils
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
 
 
 class TestEEPROMDump(TestCase):
diff --git a/tests/TestSuite_efd.py b/tests/TestSuite_efd.py
index 7d1e0a86..e4294cec 100644
--- a/tests/TestSuite_efd.py
+++ b/tests/TestSuite_efd.py
@@ -32,11 +32,12 @@
 """
 DPDK Test suite.
 """
-import re
-import utils
 import os
-from test_case import TestCase
-from pktgen import PacketGeneratorHelper
+import re
+
+import framework.utils as utils
+from framework.pktgen import PacketGeneratorHelper
+from framework.test_case import TestCase
 
 
 class TestEFD(TestCase):
diff --git a/tests/TestSuite_enable_package_download_in_ice_driver.py b/tests/TestSuite_enable_package_download_in_ice_driver.py
index 8bf21d18..2808c229 100644
--- a/tests/TestSuite_enable_package_download_in_ice_driver.py
+++ b/tests/TestSuite_enable_package_download_in_ice_driver.py
@@ -29,11 +29,13 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-import time
-import re
 import os
-from test_case import TestCase
-from pmd_output import PmdOutput
+import re
+import time
+
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
+
 
 class TestEnable_Package_Download_In_Ice_Driver(TestCase):
 
diff --git a/tests/TestSuite_ethtool_stats.py b/tests/TestSuite_ethtool_stats.py
index c0032c86..6c72fcbe 100644
--- a/tests/TestSuite_ethtool_stats.py
+++ b/tests/TestSuite_ethtool_stats.py
@@ -34,20 +34,20 @@ DPDK Test suite.
 Test support of dpdk-procinfo tool feature
 '''
 
+import os
 import re
 import time
-import os
 import traceback
+from functools import reduce
 
-from utils import create_mask as dts_create_mask
-from test_case import TestCase
-from pmd_output import PmdOutput
-from exception import VerifyFailure
-
-from packet import Packet
 from scapy.sendrecv import sendp
-from settings import HEADER_SIZE
-from functools import reduce
+
+from framework.exception import VerifyFailure
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
+from framework.utils import create_mask as dts_create_mask
 
 
 class TestEthtoolStats(TestCase):
diff --git a/tests/TestSuite_eventdev_perf.py b/tests/TestSuite_eventdev_perf.py
index 7730cd1e..2437e463 100644
--- a/tests/TestSuite_eventdev_perf.py
+++ b/tests/TestSuite_eventdev_perf.py
@@ -34,21 +34,20 @@ DPDK Test suite.
 Test userland 10Gb/25Gb/40Gb/100Gb
 """
 
-import utils
+import os
 import re
 import time
-import os
-
-from test_case import TestCase
+from datetime import datetime
 from time import sleep
-from settings import HEADER_SIZE
-from pmd_output import PmdOutput
-from pktgen import PacketGeneratorHelper
 
-from settings import FOLDERS
-from system_info import SystemInfo
-import perf_report
-from datetime import datetime
+import framework.utils as utils
+import nics.perf_report as perf_report
+from framework.pktgen import PacketGeneratorHelper
+from framework.pmd_output import PmdOutput
+from framework.settings import FOLDERS, HEADER_SIZE
+from framework.test_case import TestCase
+from nics.system_info import SystemInfo
+
 
 class TestEventdevPerf(TestCase):
 
diff --git a/tests/TestSuite_eventdev_pipeline.py b/tests/TestSuite_eventdev_pipeline.py
index 33091b6a..bb5de66d 100644
--- a/tests/TestSuite_eventdev_pipeline.py
+++ b/tests/TestSuite_eventdev_pipeline.py
@@ -34,13 +34,15 @@ DPDK Test suite.
 Test eventdev pipeline
 """
 
-import utils
-import time
 import re
-from test_case import TestCase
+import time
+
 import scapy.layers.inet
 from scapy.utils import rdpcap
-from packet import Packet
+
+import framework.utils as utils
+from framework.packet import Packet
+from framework.test_case import TestCase
 
 
 class TestEventdevPipeline(TestCase):
diff --git a/tests/TestSuite_eventdev_pipeline_perf.py b/tests/TestSuite_eventdev_pipeline_perf.py
index 69cb4aa4..bda77b9a 100644
--- a/tests/TestSuite_eventdev_pipeline_perf.py
+++ b/tests/TestSuite_eventdev_pipeline_perf.py
@@ -34,21 +34,20 @@ DPDK Test suite.
 Test userland 10Gb/25Gb/40Gb/100Gb
 """
 
-import utils
+import os
 import re
 import time
-import os
-
-from test_case import TestCase
+from datetime import datetime
 from time import sleep
-from settings import HEADER_SIZE
-from pmd_output import PmdOutput
-from pktgen import PacketGeneratorHelper
 
-from settings import FOLDERS
-from system_info import SystemInfo
-import perf_report
-from datetime import datetime
+import framework.utils as utils
+import nics.perf_report as perf_report
+from framework.pktgen import PacketGeneratorHelper
+from framework.pmd_output import PmdOutput
+from framework.settings import FOLDERS, HEADER_SIZE
+from framework.test_case import TestCase
+from nics.system_info import SystemInfo
+
 
 class TestEventdevPipelinePerf(TestCase):
 
diff --git a/tests/TestSuite_example_build.py b/tests/TestSuite_example_build.py
index 00db2f78..b227d68a 100644
--- a/tests/TestSuite_example_build.py
+++ b/tests/TestSuite_example_build.py
@@ -35,9 +35,11 @@ DPDK Test suite.
 Test example_build.
 """
 
-import time
 import re
-from test_case import TestCase
+import time
+
+from framework.test_case import TestCase
+
 
 class TestExamplebuild(TestCase):
 
diff --git a/tests/TestSuite_external_memory.py b/tests/TestSuite_external_memory.py
index e31b2787..f68a9a66 100644
--- a/tests/TestSuite_external_memory.py
+++ b/tests/TestSuite_external_memory.py
@@ -35,10 +35,11 @@ DPDK Test suite.
 Test external memory.
 """
 
-import time
 import re
-import utils
-from test_case import TestCase
+import time
+
+import framework.utils as utils
+from framework.test_case import TestCase
 
 
 class TestExternalMemory(TestCase):
diff --git a/tests/TestSuite_external_mempool_handler.py b/tests/TestSuite_external_mempool_handler.py
index a16d4324..cee22d0f 100644
--- a/tests/TestSuite_external_mempool_handler.py
+++ b/tests/TestSuite_external_mempool_handler.py
@@ -34,9 +34,9 @@ DPDK Test suite.
 Test external mempool handler
 """
 
-import utils
-from test_case import TestCase
-from pmd_output import PmdOutput
+import framework.utils as utils
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
 
 
 class TestExternalMempool(TestCase):
diff --git a/tests/TestSuite_fdir.py b/tests/TestSuite_fdir.py
index a02255fa..b418b68d 100644
--- a/tests/TestSuite_fdir.py
+++ b/tests/TestSuite_fdir.py
@@ -35,20 +35,20 @@ DPDK Test suite.
 Test 82599 and fortville Flow Director Support in DPDK
 """
 
+import imp
 import re
-import time
 import string
+import sys
+import time
 from time import sleep
-from scapy.utils import struct, socket, PcapWriter
 
-import utils
-from test_case import TestCase
-from settings import HEADER_SIZE
-from pmd_output import PmdOutput
-from pktgen import PacketGeneratorHelper
+from scapy.utils import PcapWriter, socket, struct
 
-import sys
-import imp
+import framework.utils as utils
+from framework.pktgen import PacketGeneratorHelper
+from framework.pmd_output import PmdOutput
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
 
 
 class TestFdir(TestCase):
diff --git a/tests/TestSuite_fips_cryptodev.py b/tests/TestSuite_fips_cryptodev.py
index 8c75d54c..39b30c6a 100644
--- a/tests/TestSuite_fips_cryptodev.py
+++ b/tests/TestSuite_fips_cryptodev.py
@@ -30,11 +30,13 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
-import utils
-from test_case import TestCase
-import cryptodev_common as cc
 import re
 
+import framework.utils as utils
+import tests.cryptodev_common as cc
+from framework.test_case import TestCase
+
+
 class FipCryptodev(TestCase):
 
     def set_up_all(self):
diff --git a/tests/TestSuite_firmware_version.py b/tests/TestSuite_firmware_version.py
index 85f08337..cd414f43 100644
--- a/tests/TestSuite_firmware_version.py
+++ b/tests/TestSuite_firmware_version.py
@@ -33,10 +33,11 @@
 """
 DPDK Test suite.
 """
-from pmd_output import PmdOutput
-from test_case import TestCase
 import re
 
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
+
 
 class TestFirmwareVersion(TestCase):
 
diff --git a/tests/TestSuite_flexible_rxd.py b/tests/TestSuite_flexible_rxd.py
index 45eb6036..58e71e2f 100644
--- a/tests/TestSuite_flexible_rxd.py
+++ b/tests/TestSuite_flexible_rxd.py
@@ -32,9 +32,12 @@
 
 
 import time
-from test_case import TestCase, skip_unsupported_pkg, check_supported_nic
-from flexible_common import FlexibleRxdBase
-import rte_flow_common as rfc
+
+import tests.rte_flow_common as rfc
+from framework.test_case import TestCase, check_supported_nic, skip_unsupported_pkg
+
+from .flexible_common import FlexibleRxdBase
+
 
 class TestFlexibleRxd(TestCase, FlexibleRxdBase):
     supported_nic = ['columbiaville_100g', 'columbiaville_25g', 'columbiaville_25gx2', 'foxville']
diff --git a/tests/TestSuite_floating_veb.py b/tests/TestSuite_floating_veb.py
index 8bfc4c49..aca9b03f 100644
--- a/tests/TestSuite_floating_veb.py
+++ b/tests/TestSuite_floating_veb.py
@@ -38,14 +38,14 @@ Test Floating VEB Features by Poll Mode Drivers.
 import re
 import time
 
-from virt_dut import VirtDut
-from project_dpdk import DPDKdut
-from dut import Dut
-from test_case import TestCase
-from pmd_output import PmdOutput
-from settings import HEADER_SIZE
-from packet import Packet
-from utils import RED
+from framework.dut import Dut
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.project_dpdk import DPDKdut
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
+from framework.utils import RED
+from framework.virt_dut import VirtDut
 
 
 class TestFloatingVEBSwitching(TestCase):
diff --git a/tests/TestSuite_flow_classify.py b/tests/TestSuite_flow_classify.py
index 67d78734..200d39e0 100644
--- a/tests/TestSuite_flow_classify.py
+++ b/tests/TestSuite_flow_classify.py
@@ -30,19 +30,19 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 import os
-import time
 import re
+import time
 from collections import Counter
 from datetime import datetime
+from functools import reduce
 
-from packet import Packet
 from scapy.sendrecv import sendp
 
-from utils import create_mask as dts_create_mask
-from test_case import TestCase
-from exception import VerifyFailure
-from settings import HEADER_SIZE
-from functools import reduce
+from framework.exception import VerifyFailure
+from framework.packet import Packet
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
+from framework.utils import create_mask as dts_create_mask
 
 
 class TestFlowClassify(TestCase):
diff --git a/tests/TestSuite_flow_classify_softnic.py b/tests/TestSuite_flow_classify_softnic.py
index e5937289..a2c15dcc 100644
--- a/tests/TestSuite_flow_classify_softnic.py
+++ b/tests/TestSuite_flow_classify_softnic.py
@@ -29,38 +29,33 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-import utils
+import os
+import random
 import re
 import time
+from time import sleep
 
-from settings import HEADER_SIZE
-from test_case import TestCase
-from pmd_output import PmdOutput
-from settings import DRIVERS
-from crb import Crb
-
-from virt_dut import VirtDut
-from project_dpdk import DPDKdut
-from dut import Dut
-from packet import Packet
-
-import os
-import random
-from exception import VerifyFailure
 import scapy.layers.inet
-from scapy.utils import rdpcap
-
-from time import sleep
-from scapy.utils import wrpcap, rdpcap, hexstr
-from scapy.layers.inet import Ether, IP, TCP, UDP, ICMP
+from scapy.arch import get_if_hwaddr
+from scapy.layers.inet import ICMP, IP, TCP, UDP, Ether
 from scapy.layers.inet6 import IPv6
-from scapy.layers.l2 import Dot1Q, ARP, GRE
+from scapy.layers.l2 import ARP, GRE, Dot1Q
 from scapy.layers.sctp import SCTP, SCTPChunkData
+from scapy.packet import Raw, bind_layers
 from scapy.route import *
-from scapy.packet import bind_layers, Raw
-from scapy.arch import get_if_hwaddr
-from scapy.sendrecv import sniff
-from scapy.sendrecv import sendp
+from scapy.sendrecv import sendp, sniff
+from scapy.utils import hexstr, rdpcap, wrpcap
+
+import framework.utils as utils
+from framework.crb import Crb
+from framework.dut import Dut
+from framework.exception import VerifyFailure
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.project_dpdk import DPDKdut
+from framework.settings import DRIVERS, HEADER_SIZE
+from framework.test_case import TestCase
+from framework.virt_dut import VirtDut
 
 
 class TestFlowClassifySoftnic(TestCase):
diff --git a/tests/TestSuite_flow_filtering.py b/tests/TestSuite_flow_filtering.py
index 7d089bc3..806f0b3d 100644
--- a/tests/TestSuite_flow_filtering.py
+++ b/tests/TestSuite_flow_filtering.py
@@ -30,13 +30,13 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 import os
-import utils
-import time
 import re
-import os
-import packet
-from test_case import TestCase
-from settings import HEADER_SIZE
+import time
+
+import framework.packet as packet
+import framework.utils as utils
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
 
 
 class TestFlowFiltering(TestCase):
diff --git a/tests/TestSuite_fortville_rss_granularity_config.py b/tests/TestSuite_fortville_rss_granularity_config.py
index a4de80e2..b397cf37 100644
--- a/tests/TestSuite_fortville_rss_granularity_config.py
+++ b/tests/TestSuite_fortville_rss_granularity_config.py
@@ -47,12 +47,13 @@ keys for GRE should be supported. the test plan is to test the API to switch bet
 
 Support 4*10G, 1*40G and 2*40G NICs.
 """
-import time
 import random
 import re
-import utils
-import dut
-from pmd_output import PmdOutput
+import time
+
+import framework.dut as dut
+import framework.utils as utils
+from framework.pmd_output import PmdOutput
 
 testQueues = [16]
 reta_entries = []
@@ -60,7 +61,8 @@ reta_lines = []
 
 # Use scapy to send packets with different source and dest ip.
 # and collect the hash result of five tuple and the queue id.
-from test_case import TestCase
+from framework.test_case import TestCase
+
 #
 #
 # Test class.
diff --git a/tests/TestSuite_fortville_rss_input.py b/tests/TestSuite_fortville_rss_input.py
index 4ba413fc..24d58315 100644
--- a/tests/TestSuite_fortville_rss_input.py
+++ b/tests/TestSuite_fortville_rss_input.py
@@ -47,12 +47,13 @@ keys for GRE should be supported. the test plan is to test the API to switch bet
 
 Support 4*10G, 1*40G and 2*40G NICs.
 """
-import time
 import random
 import re
-import utils
-import dut
-from pmd_output import PmdOutput
+import time
+
+import framework.dut as dut
+import framework.utils as utils
+from framework.pmd_output import PmdOutput
 
 testQueues = [16]
 reta_entries = []
@@ -60,7 +61,8 @@ reta_lines = []
 
 # Use scapy to send packets with different source and dest ip.
 # and collect the hash result of five tuple and the queue id.
-from test_case import TestCase
+from framework.test_case import TestCase
+
 #
 #
 # Test class.
diff --git a/tests/TestSuite_generic_filter.py b/tests/TestSuite_generic_filter.py
index 22f85bd0..7e2fed90 100644
--- a/tests/TestSuite_generic_filter.py
+++ b/tests/TestSuite_generic_filter.py
@@ -36,14 +36,13 @@ Test the support of VLAN Offload Features by Poll Mode Drivers.
 
 """
 
-import utils
-import time
 import re
+import time
 
-from test_case import TestCase
-from settings import HEADER_SIZE
-from pmd_output import PmdOutput
-from settings import DRIVERS
+import framework.utils as utils
+from framework.pmd_output import PmdOutput
+from framework.settings import DRIVERS, HEADER_SIZE
+from framework.test_case import TestCase
 
 
 class TestGeneric_filter(TestCase):
diff --git a/tests/TestSuite_generic_flow_api.py b/tests/TestSuite_generic_flow_api.py
index 3ea76b64..c3517565 100644
--- a/tests/TestSuite_generic_flow_api.py
+++ b/tests/TestSuite_generic_flow_api.py
@@ -36,27 +36,25 @@ Test the support of generic flow API by Poll Mode Drivers.
 
 """
 
-import utils
-import time
-import re
-
-from test_case import TestCase
-from settings import HEADER_SIZE
-from pmd_output import PmdOutput
-from settings import DRIVERS
-from crb import Crb
-
-from virt_dut import VirtDut
-from project_dpdk import DPDKdut
-from dut import Dut
-import packet
-
 import os
 import random
-from exception import VerifyFailure
+import re
+import time
+
 import scapy.layers.inet
 from scapy.utils import rdpcap
 
+import framework.packet as packet
+import framework.utils as utils
+from framework.crb import Crb
+from framework.dut import Dut
+from framework.exception import VerifyFailure
+from framework.pmd_output import PmdOutput
+from framework.project_dpdk import DPDKdut
+from framework.settings import DRIVERS, HEADER_SIZE
+from framework.test_case import TestCase
+from framework.virt_dut import VirtDut
+
 MAX_VLAN = 4095
 MAX_QUEUE = 15
 testQueues = [16]
diff --git a/tests/TestSuite_hello_world.py b/tests/TestSuite_hello_world.py
index 8e2ffd90..0b8b1cf5 100644
--- a/tests/TestSuite_hello_world.py
+++ b/tests/TestSuite_hello_world.py
@@ -34,8 +34,9 @@ DPDK Test suite.
 Test HelloWorld example.
 """
 
-import utils
-from test_case import TestCase
+import framework.utils as utils
+from framework.test_case import TestCase
+
 
 class TestHelloWorld(TestCase):
 
diff --git a/tests/TestSuite_hotplug.py b/tests/TestSuite_hotplug.py
index bb31a9d5..34b0b0a8 100644
--- a/tests/TestSuite_hotplug.py
+++ b/tests/TestSuite_hotplug.py
@@ -35,12 +35,13 @@ DPDK Test suite.
 Test port hot plug.
 """
 
-import time
-import re
-import utils
-from test_case import TestCase
-from packet import Packet
 import os
+import re
+import time
+
+import framework.utils as utils
+from framework.packet import Packet
+from framework.test_case import TestCase
 
 
 class TestPortHotPlug(TestCase):
diff --git a/tests/TestSuite_hotplug_mp.py b/tests/TestSuite_hotplug_mp.py
index 9b846a0e..11f58d3c 100644
--- a/tests/TestSuite_hotplug_mp.py
+++ b/tests/TestSuite_hotplug_mp.py
@@ -34,10 +34,11 @@ DPDK Test suite.
 Hotplug Multi-process Test.
 """
 
-import utils
-import time
-from test_case import TestCase
 import itertools
+import time
+
+import framework.utils as utils
+from framework.test_case import TestCase
 
 test_loop = 2
 
diff --git a/tests/TestSuite_iavf.py b/tests/TestSuite_iavf.py
index adaa1304..16971ce7 100644
--- a/tests/TestSuite_iavf.py
+++ b/tests/TestSuite_iavf.py
@@ -36,17 +36,16 @@ Test some iavf function in i40e driver
 
 """
 
+import math
+import random
 import re
 import time
-import math
 
-from virt_common import VM
-from test_case import TestCase
-from pmd_output import PmdOutput
-from packet import Packet
-from settings import get_nic_name
-import random
-from settings import HEADER_SIZE
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.settings import HEADER_SIZE, get_nic_name
+from framework.test_case import TestCase
+from framework.virt_common import VM
 
 VM_CORES_MASK = 'Default'
 
diff --git a/tests/TestSuite_iavf_fdir.py b/tests/TestSuite_iavf_fdir.py
index 7f8dace3..27ceb14b 100755
--- a/tests/TestSuite_iavf_fdir.py
+++ b/tests/TestSuite_iavf_fdir.py
@@ -32,17 +32,16 @@
 
 import re
 import time
+from multiprocessing import Manager, Process
 
-from packet import Packet
-from pmd_output import PmdOutput
-from test_case import TestCase, skip_unsupported_pkg
-import rte_flow_common as rfc
-from rte_flow_common import CVL_TXQ_RXQ_NUMBER
-from multiprocessing import Process
-from multiprocessing import Manager
+import framework.utils as utils
+import tests.rte_flow_common as rfc
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase, skip_unsupported_pkg
+from framework.utils import GREEN, RED
 
-from utils import GREEN, RED
-import utils
+from .rte_flow_common import CVL_TXQ_RXQ_NUMBER
 
 MAC_IPV4_PAY = {
     "match": [
diff --git a/tests/TestSuite_iavf_fdir_gtpogre.py b/tests/TestSuite_iavf_fdir_gtpogre.py
index 1e10d586..04598393 100644
--- a/tests/TestSuite_iavf_fdir_gtpogre.py
+++ b/tests/TestSuite_iavf_fdir_gtpogre.py
@@ -29,14 +29,16 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-from packet import Packet
-from pmd_output import PmdOutput
-from test_case import TestCase
 import re
-from utils import GREEN, RED
 import time
+
 from scapy.all import *
-import rte_flow_common as rfc
+
+import tests.rte_flow_common as rfc
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
+from framework.utils import GREEN, RED
 
 LAUNCH_QUEUE = 16
 
diff --git a/tests/TestSuite_iavf_flexible_descriptor.py b/tests/TestSuite_iavf_flexible_descriptor.py
index e5cd9b3d..721dbb53 100644
--- a/tests/TestSuite_iavf_flexible_descriptor.py
+++ b/tests/TestSuite_iavf_flexible_descriptor.py
@@ -34,9 +34,9 @@
 import time
 import traceback
 
+from framework.test_case import TestCase, check_supported_nic, skip_unsupported_pkg
 
-from test_case import TestCase, skip_unsupported_pkg, check_supported_nic
-from flexible_common import FlexibleRxdBase
+from .flexible_common import FlexibleRxdBase
 
 
 class TestIavfFlexibleDescriptor(TestCase, FlexibleRxdBase):
diff --git a/tests/TestSuite_iavf_package_driver_error_handle.py b/tests/TestSuite_iavf_package_driver_error_handle.py
index d155afc9..a4221699 100644
--- a/tests/TestSuite_iavf_package_driver_error_handle.py
+++ b/tests/TestSuite_iavf_package_driver_error_handle.py
@@ -29,12 +29,14 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-import time
-import re
 import os
-from test_case import TestCase
-from pmd_output import PmdOutput
-from config import UserConf
+import re
+import time
+
+from framework.config import UserConf
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
+
 
 class Testiavf_package_and_driver_check(TestCase):
 
diff --git a/tests/TestSuite_ieee1588.py b/tests/TestSuite_ieee1588.py
index f737c796..e17b1699 100644
--- a/tests/TestSuite_ieee1588.py
+++ b/tests/TestSuite_ieee1588.py
@@ -34,12 +34,13 @@ DPDK Test suite.
 Test support of IEEE1588 Precise Time Protocol.
 """
 
-import utils
-import time
 import re
-from test_case import TestCase
-from pmd_output import PmdOutput
-from packet import Packet
+import time
+
+import framework.utils as utils
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
 
 DEV_TX_OFFLOAD_MULTI_SEGS = '0x00008000'
 
diff --git a/tests/TestSuite_inline_ipsec.py b/tests/TestSuite_inline_ipsec.py
index 2b9db77e..5d8332a4 100644
--- a/tests/TestSuite_inline_ipsec.py
+++ b/tests/TestSuite_inline_ipsec.py
@@ -35,13 +35,14 @@ DPDK Test suite.
 Test inline_ipsec.
 """
 
-import utils
-import time
-import re
 import random
+import re
+import time
+
+from scapy.all import ESP, IP, Ether, SecurityAssociation, sendp
 
-from scapy.all import ESP, IP, Ether, sendp, SecurityAssociation
-from test_case import TestCase
+import framework.utils as utils
+from framework.test_case import TestCase
 
 ETHER_STANDARD_MTU = 1300
 ETHER_JUMBO_FRAME_MTU = 9000
diff --git a/tests/TestSuite_interrupt_pmd.py b/tests/TestSuite_interrupt_pmd.py
index e5e3751d..db8efe44 100644
--- a/tests/TestSuite_interrupt_pmd.py
+++ b/tests/TestSuite_interrupt_pmd.py
@@ -37,8 +37,9 @@ Test interrupt pmd.
 
 import string
 import time
-import utils
-from test_case import TestCase
+
+import framework.utils as utils
+from framework.test_case import TestCase
 
 
 class TestInterruptPmd(TestCase):
diff --git a/tests/TestSuite_ip_pipeline.py b/tests/TestSuite_ip_pipeline.py
index 0d5a114b..82a8a68a 100644
--- a/tests/TestSuite_ip_pipeline.py
+++ b/tests/TestSuite_ip_pipeline.py
@@ -29,38 +29,35 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-import utils
+import os
+import random
 import re
 import time
+from time import sleep
 
-from settings import HEADER_SIZE
-from test_case import TestCase
-from pmd_output import PmdOutput
-from settings import DRIVERS
-from crb import Crb
-
-from virt_dut import VirtDut
-from project_dpdk import DPDKdut
-from dut import Dut
-from packet import Packet
-
-import os
-import random
-from exception import VerifyFailure
 import scapy.layers.inet
-from scapy.utils import rdpcap
-
-from time import sleep
-#from scapy.all import conf
-from scapy.utils import wrpcap, rdpcap, hexstr
-from scapy.layers.inet import Ether, IP, TCP, UDP, ICMP
-from scapy.layers.l2 import Dot1Q, ARP, GRE
+from scapy.arch import get_if_hwaddr
+from scapy.layers.inet import ICMP, IP, TCP, UDP, Ether
+from scapy.layers.l2 import ARP, GRE, Dot1Q
 from scapy.layers.sctp import SCTP, SCTPChunkData
+from scapy.packet import Raw, bind_layers
 from scapy.route import *
-from scapy.packet import bind_layers, Raw
-from scapy.arch import get_if_hwaddr
-from scapy.sendrecv import sniff
-from scapy.sendrecv import sendp
+from scapy.sendrecv import sendp, sniff
+
+#from scapy.all import conf
+from scapy.utils import hexstr, rdpcap, wrpcap
+
+import framework.utils as utils
+from framework.crb import Crb
+from framework.dut import Dut
+from framework.exception import VerifyFailure
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.project_dpdk import DPDKdut
+from framework.settings import DRIVERS, HEADER_SIZE
+from framework.test_case import TestCase
+from framework.virt_dut import VirtDut
+
 
 class TestIPPipeline(TestCase):
 
diff --git a/tests/TestSuite_ipfrag.py b/tests/TestSuite_ipfrag.py
index e9972659..71e3e789 100644
--- a/tests/TestSuite_ipfrag.py
+++ b/tests/TestSuite_ipfrag.py
@@ -34,16 +34,16 @@ DPDK Test suite.
 Test IPv4 fragmentation features in DPDK.
 """
 
-import utils
-import string
+import os
 import re
+import string
 import time
-import os
-from settings import HEADER_SIZE
-from packet import Packet
-from pktgen import PacketGeneratorHelper
-from test_case import TestCase
 
+import framework.utils as utils
+from framework.packet import Packet
+from framework.pktgen import PacketGeneratorHelper
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
 
 lpm_table_ipv4 = [
     "{RTE_IPV4(100,10,0,0), 16, P1}",
diff --git a/tests/TestSuite_ipgre.py b/tests/TestSuite_ipgre.py
index 5e7750c5..feeee75e 100644
--- a/tests/TestSuite_ipgre.py
+++ b/tests/TestSuite_ipgre.py
@@ -39,22 +39,22 @@ inside virtual point-to-point links over an Internet Protocol network.
 Fortville support GRE packet detecting, checksum computing and filtering.
 """
 
-import utils
+import os
 import re
 import time
-import os
-
-from packet import Packet
 
-from scapy.utils import wrpcap, rdpcap
-from scapy.packet import split_layers,bind_layers
-from scapy.layers.inet import Ether, IP, TCP, UDP
-from scapy.layers.sctp import SCTP
+from scapy.layers.inet import IP, TCP, UDP, Ether
 from scapy.layers.l2 import GRE
+from scapy.layers.sctp import SCTP
+from scapy.packet import bind_layers, split_layers
+from scapy.utils import rdpcap, wrpcap
+
+import framework.utils as utils
+from framework.exception import VerifyFailure
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
 
-from test_case import TestCase
-from exception import VerifyFailure
-from pmd_output import PmdOutput
 
 class TestIpgre(TestCase):
 
diff --git a/tests/TestSuite_ipsec_gw_cryptodev_func.py b/tests/TestSuite_ipsec_gw_cryptodev_func.py
index 33b67d45..a5d6e775 100644
--- a/tests/TestSuite_ipsec_gw_cryptodev_func.py
+++ b/tests/TestSuite_ipsec_gw_cryptodev_func.py
@@ -31,11 +31,12 @@
 
 import binascii
 import time
-import utils
-from test_case import TestCase
-import packet
 
-import cryptodev_common as cc
+import framework.packet as packet
+import framework.utils as utils
+import tests.cryptodev_common as cc
+from framework.test_case import TestCase
+
 
 class TestIPsecGW(TestCase):
 
diff --git a/tests/TestSuite_ipv4_reassembly.py b/tests/TestSuite_ipv4_reassembly.py
index 0342fb0a..73e91823 100644
--- a/tests/TestSuite_ipv4_reassembly.py
+++ b/tests/TestSuite_ipv4_reassembly.py
@@ -38,12 +38,13 @@ Test the IP reassembly feature
 
 import os
 import time
-from scapy.utils import struct, socket, PcapWriter
-from scapy.layers.inet import Ether, IP, TCP, fragment
+
+from scapy.layers.inet import IP, TCP, Ether, fragment
 from scapy.route import *
+from scapy.utils import PcapWriter, socket, struct
 
-import utils
-from test_case import TestCase
+import framework.utils as utils
+from framework.test_case import TestCase
 
 
 class IpReassemblyTestConfig(object):
diff --git a/tests/TestSuite_ixgbe_vf_get_extra_queue_information.py b/tests/TestSuite_ixgbe_vf_get_extra_queue_information.py
index eeef6c75..5d297731 100644
--- a/tests/TestSuite_ixgbe_vf_get_extra_queue_information.py
+++ b/tests/TestSuite_ixgbe_vf_get_extra_queue_information.py
@@ -33,17 +33,19 @@
 DPDK Test suite.
 Test Niantic ixgbe_get_vf_queue Include Extra Information function.
 """
-import time
 import random
 import re
-import utils
+import time
+
+import framework.utils as utils
+from framework.pmd_output import PmdOutput
+from framework.qemu_kvm import QEMUKvm
 
 # Use scapy to send packets with different source and dest ip.
 # and collect the hash result of five tuple and the queue id.
-from test_case import TestCase
-from pmd_output import PmdOutput
-from virt_common import VM
-from qemu_kvm import QEMUKvm
+from framework.test_case import TestCase
+from framework.virt_common import VM
+
 
 class TestIxgbeVfGetExtraInfo(TestCase):
 
diff --git a/tests/TestSuite_jumboframes.py b/tests/TestSuite_jumboframes.py
index e277bace..4ad9569e 100644
--- a/tests/TestSuite_jumboframes.py
+++ b/tests/TestSuite_jumboframes.py
@@ -34,12 +34,13 @@ DPDK Test suite.
 Test the support of Jumbo Frames by Poll Mode Drivers
 """
 
-import utils
 import re
 from time import sleep
-from test_case import TestCase
-from pmd_output import PmdOutput
-from settings import PROTOCOL_PACKET_SIZE
+
+import framework.utils as utils
+from framework.pmd_output import PmdOutput
+from framework.settings import PROTOCOL_PACKET_SIZE
+from framework.test_case import TestCase
 
 ETHER_HEADER_LEN = 18
 IP_HEADER_LEN = 20
diff --git a/tests/TestSuite_keep_alive.py b/tests/TestSuite_keep_alive.py
index 4d350d79..0ac3e7a0 100644
--- a/tests/TestSuite_keep_alive.py
+++ b/tests/TestSuite_keep_alive.py
@@ -35,10 +35,12 @@ DPDK Test suite.
 Test keep alive
 """
 
-import time
 import re
-import utils
-from test_case import TestCase
+import time
+
+import framework.utils as utils
+from framework.test_case import TestCase
+
 
 class TestKeepAlive(TestCase):
 
diff --git a/tests/TestSuite_kernelpf_iavf.py b/tests/TestSuite_kernelpf_iavf.py
index 6a858fc5..4791e1e4 100644
--- a/tests/TestSuite_kernelpf_iavf.py
+++ b/tests/TestSuite_kernelpf_iavf.py
@@ -37,16 +37,17 @@ Test some vf function in ice driver
 
 """
 
+import random
 import re
 import time
-import random
-import utils
-from virt_common import VM
-from test_case import TestCase
-from pmd_output import PmdOutput
-from settings import HEADER_SIZE
-from packet import Packet
-from utils import RED
+
+import framework.utils as utils
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
+from framework.utils import RED
+from framework.virt_common import VM
 
 VM_CORES_MASK = 'all'
 MAX_VLAN = 4095
diff --git a/tests/TestSuite_kni.py b/tests/TestSuite_kni.py
index ba946140..85289d37 100644
--- a/tests/TestSuite_kni.py
+++ b/tests/TestSuite_kni.py
@@ -36,14 +36,15 @@ DPDK Test suite.
 Test Kernel NIC Interface.
 """
 
-import utils
-import re
 import os
+import re
 import time
 from random import randint
-from pktgen import PacketGeneratorHelper
-from test_case import TestCase
-import packet
+
+import framework.packet as packet
+import framework.utils as utils
+from framework.pktgen import PacketGeneratorHelper
+from framework.test_case import TestCase
 
 dut_ports = []
 port_virtual_interaces = []
diff --git a/tests/TestSuite_l2fwd.py b/tests/TestSuite_l2fwd.py
index 091ac093..ed95de95 100644
--- a/tests/TestSuite_l2fwd.py
+++ b/tests/TestSuite_l2fwd.py
@@ -34,10 +34,11 @@ Test Layer-2 Forwarding support
 """
 import os
 import time
-import utils
-from test_case import TestCase
-from settings import HEADER_SIZE
-from pktgen import PacketGeneratorHelper
+
+import framework.utils as utils
+from framework.pktgen import PacketGeneratorHelper
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
 
 
 class TestL2fwd(TestCase):
diff --git a/tests/TestSuite_l2fwd_cryptodev_func.py b/tests/TestSuite_l2fwd_cryptodev_func.py
index de0c0447..1e8ce549 100644
--- a/tests/TestSuite_l2fwd_cryptodev_func.py
+++ b/tests/TestSuite_l2fwd_cryptodev_func.py
@@ -29,25 +29,25 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-import hmac
-import hashlib
 import binascii
+import hashlib
+import hmac
 import time
-import utils
-from test_case import TestCase
-from packet import Packet
-
-from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
-from cryptography.hazmat.primitives.ciphers.aead import AESCCM, AESGCM
-from cryptography.hazmat.backends import default_backend
 
 # Manually Install the CryptoMobile Python Library,
 # Before running this test suite
 # Web link : https://github.com/mitshell/CryptoMobile
 import CryptoMobile.CM as cm
 import pyDes
+from cryptography.hazmat.backends import default_backend
+from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
+from cryptography.hazmat.primitives.ciphers.aead import AESCCM, AESGCM
+
+import framework.utils as utils
+import tests.cryptodev_common as cc
+from framework.packet import Packet
+from framework.test_case import TestCase
 
-import cryptodev_common as cc
 
 class TestL2fwdCrypto(TestCase):
 
diff --git a/tests/TestSuite_l2fwd_jobstats.py b/tests/TestSuite_l2fwd_jobstats.py
index 6c104168..c7857f68 100644
--- a/tests/TestSuite_l2fwd_jobstats.py
+++ b/tests/TestSuite_l2fwd_jobstats.py
@@ -35,10 +35,11 @@ DPDK Test suite.
 Test L2fwd Jobstats
 """
 
-import time
 import re
-import utils
-from test_case import TestCase
+import time
+
+import framework.utils as utils
+from framework.test_case import TestCase
 
 
 class TestL2fwdJobstats(TestCase):
diff --git a/tests/TestSuite_l2tp_esp_coverage.py b/tests/TestSuite_l2tp_esp_coverage.py
index 10520c8b..1ad5405e 100644
--- a/tests/TestSuite_l2tp_esp_coverage.py
+++ b/tests/TestSuite_l2tp_esp_coverage.py
@@ -31,10 +31,11 @@
 
 import re
 import time
-from packet import Packet
-from pmd_output import PmdOutput
-from test_case import TestCase, skip_unsupported_pkg, check_supported_nic
-import rte_flow_common as rfc
+
+import tests.rte_flow_common as rfc
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase, check_supported_nic, skip_unsupported_pkg
 
 vf0_mac = "00:11:22:33:44:55"
 
diff --git a/tests/TestSuite_l3fwd.py b/tests/TestSuite_l3fwd.py
index 4efcca09..1b933f39 100644
--- a/tests/TestSuite_l3fwd.py
+++ b/tests/TestSuite_l3fwd.py
@@ -33,8 +33,9 @@
 DPDK Test suite.
 Layer-3 forwarding test script.
 """
-from test_case import TestCase
-from perf_test_base import PerfTestBase, MATCH_MODE, IP_TYPE
+from framework.test_case import TestCase
+
+from .perf_test_base import IP_TYPE, MATCH_MODE, PerfTestBase
 
 
 class TestL3fwd(TestCase, PerfTestBase):
diff --git a/tests/TestSuite_l3fwd_em.py b/tests/TestSuite_l3fwd_em.py
index 4879b503..9f6069cd 100644
--- a/tests/TestSuite_l3fwd_em.py
+++ b/tests/TestSuite_l3fwd_em.py
@@ -33,8 +33,9 @@
 DPDK Test suite.
 Layer-3 forwarding test script.
 """
-from test_case import TestCase
-from perf_test_base import PerfTestBase, MATCH_MODE, IP_TYPE
+from framework.test_case import TestCase
+
+from .perf_test_base import IP_TYPE, MATCH_MODE, PerfTestBase
 
 
 class TestL3fwdEm(TestCase, PerfTestBase):
diff --git a/tests/TestSuite_l3fwd_lpm_ipv4.py b/tests/TestSuite_l3fwd_lpm_ipv4.py
index 3b881e0a..c269e101 100644
--- a/tests/TestSuite_l3fwd_lpm_ipv4.py
+++ b/tests/TestSuite_l3fwd_lpm_ipv4.py
@@ -33,8 +33,9 @@
 DPDK Test suite.
 Layer-3 forwarding test script.
 """
-from test_case import TestCase
-from perf_test_base import PerfTestBase, MATCH_MODE, IP_TYPE
+from framework.test_case import TestCase
+
+from .perf_test_base import IP_TYPE, MATCH_MODE, PerfTestBase
 
 
 class TestL3fwdLpmIpv4(TestCase, PerfTestBase):
diff --git a/tests/TestSuite_l3fwd_lpm_ipv4_rfc2544.py b/tests/TestSuite_l3fwd_lpm_ipv4_rfc2544.py
index 5b4a0aa3..fa2b194d 100644
--- a/tests/TestSuite_l3fwd_lpm_ipv4_rfc2544.py
+++ b/tests/TestSuite_l3fwd_lpm_ipv4_rfc2544.py
@@ -33,8 +33,9 @@
 DPDK Test suite.
 Layer-3 forwarding test script.
 """
-from test_case import TestCase
-from perf_test_base import PerfTestBase, MATCH_MODE, IP_TYPE
+from framework.test_case import TestCase
+
+from .perf_test_base import IP_TYPE, MATCH_MODE, PerfTestBase
 
 
 class TestL3fwdLpmIpv4Rfc2544(TestCase, PerfTestBase):
diff --git a/tests/TestSuite_l3fwd_lpm_ipv6.py b/tests/TestSuite_l3fwd_lpm_ipv6.py
index e53e4f77..65fdf115 100644
--- a/tests/TestSuite_l3fwd_lpm_ipv6.py
+++ b/tests/TestSuite_l3fwd_lpm_ipv6.py
@@ -33,8 +33,9 @@
 DPDK Test suite.
 Layer-3 forwarding test script.
 """
-from test_case import TestCase
-from perf_test_base import PerfTestBase, MATCH_MODE, IP_TYPE
+from framework.test_case import TestCase
+
+from .perf_test_base import IP_TYPE, MATCH_MODE, PerfTestBase
 
 
 class TestL3fwdLpmIpv6(TestCase, PerfTestBase):
diff --git a/tests/TestSuite_l3fwdacl.py b/tests/TestSuite_l3fwdacl.py
index 4cc51d40..65c46b0c 100644
--- a/tests/TestSuite_l3fwdacl.py
+++ b/tests/TestSuite_l3fwdacl.py
@@ -35,10 +35,12 @@ Layer-3 forwarding ACL test script.
 """
 
 import re
-import utils
 import time
-from test_case import TestCase
-import packet
+
+import framework.packet as packet
+import framework.utils as utils
+from framework.test_case import TestCase
+
 
 class TestL3fwdacl(TestCase):
 
diff --git a/tests/TestSuite_large_vf.py b/tests/TestSuite_large_vf.py
index 84f592d1..049c965b 100644
--- a/tests/TestSuite_large_vf.py
+++ b/tests/TestSuite_large_vf.py
@@ -32,11 +32,10 @@
 import re
 import time
 
-from packet import Packet
-from pmd_output import PmdOutput
-from test_case import TestCase
-
-from utils import GREEN, RED
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
+from framework.utils import GREEN, RED
 
 multi_fdir_queue_group = {
     "match": [
diff --git a/tests/TestSuite_link_flowctrl.py b/tests/TestSuite_link_flowctrl.py
index 326f8b98..a102288a 100644
--- a/tests/TestSuite_link_flowctrl.py
+++ b/tests/TestSuite_link_flowctrl.py
@@ -34,15 +34,15 @@ DPDK Test suite.
 Test for Ethernet Link Flow Control Features by Poll Mode Drivers
 """
 
-import utils
-import re
 import os
-
+import re
 from time import sleep
-from test_case import TestCase
-from pmd_output import PmdOutput
-from settings import HEADER_SIZE
-from pktgen import PacketGeneratorHelper
+
+import framework.utils as utils
+from framework.pktgen import PacketGeneratorHelper
+from framework.pmd_output import PmdOutput
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
 
 
 class TestLinkFlowctrl(TestCase):
diff --git a/tests/TestSuite_link_status_interrupt.py b/tests/TestSuite_link_status_interrupt.py
index 5590d948..bdb43f42 100755
--- a/tests/TestSuite_link_status_interrupt.py
+++ b/tests/TestSuite_link_status_interrupt.py
@@ -35,12 +35,13 @@ DPDK Test suite.
 Test link status.
 """
 
-import utils
+import re
 import string
 import time
-import re
-from test_case import TestCase
-from packet import Packet
+
+import framework.utils as utils
+from framework.packet import Packet
+from framework.test_case import TestCase
 
 
 class TestLinkStatusInterrupt(TestCase):
diff --git a/tests/TestSuite_linux_modules.py b/tests/TestSuite_linux_modules.py
index a5a1542a..674d24e4 100644
--- a/tests/TestSuite_linux_modules.py
+++ b/tests/TestSuite_linux_modules.py
@@ -37,10 +37,9 @@ Linux Kernel Modules example.
 import os
 import time
 
-from pmd_output import PmdOutput
-from test_case import TestCase
-
 from framework import settings
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
 
 ETHER_HEADER_LEN = 18
 IP_HEADER_LEN = 20
diff --git a/tests/TestSuite_loopback_multi_paths_port_restart.py b/tests/TestSuite_loopback_multi_paths_port_restart.py
index 972a8b25..f2064dcf 100644
--- a/tests/TestSuite_loopback_multi_paths_port_restart.py
+++ b/tests/TestSuite_loopback_multi_paths_port_restart.py
@@ -37,11 +37,12 @@ Benchmark Vhost loopback for 7 RX/TX PATHs.
 Includes Mergeable, Normal, Vector_RX,Inorder_mergeable,
 Inorder_no_mergeable, VIRTIO1.1_mergeable, VIRTIO1.1_normal Path.
 """
-import utils
-import time
 import re
-from pmd_output import PmdOutput
-from test_case import TestCase
+import time
+
+import framework.utils as utils
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
 
 
 class TestLoopbackPortRestart(TestCase):
diff --git a/tests/TestSuite_loopback_multi_queues.py b/tests/TestSuite_loopback_multi_queues.py
index 4700c2d4..903665bb 100644
--- a/tests/TestSuite_loopback_multi_queues.py
+++ b/tests/TestSuite_loopback_multi_queues.py
@@ -36,11 +36,12 @@ Includes Mergeable, Normal, Vector_RX, Inorder mergeable,
 Inorder no-mergeable, Virtio 1.1 mergeable, Virtio 1.1 no-mergeable Path.
 """
 
-import utils
-import time
 import re
-from pmd_output import PmdOutput
-from test_case import TestCase
+import time
+
+import framework.utils as utils
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
 
 
 class TestLoopbackMultiQueues(TestCase):
diff --git a/tests/TestSuite_loopback_virtio_user_server_mode.py b/tests/TestSuite_loopback_virtio_user_server_mode.py
index 0178ca34..7fbfe804 100644
--- a/tests/TestSuite_loopback_virtio_user_server_mode.py
+++ b/tests/TestSuite_loopback_virtio_user_server_mode.py
@@ -35,11 +35,12 @@
 DPDK Test suite.
 Test loopback virtio-user server mode
 """
-import utils
-import time
 import re
-from pmd_output import PmdOutput
-from test_case import TestCase
+import time
+
+import framework.utils as utils
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
 
 
 class TestLoopbackVirtioUserServerMode(TestCase):
diff --git a/tests/TestSuite_mac_filter.py b/tests/TestSuite_mac_filter.py
index 112914d6..b32962ed 100644
--- a/tests/TestSuite_mac_filter.py
+++ b/tests/TestSuite_mac_filter.py
@@ -34,12 +34,14 @@ DPDK Test suite.
 Test the support of Allowlist Features by Poll Mode Drivers
 """
 
-import utils
-import time
-from test_case import TestCase
-from pmd_output import PmdOutput
-from packet import Packet
 import operator
+import time
+
+import framework.utils as utils
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
+
 
 class TestMacFilter(TestCase):
 
diff --git a/tests/TestSuite_macsec_for_ixgbe.py b/tests/TestSuite_macsec_for_ixgbe.py
index 4b010d08..3fe48288 100644
--- a/tests/TestSuite_macsec_for_ixgbe.py
+++ b/tests/TestSuite_macsec_for_ixgbe.py
@@ -29,14 +29,15 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
+import os
 import re
 import time
-import os
 
-from test_case import TestCase
-from dut import Dut
-from pktgen import PacketGeneratorHelper
-from packet import Packet
+from framework.dut import Dut
+from framework.packet import Packet
+from framework.pktgen import PacketGeneratorHelper
+from framework.test_case import TestCase
+
 
 class TestMacsecForIxgbe(TestCase):
     def set_up_all(self):
diff --git a/tests/TestSuite_malicious_driver_event_indication.py b/tests/TestSuite_malicious_driver_event_indication.py
index 8b446cf2..81c2af97 100644
--- a/tests/TestSuite_malicious_driver_event_indication.py
+++ b/tests/TestSuite_malicious_driver_event_indication.py
@@ -38,12 +38,11 @@ import re
 import time
 import traceback
 from contextlib import contextmanager
-from pmd_output import PmdOutput
 
-
-from exception import VerifyFailure
-from test_case import TestCase
-import utils
+import framework.utils as utils
+from framework.exception import VerifyFailure
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
 
 
 class TestSuiteMaliciousDrvEventIndication(TestCase):
diff --git a/tests/TestSuite_mdd.py b/tests/TestSuite_mdd.py
index 8aad1a72..d185cc8a 100644
--- a/tests/TestSuite_mdd.py
+++ b/tests/TestSuite_mdd.py
@@ -37,10 +37,11 @@ Test the support of Malicious Driver Detection
 
 import re
 import time
-from packet import Packet
-from virt_common import VM
-from test_case import TestCase
-from pmd_output import PmdOutput
+
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
+from framework.virt_common import VM
 
 VM_CORES_MASK = 'all'
 send_pks_num = 2000
diff --git a/tests/TestSuite_metering_and_policing.py b/tests/TestSuite_metering_and_policing.py
index a566c65c..a1858080 100644
--- a/tests/TestSuite_metering_and_policing.py
+++ b/tests/TestSuite_metering_and_policing.py
@@ -34,15 +34,16 @@ Test metering_and_policing.
 """
 
 import os
-import utils
+import re
 import string
 import time
-import re
-from test_case import TestCase
-from plotting import Plotting
-from settings import HEADER_SIZE
-from dut import Dut
-from pmd_output import PmdOutput
+
+import framework.utils as utils
+from framework.dut import Dut
+from framework.plotting import Plotting
+from framework.pmd_output import PmdOutput
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
 
 
 class TestMeteringAndPolicing(TestCase):
diff --git a/tests/TestSuite_metrics.py b/tests/TestSuite_metrics.py
index d1b7fe9c..7c658173 100644
--- a/tests/TestSuite_metrics.py
+++ b/tests/TestSuite_metrics.py
@@ -34,20 +34,20 @@ DPDK Test suite.
 '''
 
 import os
+import random
 import re
 import time
-import random
 import traceback
 from copy import deepcopy
 from pprint import pformat
 
-from test_case import TestCase
-from pmd_output import PmdOutput
-from exception import VerifyFailure
-from settings import HEADER_SIZE
-from packet import Packet
-from pktgen import TRANSMIT_CONT
-from config import SuiteConf
+from framework.config import SuiteConf
+from framework.exception import VerifyFailure
+from framework.packet import Packet
+from framework.pktgen import TRANSMIT_CONT
+from framework.pmd_output import PmdOutput
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
 
 
 class TestMetrics(TestCase):
diff --git a/tests/TestSuite_mtu_update.py b/tests/TestSuite_mtu_update.py
index 2aff926e..ad13a8ab 100644
--- a/tests/TestSuite_mtu_update.py
+++ b/tests/TestSuite_mtu_update.py
@@ -35,24 +35,19 @@ DPDK Test suite.
 MTU Checks example.
 """
 import os
+import re
 import subprocess
+import time
 from time import sleep
 from typing import List, Tuple
 
-import utils
-from pmd_output import PmdOutput
-from test_case import TestCase
-
-from pktgen_base import TRANSMIT_S_BURST
-
-import utils
-import re
-import time
-from test_case import TestCase
-from pktgen import TRANSMIT_CONT
-
-from packet import Packet
-from settings import HEADER_SIZE
+import framework.utils as utils
+from framework.packet import Packet
+from framework.pktgen import TRANSMIT_CONT
+from framework.pktgen_base import TRANSMIT_S_BURST
+from framework.pmd_output import PmdOutput
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
 
 ETHER_HEADER_LEN = 18
 VLAN=4
diff --git a/tests/TestSuite_multicast.py b/tests/TestSuite_multicast.py
index a163a151..dacdb6f2 100644
--- a/tests/TestSuite_multicast.py
+++ b/tests/TestSuite_multicast.py
@@ -36,8 +36,9 @@ multicast test script.
 """
 
 import time
-from test_case import TestCase
-import utils
+
+import framework.utils as utils
+from framework.test_case import TestCase
 
 routeTbl = [
     ["224.0.0.101", "P1"], ["224.0.0.102", "P2"],
diff --git a/tests/TestSuite_multiple_pthread.py b/tests/TestSuite_multiple_pthread.py
index 091e95b0..885b44e3 100644
--- a/tests/TestSuite_multiple_pthread.py
+++ b/tests/TestSuite_multiple_pthread.py
@@ -29,14 +29,15 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-import time
 import os
-import re
 import random
+import re
 import string
-import utils
-from test_case import TestCase
-from packet import Packet
+import time
+
+import framework.utils as utils
+from framework.packet import Packet
+from framework.test_case import TestCase
 
 
 class TestMultiplePthread(TestCase):
diff --git a/tests/TestSuite_multiprocess.py b/tests/TestSuite_multiprocess.py
index 8752a727..c1a23ae6 100644
--- a/tests/TestSuite_multiprocess.py
+++ b/tests/TestSuite_multiprocess.py
@@ -34,13 +34,14 @@ DPDK Test suite.
 Multi-process Test.
 """
 
-import utils
-import time
 import os
+import time
+
+import framework.utils as utils
 
 executions = []
-from test_case import TestCase
-from pktgen import PacketGeneratorHelper
+from framework.pktgen import PacketGeneratorHelper
+from framework.test_case import TestCase
 
 
 class TestMultiprocess(TestCase):
diff --git a/tests/TestSuite_nic_single_core_perf.py b/tests/TestSuite_nic_single_core_perf.py
index 4ccc04ac..ab69ad57 100644
--- a/tests/TestSuite_nic_single_core_perf.py
+++ b/tests/TestSuite_nic_single_core_perf.py
@@ -32,18 +32,20 @@
 DPDK Test suite.
 """
 
-import utils
 import json
 import os
 import string
-from test_case import TestCase
-from exception import VerifyFailure
-from settings import HEADER_SIZE, UPDATE_EXPECTED, load_global_setting
-from pmd_output import PmdOutput
 from copy import deepcopy
+
 from numpy import mean
-import rst
-from pktgen import PacketGeneratorHelper
+
+import framework.rst as rst
+import framework.utils as utils
+from framework.exception import VerifyFailure
+from framework.pktgen import PacketGeneratorHelper
+from framework.pmd_output import PmdOutput
+from framework.settings import HEADER_SIZE, UPDATE_EXPECTED, load_global_setting
+from framework.test_case import TestCase
 
 
 class TestNicSingleCorePerf(TestCase):
diff --git a/tests/TestSuite_ntb.py b/tests/TestSuite_ntb.py
index 01e10620..19ddeeec 100644
--- a/tests/TestSuite_ntb.py
+++ b/tests/TestSuite_ntb.py
@@ -32,11 +32,13 @@
 import os
 import re
 import time
-from test_case import TestCase
-from net_device import GetNicObj
-from settings import HEADER_SIZE
-from packet import Packet
-from pktgen import PacketGeneratorHelper
+
+from framework.packet import Packet
+from framework.pktgen import PacketGeneratorHelper
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
+from nics.net_device import GetNicObj
+
 
 class TestNtb(TestCase):
 
diff --git a/tests/TestSuite_nvgre.py b/tests/TestSuite_nvgre.py
index 1b1a50db..63b95d16 100644
--- a/tests/TestSuite_nvgre.py
+++ b/tests/TestSuite_nvgre.py
@@ -36,27 +36,27 @@ Test NVGRE features in DPDK.
 
 """
 
-import utils
-import string
+import os
 import re
+import string
 import time
-import os
-from pmd_output import PmdOutput
-from packet import IncreaseIP, IncreaseIPv6
 from random import randint
-
 from socket import AF_INET6
-from scapy.utils import struct, socket, wrpcap, rdpcap
-from scapy.layers.inet import Ether, IP, TCP, UDP
+
+from scapy.config import conf
+from scapy.layers.inet import IP, TCP, UDP, Ether
 from scapy.layers.inet6 import IPv6
-from scapy.layers.l2 import Dot1Q, GRE
+from scapy.layers.l2 import GRE, Dot1Q
 from scapy.layers.sctp import SCTP, SCTPChunkData
-from scapy.sendrecv import sniff
-from scapy.config import conf
 from scapy.route import *
+from scapy.sendrecv import sniff
+from scapy.utils import rdpcap, socket, struct, wrpcap
 
-from test_case import TestCase
-from settings import HEADER_SIZE
+import framework.utils as utils
+from framework.packet import IncreaseIP, IncreaseIPv6
+from framework.pmd_output import PmdOutput
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
 
 #
 #
diff --git a/tests/TestSuite_packet_capture.py b/tests/TestSuite_packet_capture.py
index 4b980558..4440c5f3 100644
--- a/tests/TestSuite_packet_capture.py
+++ b/tests/TestSuite_packet_capture.py
@@ -32,25 +32,24 @@
 DPDK Test suite.
 Test support dpdk pdump tool features
 '''
-import random
 import os
-import traceback
-import time
+import random
 import re
 import signal
 import subprocess
+import time
+import traceback
 from pprint import pformat
 
-from scapy.utils import rdpcap
+from scapy.fields import ConditionalField
 from scapy.packet import NoPayload
 from scapy.packet import Packet as scapyPacket
-from scapy.fields import ConditionalField
-
-from test_case import TestCase
-from exception import VerifyFailure
-from pmd_output import PmdOutput
-from packet import Packet
+from scapy.utils import rdpcap
 
+from framework.exception import VerifyFailure
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
 
 # These source code copy from packet.py module before sniff_packets/load_sniff_packets
 # refactor. New refactor methods have much more longer time consumption than
diff --git a/tests/TestSuite_packet_ordering.py b/tests/TestSuite_packet_ordering.py
index 2280b8b1..9b03e7fc 100644
--- a/tests/TestSuite_packet_ordering.py
+++ b/tests/TestSuite_packet_ordering.py
@@ -36,9 +36,10 @@ Packet ordering example app test cases.
 
 import os
 import time
-import utils
-from test_case import TestCase
-from packet import Packet
+
+import framework.utils as utils
+from framework.packet import Packet
+from framework.test_case import TestCase
 
 
 class TestPacketOrdering(TestCase):
diff --git a/tests/TestSuite_perf_virtio_user_loopback.py b/tests/TestSuite_perf_virtio_user_loopback.py
index 4408786c..6ab6fa48 100644
--- a/tests/TestSuite_perf_virtio_user_loopback.py
+++ b/tests/TestSuite_perf_virtio_user_loopback.py
@@ -37,16 +37,17 @@ Inorder non-mergeable, packed ring mergeable, non-mergeable, inorder mergeable,
 inorder non-mergeable Path.
 """
 
-import utils
-import time
-import re
 import json
-import rst
 import os
-from pmd_output import PmdOutput
+import re
+import time
 from copy import deepcopy
-from test_case import TestCase
-from settings import UPDATE_EXPECTED, load_global_setting
+
+import framework.rst as rst
+import framework.utils as utils
+from framework.pmd_output import PmdOutput
+from framework.settings import UPDATE_EXPECTED, load_global_setting
+from framework.test_case import TestCase
 
 
 class TestPerfVirtioUserLoopback(TestCase):
diff --git a/tests/TestSuite_perf_vm2vm_virtio_net_perf.py b/tests/TestSuite_perf_vm2vm_virtio_net_perf.py
index ac0e38a2..f09967b3 100644
--- a/tests/TestSuite_perf_vm2vm_virtio_net_perf.py
+++ b/tests/TestSuite_perf_vm2vm_virtio_net_perf.py
@@ -38,19 +38,20 @@ vm2vm split ring and packed ring vhost-user/virtio-net check the payload of larg
 mergeable and non-mergeable dequeue zero copy.
 please use qemu version greater 4.1.94 which support packed feathur to test this suite.
 """
-import re
-import os
-import rst
 import json
-import time
-import string
+import os
 import random
-from virt_common import VM
-from test_case import TestCase
-from pmd_output import PmdOutput
-from settings import UPDATE_EXPECTED, load_global_setting
+import re
+import string
+import time
 from copy import deepcopy
 
+import framework.rst as rst
+from framework.pmd_output import PmdOutput
+from framework.settings import UPDATE_EXPECTED, load_global_setting
+from framework.test_case import TestCase
+from framework.virt_common import VM
+
 
 class TestPerfVM2VMVirtioNetPerf(TestCase):
     def set_up_all(self):
diff --git a/tests/TestSuite_performance_thread.py b/tests/TestSuite_performance_thread.py
index 459d9a11..874ad9a8 100644
--- a/tests/TestSuite_performance_thread.py
+++ b/tests/TestSuite_performance_thread.py
@@ -35,10 +35,11 @@ Performance-Thread test script.
 """
 import os
 import string
-import utils
-from test_case import TestCase
-from settings import HEADER_SIZE
-from pktgen import PacketGeneratorHelper
+
+import framework.utils as utils
+from framework.pktgen import PacketGeneratorHelper
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
 
 
 class TestPerformanceThread(TestCase):
diff --git a/tests/TestSuite_pf_smoke.py b/tests/TestSuite_pf_smoke.py
index 63eb2c7e..7477f498 100644
--- a/tests/TestSuite_pf_smoke.py
+++ b/tests/TestSuite_pf_smoke.py
@@ -29,14 +29,17 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-from packet import Packet
-from pmd_output import PmdOutput
-from test_case import TestCase
-from smoke_base import SmokeTest
-from smoke_base import JUMBO_FRAME_LENGTH
-from smoke_base import JUMBO_FRAME_MTU
-from smoke_base import DEFAULT_MTU_VALUE
-from smoke_base import LAUNCH_QUEUE
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
+
+from .smoke_base import (
+    DEFAULT_MTU_VALUE,
+    JUMBO_FRAME_LENGTH,
+    JUMBO_FRAME_MTU,
+    LAUNCH_QUEUE,
+    SmokeTest,
+)
 
 
 class TestPfSmoke(TestCase):
diff --git a/tests/TestSuite_pipeline.py b/tests/TestSuite_pipeline.py
index e00f2e9b..627a5077 100644
--- a/tests/TestSuite_pipeline.py
+++ b/tests/TestSuite_pipeline.py
@@ -29,41 +29,36 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-import utils
+import itertools
+import os
+import random
 import re
-import time
 import socket
+import time
+from time import sleep
 
-from settings import HEADER_SIZE
-from test_case import TestCase
-from pmd_output import PmdOutput
-from settings import DRIVERS
-from crb import Crb
-
-from virt_dut import VirtDut
-from project_dpdk import DPDKdut
-from dut import Dut
-from packet import Packet
-
-import os
-import random
-from exception import VerifyFailure
 import scapy.layers.inet
-from scapy.utils import rdpcap
-
-from time import sleep
-# from scapy.all import conf
-from scapy.utils import wrpcap, rdpcap, hexstr
-from scapy.layers.inet import Ether, IP, TCP, UDP, ICMP
-from scapy.layers.l2 import Dot1Q, ARP, GRE
+from scapy.arch import get_if_hwaddr
+from scapy.layers.inet import ICMP, IP, TCP, UDP, Ether
+from scapy.layers.l2 import ARP, GRE, Dot1Q
 from scapy.layers.sctp import SCTP, SCTPChunkData
+from scapy.packet import Raw, bind_layers
 from scapy.route import *
-from scapy.packet import bind_layers, Raw
-from scapy.arch import get_if_hwaddr
-from scapy.sendrecv import sniff
-from scapy.sendrecv import sendp
+from scapy.sendrecv import sendp, sniff
 
-import itertools
+# from scapy.all import conf
+from scapy.utils import hexstr, rdpcap, wrpcap
+
+import framework.utils as utils
+from framework.crb import Crb
+from framework.dut import Dut
+from framework.exception import VerifyFailure
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.project_dpdk import DPDKdut
+from framework.settings import DRIVERS, HEADER_SIZE
+from framework.test_case import TestCase
+from framework.virt_dut import VirtDut
 
 TIMESTAMP = re.compile(r'\d{2}\:\d{2}\:\d{2}\.\d{6}')
 PAYLOAD = re.compile(r'\t0x([0-9a-fA-F]+):  ([0-9a-fA-F ]+)')
diff --git a/tests/TestSuite_pmd.py b/tests/TestSuite_pmd.py
index afc36d9f..e10a5432 100644
--- a/tests/TestSuite_pmd.py
+++ b/tests/TestSuite_pmd.py
@@ -34,21 +34,20 @@ DPDK Test suite.
 Test userland 10Gb PMD
 """
 
-import utils
+import os
 import re
 import time
-import os
-
-from test_case import TestCase
+from datetime import datetime
 from time import sleep
-from settings import HEADER_SIZE
-from pmd_output import PmdOutput
 
-from settings import FOLDERS
-from system_info import SystemInfo
-import perf_report
-from datetime import datetime
-from pktgen import PacketGeneratorHelper
+import framework.utils as utils
+import nics.perf_report as perf_report
+from framework.pktgen import PacketGeneratorHelper
+from framework.pmd_output import PmdOutput
+from framework.settings import FOLDERS, HEADER_SIZE
+from framework.test_case import TestCase
+from nics.system_info import SystemInfo
+
 
 class TestPmd(TestCase):
 
diff --git a/tests/TestSuite_pmd_bonded.py b/tests/TestSuite_pmd_bonded.py
index c5c1a667..fcbbcded 100644
--- a/tests/TestSuite_pmd_bonded.py
+++ b/tests/TestSuite_pmd_bonded.py
@@ -37,17 +37,17 @@ Test userland 10Gb PMD.
 
 """
 
-import time
-import re
 import random
-from socket import htons, htonl
+import re
+import time
 from functools import wraps
+from socket import htonl, htons
 
-import utils
-from test_case import TestCase
-from exception import TimeoutException
-from settings import TIMEOUT
-from pmd_output import PmdOutput
+import framework.utils as utils
+from framework.exception import TimeoutException
+from framework.pmd_output import PmdOutput
+from framework.settings import TIMEOUT
+from framework.test_case import TestCase
 
 SOCKET_0 = 0
 SOCKET_1 = 1
diff --git a/tests/TestSuite_pmd_bonded_8023ad.py b/tests/TestSuite_pmd_bonded_8023ad.py
index 37070421..31c2cb47 100644
--- a/tests/TestSuite_pmd_bonded_8023ad.py
+++ b/tests/TestSuite_pmd_bonded_8023ad.py
@@ -29,17 +29,19 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-import time
 import re
+import time
 import traceback
 
+# import bonding lib(common methods for pmd bonding command)
+import tests.bonding as bonding
+from framework.exception import VerifyFailure
+
 # import dts/framework libs
-from test_case import TestCase
-from exception import VerifyFailure
+from framework.test_case import TestCase
+
+from .bonding import FRAME_SIZE_64, MODE_LACP
 
-# import bonding lib(common methods for pmd bonding command)
-import bonding
-from bonding import MODE_LACP, FRAME_SIZE_64
 
 ######################
 # bonding 802.3ad mode
diff --git a/tests/TestSuite_pmd_stacked_bonded.py b/tests/TestSuite_pmd_stacked_bonded.py
index 12c384fb..9f1ecc26 100644
--- a/tests/TestSuite_pmd_stacked_bonded.py
+++ b/tests/TestSuite_pmd_stacked_bonded.py
@@ -33,21 +33,24 @@ import time
 import traceback
 
 # import dts/framework libs
-import utils
-from test_case import TestCase
-from exception import VerifyFailure
+import framework.utils as utils
 
 # import bonding lib
-import bonding
-from bonding import (
-                MODE_ROUND_ROBIN,
-                MODE_ACTIVE_BACKUP,
-                MODE_XOR_BALANCE,
-                MODE_BROADCAST,
-                MODE_LACP,
-                MODE_TLB_BALANCE,
-                MODE_ALB_BALANCE,
-                FRAME_SIZE_64)
+import tests.bonding as bonding
+from framework.exception import VerifyFailure
+from framework.test_case import TestCase
+
+from .bonding import (
+    FRAME_SIZE_64,
+    MODE_ACTIVE_BACKUP,
+    MODE_ALB_BALANCE,
+    MODE_BROADCAST,
+    MODE_LACP,
+    MODE_ROUND_ROBIN,
+    MODE_TLB_BALANCE,
+    MODE_XOR_BALANCE,
+)
+
 
 class TestBondingStacked(TestCase):
 
diff --git a/tests/TestSuite_pmdpcap.py b/tests/TestSuite_pmdpcap.py
index 0913e9bf..8d1dea06 100644
--- a/tests/TestSuite_pmdpcap.py
+++ b/tests/TestSuite_pmdpcap.py
@@ -31,12 +31,13 @@
 
 '''
 '''
-from test_case import TestCase
-
 from time import sleep
-from scapy.layers.inet import Ether, IP
+
+from scapy.layers.inet import IP, Ether
 from scapy.utils import wrpcap
-import utils
+
+import framework.utils as utils
+from framework.test_case import TestCase
 
 
 #
diff --git a/tests/TestSuite_pmdrss_hash.py b/tests/TestSuite_pmdrss_hash.py
index 9ea6f9ae..2ff98cb0 100644
--- a/tests/TestSuite_pmdrss_hash.py
+++ b/tests/TestSuite_pmdrss_hash.py
@@ -36,10 +36,11 @@ Test DPDK1.8 feature: Fortville RSS full support - configuring hash functions.
 It can select Toeplitz or simple XOR hash function and it can configure symmetric hash functions.
 Support 4*10G, 1*40G and 2*40G NICs.
 """
-import time
 import random
 import re
-import utils
+import time
+
+import framework.utils as utils
 
 queue = 16
 reta_entries = []
@@ -60,7 +61,9 @@ iptypes = {'ipv4-sctp': 'sctp',
 
 # Use scapy to send packets with different source and dest ip.
 # and collect the hash result of five tuple and the queue id.
-from test_case import TestCase
+from framework.test_case import TestCase
+
+
 #
 #
 # Test class.
diff --git a/tests/TestSuite_pmdrssreta.py b/tests/TestSuite_pmdrssreta.py
index ce3ee421..b4b0beac 100644
--- a/tests/TestSuite_pmdrssreta.py
+++ b/tests/TestSuite_pmdrssreta.py
@@ -33,19 +33,22 @@
 DPDK Test suite.
 Test RSS reta (redirection table) update function.
 """
-import time
 import random
 import re
-import utils
 import textwrap
+import time
+
+import framework.utils as utils
+
 testQueues = [2, 9, 16]
 reta_entries = []
 reta_lines = []
 
+from framework.pmd_output import PmdOutput
+
 # Use scapy to send packets with different source and dest ip.
 # and collect the hash result of five tuple and the queue id.
-from test_case import TestCase
-from pmd_output import PmdOutput
+from framework.test_case import TestCase
 
 
 class TestPmdrssreta(TestCase):
diff --git a/tests/TestSuite_port_control.py b/tests/TestSuite_port_control.py
index 2d332732..299714e1 100755
--- a/tests/TestSuite_port_control.py
+++ b/tests/TestSuite_port_control.py
@@ -30,13 +30,14 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 import os
-import utils
-import time
 import re
-import packet
-from test_case import TestCase
-from pmd_output import PmdOutput
-from virt_common import VM
+import time
+
+import framework.packet as packet
+import framework.utils as utils
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
+from framework.virt_common import VM
 
 
 class TestPortControl(TestCase):
diff --git a/tests/TestSuite_port_representor.py b/tests/TestSuite_port_representor.py
index e2fe0dc8..bbf6908e 100644
--- a/tests/TestSuite_port_representor.py
+++ b/tests/TestSuite_port_representor.py
@@ -36,13 +36,13 @@ mode, stats reset, etc. our statistical data information is
 independent on the control plane and data plane.
 """
 
-import time
 import re
+import time
 
-from test_case import TestCase
-from dut import Dut
-from packet import Packet
-from pmd_output import PmdOutput
+from framework.dut import Dut
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
 
 
 class TestPortRepresentor(TestCase):
diff --git a/tests/TestSuite_power_bidirection_channel.py b/tests/TestSuite_power_bidirection_channel.py
index 1aa02976..4200eb42 100644
--- a/tests/TestSuite_power_bidirection_channel.py
+++ b/tests/TestSuite_power_bidirection_channel.py
@@ -37,10 +37,10 @@ import os
 import time
 import traceback
 
-from utils import create_mask as dts_create_mask
-from qemu_libvirt import LibvirtKvm
-from exception import VerifyFailure
-from test_case import TestCase
+from framework.exception import VerifyFailure
+from framework.qemu_libvirt import LibvirtKvm
+from framework.test_case import TestCase
+from framework.utils import create_mask as dts_create_mask
 
 
 class TestPowerBidirectionChannel(TestCase):
diff --git a/tests/TestSuite_power_branch_ratio.py b/tests/TestSuite_power_branch_ratio.py
index a157539a..dee2cc11 100644
--- a/tests/TestSuite_power_branch_ratio.py
+++ b/tests/TestSuite_power_branch_ratio.py
@@ -36,21 +36,18 @@ virtual power manager policy branch ratio test suite.
 import os
 import re
 import time
+import traceback
 from contextlib import contextmanager
 from copy import deepcopy
 from pprint import pformat
-import traceback
-
 
-from settings import load_global_setting
-from settings import HOST_BUILD_TYPE_SETTING
-from utils import create_mask as dts_create_mask
-from qemu_libvirt import LibvirtKvm
-from pktgen import TRANSMIT_CONT
-from exception import VerifyFailure
-from settings import HEADER_SIZE
-from packet import Packet
-from test_case import TestCase
+from framework.exception import VerifyFailure
+from framework.packet import Packet
+from framework.pktgen import TRANSMIT_CONT
+from framework.qemu_libvirt import LibvirtKvm
+from framework.settings import HEADER_SIZE, HOST_BUILD_TYPE_SETTING, load_global_setting
+from framework.test_case import TestCase
+from framework.utils import create_mask as dts_create_mask
 
 
 class TestPowerBranchRatio(TestCase):
diff --git a/tests/TestSuite_power_empty_poll.py b/tests/TestSuite_power_empty_poll.py
index bb69656d..90da8d04 100644
--- a/tests/TestSuite_power_empty_poll.py
+++ b/tests/TestSuite_power_empty_poll.py
@@ -39,12 +39,12 @@ import traceback
 from copy import deepcopy
 from pprint import pformat
 
-from utils import create_mask as dts_create_mask
-from exception import VerifyFailure
-from test_case import TestCase
-from settings import HEADER_SIZE, PKTGEN_TREX
-from packet import Packet
-from pktgen import TRANSMIT_CONT
+from framework.exception import VerifyFailure
+from framework.packet import Packet
+from framework.pktgen import TRANSMIT_CONT
+from framework.settings import HEADER_SIZE, PKTGEN_TREX
+from framework.test_case import TestCase
+from framework.utils import create_mask as dts_create_mask
 
 
 class TestPowerEmptyPoll(TestCase):
diff --git a/tests/TestSuite_power_negative.py b/tests/TestSuite_power_negative.py
index 9c290bab..25b3b6a5 100644
--- a/tests/TestSuite_power_negative.py
+++ b/tests/TestSuite_power_negative.py
@@ -39,10 +39,10 @@ import re
 import time
 import traceback
 
-from utils import create_mask as dts_create_mask
-from qemu_libvirt import LibvirtKvm
-from exception import VerifyFailure
-from test_case import TestCase
+from framework.exception import VerifyFailure
+from framework.qemu_libvirt import LibvirtKvm
+from framework.test_case import TestCase
+from framework.utils import create_mask as dts_create_mask
 
 
 class TestPowerNegative(TestCase):
diff --git a/tests/TestSuite_power_pbf.py b/tests/TestSuite_power_pbf.py
index 083fd5b3..42d939cd 100644
--- a/tests/TestSuite_power_pbf.py
+++ b/tests/TestSuite_power_pbf.py
@@ -29,22 +29,22 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+import json
 import os
-import time
 import random
-import json
 import re
 import shutil
+import time
 import traceback
 from collections import Counter
 from pprint import pformat
 
-# import dts libs
-from settings import load_global_setting
-from settings import HOST_BUILD_TYPE_SETTING
-from test_case import TestCase
-from exception import VerifyFailure
-from utils import create_mask
+from framework.exception import VerifyFailure
+
+# import framework.dts as dts libs
+from framework.settings import HOST_BUILD_TYPE_SETTING, load_global_setting
+from framework.test_case import TestCase
+from framework.utils import create_mask
 
 
 class TestPowerPbf(TestCase):
diff --git a/tests/TestSuite_power_pstate.py b/tests/TestSuite_power_pstate.py
index 220fe6ff..28393af6 100644
--- a/tests/TestSuite_power_pstate.py
+++ b/tests/TestSuite_power_pstate.py
@@ -29,18 +29,19 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-import os
-import time
 import json
+import os
 import shutil
+import time
 import traceback
 from collections import Counter
 from pprint import pformat
 
-# import dts libs
-from test_case import TestCase
-from exception import VerifyFailure
-from utils import create_mask
+from framework.exception import VerifyFailure
+
+# import framework.dts as dts libs
+from framework.test_case import TestCase
+from framework.utils import create_mask
 
 
 class TestPowerPstate(TestCase):
diff --git a/tests/TestSuite_power_telemetry.py b/tests/TestSuite_power_telemetry.py
index 0af30d77..d8182ce2 100644
--- a/tests/TestSuite_power_telemetry.py
+++ b/tests/TestSuite_power_telemetry.py
@@ -33,24 +33,21 @@
 DPDK Test suite.
 l3fwd-power test suite.
 """
+import json
 import os
 import re
-import time
 import textwrap
+import time
 import traceback
-import json
 from copy import deepcopy
 from pprint import pformat
 
-from settings import load_global_setting
-from settings import HOST_BUILD_TYPE_SETTING
-from utils import create_mask as dts_create_mask
-from settings import HEADER_SIZE
-from test_case import TestCase
-from pktgen import TRANSMIT_CONT
-from exception import VerifyFailure
-
-from packet import Packet
+from framework.exception import VerifyFailure
+from framework.packet import Packet
+from framework.pktgen import TRANSMIT_CONT
+from framework.settings import HEADER_SIZE, HOST_BUILD_TYPE_SETTING, load_global_setting
+from framework.test_case import TestCase
+from framework.utils import create_mask as dts_create_mask
 
 
 class TestPowerTelemetry(TestCase):
diff --git a/tests/TestSuite_ptpclient.py b/tests/TestSuite_ptpclient.py
index 858d5f46..f97e211f 100644
--- a/tests/TestSuite_ptpclient.py
+++ b/tests/TestSuite_ptpclient.py
@@ -34,10 +34,12 @@ DPDK Test suite.
 Test support of IEEE1588 Precise Time Protocol.
 """
 
-import utils
 import re
 import time
-from test_case import TestCase
+
+import framework.utils as utils
+from framework.test_case import TestCase
+
 
 class TestPtpClient(TestCase):
 
diff --git a/tests/TestSuite_ptype_mapping.py b/tests/TestSuite_ptype_mapping.py
index 0d650e0b..3212f7bf 100644
--- a/tests/TestSuite_ptype_mapping.py
+++ b/tests/TestSuite_ptype_mapping.py
@@ -30,13 +30,15 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
-import utils
-from test_case import TestCase
-from exception import VerifyFailure
-from pmd_output import PmdOutput
-from packet import Packet
-import time
 import re
+import time
+
+import framework.utils as utils
+from framework.exception import VerifyFailure
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
+
 
 class TestPtype_Mapping(TestCase):
 
diff --git a/tests/TestSuite_pvp_diff_qemu_version.py b/tests/TestSuite_pvp_diff_qemu_version.py
index bdf3f67c..5a3ae93c 100644
--- a/tests/TestSuite_pvp_diff_qemu_version.py
+++ b/tests/TestSuite_pvp_diff_qemu_version.py
@@ -40,12 +40,14 @@ qemu =
 """
 import re
 import time
-import utils
+
 from scapy.utils import wrpcap
-from test_case import TestCase
-from settings import HEADER_SIZE
-from virt_common import VM
-from pktgen import PacketGeneratorHelper
+
+import framework.utils as utils
+from framework.pktgen import PacketGeneratorHelper
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
+from framework.virt_common import VM
 
 
 class TestVhostPVPDiffQemuVersion(TestCase):
diff --git a/tests/TestSuite_pvp_multi_paths_performance.py b/tests/TestSuite_pvp_multi_paths_performance.py
index 7f809704..b316f779 100644
--- a/tests/TestSuite_pvp_multi_paths_performance.py
+++ b/tests/TestSuite_pvp_multi_paths_performance.py
@@ -34,15 +34,16 @@ DPDK Test suite.
 Test PVP performance using virtio_user on 8 tx/rx path.
 """
 import json
-import rst
 import os
-import utils
-from test_case import TestCase
-from packet import Packet
-from pktgen import PacketGeneratorHelper
-from settings import UPDATE_EXPECTED, load_global_setting
 from copy import deepcopy
-from pmd_output import PmdOutput
+
+import framework.rst as rst
+import framework.utils as utils
+from framework.packet import Packet
+from framework.pktgen import PacketGeneratorHelper
+from framework.pmd_output import PmdOutput
+from framework.settings import UPDATE_EXPECTED, load_global_setting
+from framework.test_case import TestCase
 
 
 class TestPVPMultiPathPerformance(TestCase):
diff --git a/tests/TestSuite_pvp_multi_paths_vhost_single_core_performance.py b/tests/TestSuite_pvp_multi_paths_vhost_single_core_performance.py
index 988e588c..663cc45f 100644
--- a/tests/TestSuite_pvp_multi_paths_vhost_single_core_performance.py
+++ b/tests/TestSuite_pvp_multi_paths_vhost_single_core_performance.py
@@ -35,15 +35,16 @@ Test PVP vhost single core performance using virtio_user on 8 tx/rx path.
 """
 
 import json
-import rst
 import os
-import utils
-from test_case import TestCase
-from packet import Packet
-from pktgen import PacketGeneratorHelper
-from settings import UPDATE_EXPECTED, load_global_setting
 from copy import deepcopy
-from pmd_output import PmdOutput
+
+import framework.rst as rst
+import framework.utils as utils
+from framework.packet import Packet
+from framework.pktgen import PacketGeneratorHelper
+from framework.pmd_output import PmdOutput
+from framework.settings import UPDATE_EXPECTED, load_global_setting
+from framework.test_case import TestCase
 
 
 class TestPVPMultiPathVhostPerformance(TestCase):
diff --git a/tests/TestSuite_pvp_multi_paths_virtio_single_core_performance.py b/tests/TestSuite_pvp_multi_paths_virtio_single_core_performance.py
index e4150d8a..b6432ca0 100644
--- a/tests/TestSuite_pvp_multi_paths_virtio_single_core_performance.py
+++ b/tests/TestSuite_pvp_multi_paths_virtio_single_core_performance.py
@@ -35,15 +35,16 @@ Test PVP virtio single core performance using virtio_user on 8 tx/rx path.
 """
 
 import json
-import rst
 import os
-import utils
-from test_case import TestCase
-from packet import Packet
-from pktgen import PacketGeneratorHelper
-from settings import UPDATE_EXPECTED, load_global_setting
 from copy import deepcopy
-from pmd_output import PmdOutput
+
+import framework.rst as rst
+import framework.utils as utils
+from framework.packet import Packet
+from framework.pktgen import PacketGeneratorHelper
+from framework.pmd_output import PmdOutput
+from framework.settings import UPDATE_EXPECTED, load_global_setting
+from framework.test_case import TestCase
 
 
 class TestPVPMultiPathVirtioPerformance(TestCase):
diff --git a/tests/TestSuite_pvp_qemu_multi_paths_port_restart.py b/tests/TestSuite_pvp_qemu_multi_paths_port_restart.py
index 1c31ce6f..c5ad8a9b 100644
--- a/tests/TestSuite_pvp_qemu_multi_paths_port_restart.py
+++ b/tests/TestSuite_pvp_qemu_multi_paths_port_restart.py
@@ -38,13 +38,14 @@ includes Mergeable, Normal, Vector_RX.
 Cover virtio 1.0 and virtio 0.95.Also cover
 port restart test with each path
 """
-import utils
-import time
 import re
-from virt_common import VM
-from test_case import TestCase
-from packet import Packet
-from pktgen import PacketGeneratorHelper
+import time
+
+import framework.utils as utils
+from framework.packet import Packet
+from framework.pktgen import PacketGeneratorHelper
+from framework.test_case import TestCase
+from framework.virt_common import VM
 
 
 class TestPVPQemuMultiPathPortRestart(TestCase):
diff --git a/tests/TestSuite_pvp_share_lib.py b/tests/TestSuite_pvp_share_lib.py
index 6746ff89..dbe76c61 100644
--- a/tests/TestSuite_pvp_share_lib.py
+++ b/tests/TestSuite_pvp_share_lib.py
@@ -34,10 +34,10 @@ DPDK Test suite.
 The feature need compile dpdk as shared libraries.
 """
 
-import utils
-from test_case import TestCase
-from settings import HEADER_SIZE
-from pktgen import PacketGeneratorHelper
+import framework.utils as utils
+from framework.pktgen import PacketGeneratorHelper
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
 
 
 class TestPVPShareLib(TestCase):
diff --git a/tests/TestSuite_pvp_vhost_user_reconnect.py b/tests/TestSuite_pvp_vhost_user_reconnect.py
index 4be19c5a..1e8a0fc4 100644
--- a/tests/TestSuite_pvp_vhost_user_reconnect.py
+++ b/tests/TestSuite_pvp_vhost_user_reconnect.py
@@ -37,12 +37,13 @@ Becase this suite will use the reconnet feature, the VM will start as
 server mode, so the qemu version should greater than 2.7
 """
 import re
-import utils
 import time
-from test_case import TestCase
-from virt_common import VM
-from packet import Packet
-from pktgen import PacketGeneratorHelper
+
+import framework.utils as utils
+from framework.packet import Packet
+from framework.pktgen import PacketGeneratorHelper
+from framework.test_case import TestCase
+from framework.virt_common import VM
 
 
 class TestPVPVhostUserReconnect(TestCase):
diff --git a/tests/TestSuite_pvp_virtio_bonding.py b/tests/TestSuite_pvp_virtio_bonding.py
index e6d0e61a..64fec90f 100644
--- a/tests/TestSuite_pvp_virtio_bonding.py
+++ b/tests/TestSuite_pvp_virtio_bonding.py
@@ -36,12 +36,13 @@ link bonding devices from within testpmd interactive prompt.
 """
 import re
 import time
-import utils
-from test_case import TestCase
-from virt_common import VM
-from pmd_output import PmdOutput
-from packet import Packet
-from pktgen import PacketGeneratorHelper
+
+import framework.utils as utils
+from framework.packet import Packet
+from framework.pktgen import PacketGeneratorHelper
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
+from framework.virt_common import VM
 
 
 class TestPVPVirtIOBonding(TestCase):
diff --git a/tests/TestSuite_pvp_virtio_user_2M_hugepages.py b/tests/TestSuite_pvp_virtio_user_2M_hugepages.py
index c1685463..a64a318d 100644
--- a/tests/TestSuite_pvp_virtio_user_2M_hugepages.py
+++ b/tests/TestSuite_pvp_virtio_user_2M_hugepages.py
@@ -34,11 +34,12 @@ DPDK Test suite.
 vhost/virtio-user pvp with 2M hugepage.
 """
 
-import utils
 import time
-from test_case import TestCase
-from settings import HEADER_SIZE
-from pktgen import PacketGeneratorHelper
+
+import framework.utils as utils
+from framework.pktgen import PacketGeneratorHelper
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
 
 
 class TestPVPVirtioWith2Mhuge(TestCase):
diff --git a/tests/TestSuite_pvp_virtio_user_4k_pages.py b/tests/TestSuite_pvp_virtio_user_4k_pages.py
index 98cfdce6..44c70a35 100644
--- a/tests/TestSuite_pvp_virtio_user_4k_pages.py
+++ b/tests/TestSuite_pvp_virtio_user_4k_pages.py
@@ -34,11 +34,12 @@ DPDK Test suite.
 vhost/virtio-user pvp with 4K pages.
 """
 
-import utils
 import time
-from test_case import TestCase
-from packet import Packet
-from pktgen import PacketGeneratorHelper
+
+import framework.utils as utils
+from framework.packet import Packet
+from framework.pktgen import PacketGeneratorHelper
+from framework.test_case import TestCase
 
 
 class TestPvpVirtioUser4kPages(TestCase):
diff --git a/tests/TestSuite_pvp_virtio_user_multi_queues_port_restart.py b/tests/TestSuite_pvp_virtio_user_multi_queues_port_restart.py
index eefc5bb4..4414f244 100644
--- a/tests/TestSuite_pvp_virtio_user_multi_queues_port_restart.py
+++ b/tests/TestSuite_pvp_virtio_user_multi_queues_port_restart.py
@@ -39,12 +39,14 @@ mergeable, in-order non-mergeable, mergeable, non-mergeable, vector_rx path test
 and packed virtqueue in-order mergeable, in-order non-mergeable, mergeable,
 non-mergeable path, also cover port restart test with each path.
 """
-import time
 import re
-from test_case import TestCase
-from packet import Packet
-from pktgen import PacketGeneratorHelper
-from pmd_output import PmdOutput
+import time
+
+from framework.packet import Packet
+from framework.pktgen import PacketGeneratorHelper
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
+
 
 class TestPVPVirtioUserMultiQueuesPortRestart(TestCase):
 
diff --git a/tests/TestSuite_qinq_filter.py b/tests/TestSuite_qinq_filter.py
index e19fe0f3..b6278220 100644
--- a/tests/TestSuite_qinq_filter.py
+++ b/tests/TestSuite_qinq_filter.py
@@ -37,10 +37,12 @@ Test the support of VLAN Offload Features by Poll Mode Drivers.
 
 """
 
-from test_case import TestCase
-import utils
 import time
-from pmd_output import PmdOutput
+
+import framework.utils as utils
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
+
 
 class TestQinqFilter(TestCase):
 
diff --git a/tests/TestSuite_qos_api.py b/tests/TestSuite_qos_api.py
index da2c544a..b666b994 100644
--- a/tests/TestSuite_qos_api.py
+++ b/tests/TestSuite_qos_api.py
@@ -34,14 +34,15 @@ DPDK Test suite.
 Test QOS API in DPDK.
 """
 
-import utils
-import string
+import os
 import re
+import string
 import time
-import os
-from pktgen import PacketGeneratorHelper
-from test_case import TestCase
-from pmd_output import PmdOutput
+
+import framework.utils as utils
+from framework.pktgen import PacketGeneratorHelper
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
 
 
 class TestQosApi(TestCase):
diff --git a/tests/TestSuite_qos_meter.py b/tests/TestSuite_qos_meter.py
index fa193126..fbc0eb23 100644
--- a/tests/TestSuite_qos_meter.py
+++ b/tests/TestSuite_qos_meter.py
@@ -35,11 +35,12 @@ Test QOS API in DPDK.
 The DUT must have two 10G Ethernet ports connected to two ports of IXIA.
 """
 import os
-from test_case import TestCase
-from  settings import HEADER_SIZE
-from pktgen import TRANSMIT_CONT
-from pmd_output import PmdOutput
-from packet import Packet
+
+from framework.packet import Packet
+from framework.pktgen import TRANSMIT_CONT
+from framework.pmd_output import PmdOutput
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
 
 
 class TestQosMeter(TestCase):
diff --git a/tests/TestSuite_queue_region.py b/tests/TestSuite_queue_region.py
index 29adaf41..3eef8c69 100644
--- a/tests/TestSuite_queue_region.py
+++ b/tests/TestSuite_queue_region.py
@@ -36,18 +36,16 @@ Test the support of VLAN Offload Features by Poll Mode Drivers.
 
 """
 
-import utils
-import time
 import re
+import time
 
-from test_case import TestCase
-from settings import HEADER_SIZE
-from pmd_output import PmdOutput
-from settings import DRIVERS
-
-from project_dpdk import DPDKdut
-from dut import Dut
-from packet import Packet
+import framework.utils as utils
+from framework.dut import Dut
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.project_dpdk import DPDKdut
+from framework.settings import DRIVERS, HEADER_SIZE
+from framework.test_case import TestCase
 
 
 class TestQueue_region(TestCase):
diff --git a/tests/TestSuite_queue_start_stop.py b/tests/TestSuite_queue_start_stop.py
index 75718c8c..c2153557 100644
--- a/tests/TestSuite_queue_start_stop.py
+++ b/tests/TestSuite_queue_start_stop.py
@@ -38,13 +38,14 @@ Test queue start stop Feature
 
 """
 
-import time
-import re
 import os
-from test_case import TestCase
-from pmd_output import PmdOutput
-from settings import FOLDERS
-from packet import Packet, strip_pktload
+import re
+import time
+
+from framework.packet import Packet, strip_pktload
+from framework.pmd_output import PmdOutput
+from framework.settings import FOLDERS
+from framework.test_case import TestCase
 
 #
 #
diff --git a/tests/TestSuite_rss_key_update.py b/tests/TestSuite_rss_key_update.py
index f74641cb..99d2cda2 100644
--- a/tests/TestSuite_rss_key_update.py
+++ b/tests/TestSuite_rss_key_update.py
@@ -37,13 +37,13 @@ Test the support of RSS Key Update by Poll Mode Drivers.
 
 """
 
-import time
-import re
 import random
-import utils
+import re
+import time
 
-from test_case import TestCase
-from pmd_output import PmdOutput
+import framework.utils as utils
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
 
 queue = 16
 reta_entries = []
diff --git a/tests/TestSuite_rss_to_rte_flow.py b/tests/TestSuite_rss_to_rte_flow.py
index 20deda0c..0f69938e 100644
--- a/tests/TestSuite_rss_to_rte_flow.py
+++ b/tests/TestSuite_rss_to_rte_flow.py
@@ -36,12 +36,12 @@ Test moving RSS to rte_flow.
 
 """
 
-import time
 import re
-import packet
+import time
 
-from test_case import TestCase
-from pmd_output import PmdOutput
+import framework.packet as packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
 
 
 class TestRSS_to_Rteflow(TestCase):
diff --git a/tests/TestSuite_rte_flow.py b/tests/TestSuite_rte_flow.py
index d9bcff8a..ded67910 100644
--- a/tests/TestSuite_rte_flow.py
+++ b/tests/TestSuite_rte_flow.py
@@ -34,17 +34,14 @@
 DPDK Test suite.
 MTU Checks example.
 """
-import time
 import ipaddress
+import time
 from typing import Callable
 
-import utils
-from pmd_output import PmdOutput
-from test_case import TestCase
-
-from test_case import TestCase
-
-from flow import generator
+import framework.utils as utils
+from framework.flow import generator
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
 
 
 class RteFlow(TestCase):
diff --git a/tests/TestSuite_rteflow_priority.py b/tests/TestSuite_rteflow_priority.py
index 23aea82f..ece98ae5 100755
--- a/tests/TestSuite_rteflow_priority.py
+++ b/tests/TestSuite_rteflow_priority.py
@@ -35,23 +35,26 @@ DPDK Test suite.
 Test rte_flow priority
 """
 
+import imp
 import re
-import time
 import string
+import sys
+import time
 from time import sleep
-from scapy.utils import struct, socket, PcapWriter
 
-import utils
-from test_case import TestCase
-from settings import HEADER_SIZE
-from pmd_output import PmdOutput
-import sys
-import imp
+from scapy.utils import PcapWriter, socket, struct
+
+import framework.utils as utils
+from framework.pktgen import PacketGeneratorHelper
+from framework.pmd_output import PmdOutput
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
+
 imp.reload(sys)
 
 
 class TestRteflowPriority(TestCase):
-    
+
     def set_up_all(self):
         """
         Run at the start of each test suite.
diff --git a/tests/TestSuite_runtime_vf_queue_number.py b/tests/TestSuite_runtime_vf_queue_number.py
index 1d7d536c..7b9c903e 100644
--- a/tests/TestSuite_runtime_vf_queue_number.py
+++ b/tests/TestSuite_runtime_vf_queue_number.py
@@ -34,12 +34,13 @@ DPDK Test suite.
 
 '''
 
-import time
 import re
-from qemu_kvm import QEMUKvm
-from test_case import TestCase
-from pmd_output import PmdOutput
-from packet import Packet
+import time
+
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.qemu_kvm import QEMUKvm
+from framework.test_case import TestCase
 
 RSS_KEY = '6EA6A420D5138E712433B813AE45B3C4BECB2B405F31AD6C331835372D15E2D5E49566EE0ED1962AFA1B7932F3549520FD71C75E'
 PACKET_COUNT = 100
diff --git a/tests/TestSuite_runtime_vf_queue_number_kernel.py b/tests/TestSuite_runtime_vf_queue_number_kernel.py
index 23e08a75..2ae61780 100755
--- a/tests/TestSuite_runtime_vf_queue_number_kernel.py
+++ b/tests/TestSuite_runtime_vf_queue_number_kernel.py
@@ -37,11 +37,11 @@ runtime_vf_queue_number_kernel test script.
 import random
 import time
 
-import utils
-from pmd_output import PmdOutput
-from test_case import TestCase
-from virt_common import VM
-from packet import Packet
+import framework.utils as utils
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
+from framework.virt_common import VM
 
 VM_CORES_MASK = 'all'
 
diff --git a/tests/TestSuite_runtime_vf_queue_number_maxinum.py b/tests/TestSuite_runtime_vf_queue_number_maxinum.py
index 8e93c208..0b14cfeb 100644
--- a/tests/TestSuite_runtime_vf_queue_number_maxinum.py
+++ b/tests/TestSuite_runtime_vf_queue_number_maxinum.py
@@ -34,11 +34,12 @@ DPDK Test suite.
 
 '''
 
-import time
-import re
 import math
-from test_case import TestCase
-from pmd_output import PmdOutput
+import re
+import time
+
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
 
 
 class TestRuntimeVfQnMaxinum(TestCase):
diff --git a/tests/TestSuite_rxtx_callbacks.py b/tests/TestSuite_rxtx_callbacks.py
index f7d343eb..089031b6 100644
--- a/tests/TestSuite_rxtx_callbacks.py
+++ b/tests/TestSuite_rxtx_callbacks.py
@@ -34,10 +34,11 @@
 DPDK Test suite.
 Test Rxtx_Callbacks.
 """
-import utils
 import string
 import time
-from test_case import TestCase
+
+import framework.utils as utils
+from framework.test_case import TestCase
 
 
 class TestRxtxCallbacks(TestCase):
diff --git a/tests/TestSuite_rxtx_offload.py b/tests/TestSuite_rxtx_offload.py
index a9340269..14fd40ac 100644
--- a/tests/TestSuite_rxtx_offload.py
+++ b/tests/TestSuite_rxtx_offload.py
@@ -36,18 +36,16 @@ New RX/TX offload APIs.
 
 """
 
-import utils
-import time
 import re
+import time
 
-from test_case import TestCase
-from settings import HEADER_SIZE
-from pmd_output import PmdOutput
-from settings import DRIVERS
-
-from project_dpdk import DPDKdut
-from dut import Dut
-from packet import Packet
+import framework.utils as utils
+from framework.dut import Dut
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.project_dpdk import DPDKdut
+from framework.settings import DRIVERS, HEADER_SIZE
+from framework.test_case import TestCase
 
 ETHER_STANDARD_MTU = 1518
 ETHER_JUMBO_FRAME_MTU = 9000
diff --git a/tests/TestSuite_scatter.py b/tests/TestSuite_scatter.py
index 2049f357..85312c5c 100644
--- a/tests/TestSuite_scatter.py
+++ b/tests/TestSuite_scatter.py
@@ -33,10 +33,12 @@
 DPDK Test suite.
 Test Scattered Packets.
 """
-from test_case import TestCase
-from pmd_output import PmdOutput
-from packet import Packet, strip_pktload
 import time
+
+from framework.packet import Packet, strip_pktload
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
+
 #
 #
 # Test class.
diff --git a/tests/TestSuite_short_live.py b/tests/TestSuite_short_live.py
index 5ebf0b4d..1b8fbb94 100644
--- a/tests/TestSuite_short_live.py
+++ b/tests/TestSuite_short_live.py
@@ -38,12 +38,13 @@ Test short live dpdk app Feature
 
 """
 
-import time
-import re
 import os
-from test_case import TestCase
-from pmd_output import PmdOutput
-from settings import FOLDERS
+import re
+import time
+
+from framework.pmd_output import PmdOutput
+from framework.settings import FOLDERS
+from framework.test_case import TestCase
 
 #
 #
diff --git a/tests/TestSuite_shutdown_api.py b/tests/TestSuite_shutdown_api.py
index 3810b53a..624f46d5 100644
--- a/tests/TestSuite_shutdown_api.py
+++ b/tests/TestSuite_shutdown_api.py
@@ -36,19 +36,19 @@ Test Shutdown API Feature
 
 """
 
-import utils
-import time
-import re
 import os
 import random
-from test_case import TestCase
-from pmd_output import PmdOutput
-from settings import HEADER_SIZE, PROTOCOL_PACKET_SIZE
-from exception import VerifyFailure
-from qemu_kvm import QEMUKvm
-from settings import get_nic_name
+import re
+import time
 from random import randint
-from settings import DRIVERS
+
+import framework.utils as utils
+from framework.exception import VerifyFailure
+from framework.pmd_output import PmdOutput
+from framework.qemu_kvm import QEMUKvm
+from framework.settings import DRIVERS, HEADER_SIZE, PROTOCOL_PACKET_SIZE, get_nic_name
+from framework.test_case import TestCase
+
 #
 #
 # Test class.
diff --git a/tests/TestSuite_skeleton.py b/tests/TestSuite_skeleton.py
index c2563dc3..7732c3e1 100644
--- a/tests/TestSuite_skeleton.py
+++ b/tests/TestSuite_skeleton.py
@@ -34,11 +34,11 @@
 DPDK Test suite.
 Test Skeleton.
 """
-import utils
 import string
 import time
-from test_case import TestCase
 
+import framework.utils as utils
+from framework.test_case import TestCase
 
 
 class TestSkeleton(TestCase):
diff --git a/tests/TestSuite_softnic.py b/tests/TestSuite_softnic.py
index e4934ffe..3ef99100 100644
--- a/tests/TestSuite_softnic.py
+++ b/tests/TestSuite_softnic.py
@@ -34,15 +34,16 @@ DPDK Test suite.
 Test softnic API in DPDK.
 """
 
-import utils
-import string
+import os
 import re
+import string
 import time
-from settings import HEADER_SIZE
-import os
-from pktgen import PacketGeneratorHelper
-from test_case import TestCase
-from pmd_output import PmdOutput
+
+import framework.utils as utils
+from framework.pktgen import PacketGeneratorHelper
+from framework.pmd_output import PmdOutput
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
 
 
 class TestSoftnic(TestCase):
diff --git a/tests/TestSuite_speed_capabilities.py b/tests/TestSuite_speed_capabilities.py
index 25c45e45..9fa441f5 100644
--- a/tests/TestSuite_speed_capabilities.py
+++ b/tests/TestSuite_speed_capabilities.py
@@ -33,9 +33,9 @@
 """
 DPDK Test suite.
 """
-import utils
-from pmd_output import PmdOutput
-from test_case import TestCase
+import framework.utils as utils
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
 
 
 class TestSpeedCapabilities(TestCase):
diff --git a/tests/TestSuite_sriov_kvm.py b/tests/TestSuite_sriov_kvm.py
index 1a0e3a53..bdc74478 100644
--- a/tests/TestSuite_sriov_kvm.py
+++ b/tests/TestSuite_sriov_kvm.py
@@ -37,16 +37,15 @@ Test userland 10Gb PMD.
 
 """
 
-import re
 import pdb
-import time
 import random
+import re
+import time
 
-from virt_common import VM
-from test_case import TestCase
-
-from pmd_output import PmdOutput
-from settings import PROTOCOL_PACKET_SIZE
+from framework.pmd_output import PmdOutput
+from framework.settings import PROTOCOL_PACKET_SIZE
+from framework.test_case import TestCase
+from framework.virt_common import VM
 
 FRAME_SIZE_64 = 64
 VM_CORES_MASK = 'all'
diff --git a/tests/TestSuite_stats_checks.py b/tests/TestSuite_stats_checks.py
index 58c52368..838477c0 100644
--- a/tests/TestSuite_stats_checks.py
+++ b/tests/TestSuite_stats_checks.py
@@ -34,17 +34,17 @@
 DPDK Test suite.
 Stats Checks example.
 """
-from time import sleep
-from typing import List, Iterator, Tuple
 import random
-import struct
-import socket
 import re
-import utils
-from pmd_output import PmdOutput
-import packet
+import socket
+import struct
+from time import sleep
+from typing import Iterator, List, Tuple
 
-from test_case import TestCase
+import framework.packet as packet
+import framework.utils as utils
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
 
 ETHER_HEADER_LEN = 18
 IP_HEADER_LEN = 20
diff --git a/tests/TestSuite_telemetry.py b/tests/TestSuite_telemetry.py
index 82a1d400..899fa4dc 100644
--- a/tests/TestSuite_telemetry.py
+++ b/tests/TestSuite_telemetry.py
@@ -29,16 +29,17 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-import os
-import time
 import json
+import os
 import re
 import textwrap
+import time
 from pprint import pformat
 
-# import dts libs
-from test_case import TestCase
-from pmd_output import PmdOutput
+from framework.pmd_output import PmdOutput
+
+# import framework.dts as dts libs
+from framework.test_case import TestCase
 
 
 class TestTelemetry(TestCase):
diff --git a/tests/TestSuite_testpmd_perf.py b/tests/TestSuite_testpmd_perf.py
index db2eb3c7..5dcf6fe3 100644
--- a/tests/TestSuite_testpmd_perf.py
+++ b/tests/TestSuite_testpmd_perf.py
@@ -34,8 +34,9 @@ DPDK Test suite.
 testpmd perf test script.
 """
 
-from test_case import TestCase
-from perf_test_base import PerfTestBase, BIN_TYPE, MATCH_MODE, IP_TYPE
+from framework.test_case import TestCase
+
+from .perf_test_base import BIN_TYPE, IP_TYPE, MATCH_MODE, PerfTestBase
 
 
 class TestPmdPerf(TestCase, PerfTestBase):
diff --git a/tests/TestSuite_timer.py b/tests/TestSuite_timer.py
index 77758823..0eac08a4 100644
--- a/tests/TestSuite_timer.py
+++ b/tests/TestSuite_timer.py
@@ -34,12 +34,11 @@ DPDK Test suite.
 Test Timer.
 """
 
-import utils
 import re
 import time
 
-
-from test_case import TestCase
+import framework.utils as utils
+from framework.test_case import TestCase
 
 
 class TestTimer(TestCase):
diff --git a/tests/TestSuite_tso.py b/tests/TestSuite_tso.py
index 1b5cda67..002fdd85 100644
--- a/tests/TestSuite_tso.py
+++ b/tests/TestSuite_tso.py
@@ -37,14 +37,14 @@ Tests for TSO.
 
 """
 import os
-import utils
-import time
 import re
-import os
-from test_case import TestCase
-from settings import HEADER_SIZE
-from pktgen import PacketGeneratorHelper
-from packet import Packet
+import time
+
+import framework.utils as utils
+from framework.packet import Packet
+from framework.pktgen import PacketGeneratorHelper
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
 
 DEFAULT_MUT = 1500
 TSO_MTU = 9000
diff --git a/tests/TestSuite_tx_preparation.py b/tests/TestSuite_tx_preparation.py
index 070290e0..ae58929b 100644
--- a/tests/TestSuite_tx_preparation.py
+++ b/tests/TestSuite_tx_preparation.py
@@ -39,16 +39,18 @@ Test tx preparation feature
 """
 
 import os
-import time
-import dut
+import random
 import re
 import subprocess
-from config import PortConf
-from test_case import TestCase
-from pmd_output import PmdOutput
-from settings import FOLDERS
-from packet import Packet
-import random
+import time
+
+import framework.dut as dut
+from framework.config import PortConf
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.settings import FOLDERS
+from framework.test_case import TestCase
+
 #
 #
 # Test class.
diff --git a/tests/TestSuite_uni_pkt.py b/tests/TestSuite_uni_pkt.py
index 9a3200aa..edfd20b8 100644
--- a/tests/TestSuite_uni_pkt.py
+++ b/tests/TestSuite_uni_pkt.py
@@ -43,12 +43,13 @@ translate the offloaded packet types into these 7 fields of information, for
 user applications
 """
 
-import utils
-from test_case import TestCase
-from exception import VerifyFailure
-from packet import Packet
 import time
-from pmd_output import PmdOutput
+
+import framework.utils as utils
+from framework.exception import VerifyFailure
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
 
 
 class TestUniPacket(TestCase):
diff --git a/tests/TestSuite_unit_tests_cmdline.py b/tests/TestSuite_unit_tests_cmdline.py
index ac49c1bf..ec8a5262 100644
--- a/tests/TestSuite_unit_tests_cmdline.py
+++ b/tests/TestSuite_unit_tests_cmdline.py
@@ -36,8 +36,8 @@ Cmdline autotest
 
 """
 
-from test_case import TestCase
-import utils
+import framework.utils as utils
+from framework.test_case import TestCase
 
 #
 #
diff --git a/tests/TestSuite_unit_tests_crc.py b/tests/TestSuite_unit_tests_crc.py
index 9bc5e62f..6490d08b 100644
--- a/tests/TestSuite_unit_tests_crc.py
+++ b/tests/TestSuite_unit_tests_crc.py
@@ -36,8 +36,8 @@ Crc autotest
 
 """
 
-from test_case import TestCase
-import utils
+import framework.utils as utils
+from framework.test_case import TestCase
 
 #
 #
diff --git a/tests/TestSuite_unit_tests_cryptodev_func.py b/tests/TestSuite_unit_tests_cryptodev_func.py
index e51cca42..d2117255 100644
--- a/tests/TestSuite_unit_tests_cryptodev_func.py
+++ b/tests/TestSuite_unit_tests_cryptodev_func.py
@@ -30,10 +30,10 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 import json
-import utils
-from test_case import TestCase
 
-import cryptodev_common as cc
+import framework.utils as utils
+import tests.cryptodev_common as cc
+from framework.test_case import TestCase
 
 
 class UnitTestsCryptodev(TestCase):
diff --git a/tests/TestSuite_unit_tests_dump.py b/tests/TestSuite_unit_tests_dump.py
index 38b5fc48..2aa0576a 100644
--- a/tests/TestSuite_unit_tests_dump.py
+++ b/tests/TestSuite_unit_tests_dump.py
@@ -38,8 +38,8 @@ Run Inter-VM share memory autotests
 """
 
 
-from test_case import TestCase
-import utils
+import framework.utils as utils
+from framework.test_case import TestCase
 
 #
 #
diff --git a/tests/TestSuite_unit_tests_eal.py b/tests/TestSuite_unit_tests_eal.py
index e5703f1d..8096183c 100644
--- a/tests/TestSuite_unit_tests_eal.py
+++ b/tests/TestSuite_unit_tests_eal.py
@@ -36,10 +36,8 @@ EAL autotest.
 
 """
 
-import utils
-
-
-from test_case import TestCase
+import framework.utils as utils
+from framework.test_case import TestCase
 
 #
 #
diff --git a/tests/TestSuite_unit_tests_event_timer.py b/tests/TestSuite_unit_tests_event_timer.py
index 22c316e0..cc0afa8f 100644
--- a/tests/TestSuite_unit_tests_event_timer.py
+++ b/tests/TestSuite_unit_tests_event_timer.py
@@ -34,9 +34,8 @@ DPDK Test suite.
 Test Event Timer Adapter Unit test
 """
 
-import utils
-
-from test_case import TestCase
+import framework.utils as utils
+from framework.test_case import TestCase
 
 
 class TestUnitTestEventTimer(TestCase):
diff --git a/tests/TestSuite_unit_tests_kni.py b/tests/TestSuite_unit_tests_kni.py
index d54a5ace..5ad19d15 100644
--- a/tests/TestSuite_unit_tests_kni.py
+++ b/tests/TestSuite_unit_tests_kni.py
@@ -35,8 +35,8 @@ DPDK Test suite.
 This TestSuite runs the unit tests included in DPDK for KNI feature.
 """
 
-from test_case import TestCase
-import utils
+import framework.utils as utils
+from framework.test_case import TestCase
 
 #
 #
diff --git a/tests/TestSuite_unit_tests_loopback.py b/tests/TestSuite_unit_tests_loopback.py
index a0467378..73817123 100644
--- a/tests/TestSuite_unit_tests_loopback.py
+++ b/tests/TestSuite_unit_tests_loopback.py
@@ -35,10 +35,11 @@ DPDK Test suite.
 This TestSuite runs the unit tests included in DPDK for X710/XL710/XXV710 loopback mode.
 """
 
-import utils
 import re
 import time
-from test_case import TestCase
+
+import framework.utils as utils
+from framework.test_case import TestCase
 
 #
 #
diff --git a/tests/TestSuite_unit_tests_lpm.py b/tests/TestSuite_unit_tests_lpm.py
index dd4d5346..b8bdb8a9 100644
--- a/tests/TestSuite_unit_tests_lpm.py
+++ b/tests/TestSuite_unit_tests_lpm.py
@@ -36,8 +36,8 @@ This TestSuite runs the unit tests included in DPDK for LPM methods in l3fwd.
 """
 
 
-from test_case import TestCase
-import utils
+import framework.utils as utils
+from framework.test_case import TestCase
 
 #
 #
diff --git a/tests/TestSuite_unit_tests_mbuf.py b/tests/TestSuite_unit_tests_mbuf.py
index 05b633ce..4c9fa3d6 100644
--- a/tests/TestSuite_unit_tests_mbuf.py
+++ b/tests/TestSuite_unit_tests_mbuf.py
@@ -36,8 +36,8 @@ Run all mbuf autotests
 """
 
 
-from test_case import TestCase
-import utils
+import framework.utils as utils
+from framework.test_case import TestCase
 
 #
 #
diff --git a/tests/TestSuite_unit_tests_mempool.py b/tests/TestSuite_unit_tests_mempool.py
index 4907fd42..455f4322 100644
--- a/tests/TestSuite_unit_tests_mempool.py
+++ b/tests/TestSuite_unit_tests_mempool.py
@@ -36,8 +36,8 @@ Run all Mempool autotests
 """
 
 
-from test_case import TestCase
-import utils
+import framework.utils as utils
+from framework.test_case import TestCase
 
 #
 #
diff --git a/tests/TestSuite_unit_tests_pmd_perf.py b/tests/TestSuite_unit_tests_pmd_perf.py
index 4546169d..c231ad23 100644
--- a/tests/TestSuite_unit_tests_pmd_perf.py
+++ b/tests/TestSuite_unit_tests_pmd_perf.py
@@ -36,7 +36,8 @@ This TestSuite runs the unit tests included in DPDK for pmd performance.
 """
 
 import re
-from test_case import TestCase
+
+from framework.test_case import TestCase
 
 #
 #
diff --git a/tests/TestSuite_unit_tests_power.py b/tests/TestSuite_unit_tests_power.py
index b09bcd69..7429350f 100644
--- a/tests/TestSuite_unit_tests_power.py
+++ b/tests/TestSuite_unit_tests_power.py
@@ -35,8 +35,8 @@ DPDK Test suite.
 This TestSuite runs the unit tests included in DPDK for power feature.
 """
 
-from test_case import TestCase
-import utils
+import framework.utils as utils
+from framework.test_case import TestCase
 
 #
 #
diff --git a/tests/TestSuite_unit_tests_qos.py b/tests/TestSuite_unit_tests_qos.py
index 8ccaea17..c3d4bb64 100644
--- a/tests/TestSuite_unit_tests_qos.py
+++ b/tests/TestSuite_unit_tests_qos.py
@@ -36,8 +36,8 @@ This TestSuite runs the unit tests included in DPDK for Random Early
 Detection, Metering and Scheduling QoS features.
 """
 
-from test_case import TestCase
-import utils
+import framework.utils as utils
+from framework.test_case import TestCase
 
 #
 #
diff --git a/tests/TestSuite_unit_tests_ring.py b/tests/TestSuite_unit_tests_ring.py
index 8c7e0624..83afa8cd 100644
--- a/tests/TestSuite_unit_tests_ring.py
+++ b/tests/TestSuite_unit_tests_ring.py
@@ -36,8 +36,8 @@ Run all Ring autotests
 """
 
 
-from test_case import TestCase
-import utils
+import framework.utils as utils
+from framework.test_case import TestCase
 
 #
 #
diff --git a/tests/TestSuite_unit_tests_ringpmd.py b/tests/TestSuite_unit_tests_ringpmd.py
index 7050a448..1b406453 100644
--- a/tests/TestSuite_unit_tests_ringpmd.py
+++ b/tests/TestSuite_unit_tests_ringpmd.py
@@ -36,8 +36,8 @@ Run Inter-VM share memory autotests
 """
 
 
-from test_case import TestCase
-import utils
+import framework.utils as utils
+from framework.test_case import TestCase
 
 #
 #
diff --git a/tests/TestSuite_unit_tests_timer.py b/tests/TestSuite_unit_tests_timer.py
index fef84089..1299e615 100644
--- a/tests/TestSuite_unit_tests_timer.py
+++ b/tests/TestSuite_unit_tests_timer.py
@@ -36,8 +36,8 @@ Run all timer autotests
 """
 
 
-from test_case import TestCase
-import utils
+import framework.utils as utils
+from framework.test_case import TestCase
 
 #
 #
diff --git a/tests/TestSuite_userspace_ethtool.py b/tests/TestSuite_userspace_ethtool.py
index 9ae84c03..4f104dca 100755
--- a/tests/TestSuite_userspace_ethtool.py
+++ b/tests/TestSuite_userspace_ethtool.py
@@ -35,17 +35,17 @@ Test support of userspace ethtool feature
 """
 
 import os
-import utils
-import time
-import re
-from test_case import TestCase
-from packet import Packet
 import random
-from settings import HEADER_SIZE
-from settings import SCAPY2IXIA
-from pktgen import PacketGeneratorHelper
-from utils import RED
-from exception import VerifyFailure
+import re
+import time
+
+import framework.utils as utils
+from framework.exception import VerifyFailure
+from framework.packet import Packet
+from framework.pktgen import PacketGeneratorHelper
+from framework.settings import HEADER_SIZE, SCAPY2IXIA
+from framework.test_case import TestCase
+from framework.utils import RED
 
 
 class TestUserspaceEthtool(TestCase):
diff --git a/tests/TestSuite_vdev_primary_secondary.py b/tests/TestSuite_vdev_primary_secondary.py
index 50d5b597..093cd57c 100644
--- a/tests/TestSuite_vdev_primary_secondary.py
+++ b/tests/TestSuite_vdev_primary_secondary.py
@@ -41,11 +41,12 @@ RX queue in each case. Those packets are then forwarded by each process which
 sends them out by writing them directly to a suitable TX queue.
 """
 
-import time
 import re
-import utils
-from test_case import TestCase
-from virt_common import VM
+import time
+
+import framework.utils as utils
+from framework.test_case import TestCase
+from framework.virt_common import VM
 
 
 class TestVdevPrimarySecondary(TestCase):
diff --git a/tests/TestSuite_veb_switch.py b/tests/TestSuite_veb_switch.py
index 915296ff..8900ab22 100644
--- a/tests/TestSuite_veb_switch.py
+++ b/tests/TestSuite_veb_switch.py
@@ -37,16 +37,16 @@ Test VEB Switch and floating VEB Features by Poll Mode Drivers.
 
 import re
 import time
-import utils
-
-from virt_dut import VirtDut
-from project_dpdk import DPDKdut
-from dut import Dut
-from test_case import TestCase
-from pmd_output import PmdOutput
-from settings import HEADER_SIZE
-from packet import Packet
-from utils import RED
+
+import framework.utils as utils
+from framework.dut import Dut
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.project_dpdk import DPDKdut
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
+from framework.utils import RED
+from framework.virt_dut import VirtDut
 
 
 class TestVEBSwitching(TestCase):
diff --git a/tests/TestSuite_vf_daemon.py b/tests/TestSuite_vf_daemon.py
index a08ae7b5..4d6ae58f 100644
--- a/tests/TestSuite_vf_daemon.py
+++ b/tests/TestSuite_vf_daemon.py
@@ -29,17 +29,18 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-import time
+import random
 import sys
-import utils 
+import time
+
 from scapy.utils import rdpcap
 
-from qemu_kvm import QEMUKvm
-from test_case import TestCase
-from pmd_output import PmdOutput
-from packet import Packet
-from settings import get_nic_name
-import random
+import framework.utils as utils
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.qemu_kvm import QEMUKvm
+from framework.settings import get_nic_name
+from framework.test_case import TestCase
 
 VM_CORES_MASK = 'all'
 MAX_VLAN = 4095
diff --git a/tests/TestSuite_vf_interrupt_pmd.py b/tests/TestSuite_vf_interrupt_pmd.py
index 8d68b022..aff1f35a 100644
--- a/tests/TestSuite_vf_interrupt_pmd.py
+++ b/tests/TestSuite_vf_interrupt_pmd.py
@@ -35,13 +35,15 @@ DPDK Test suite.
 Test vf_interrupt_pmd.
 """
 
-import utils
-import time
-import re
 import pdb
-from virt_common import VM
-from test_case import TestCase
-from packet import Packet
+import re
+import time
+
+import framework.utils as utils
+from framework.packet import Packet
+from framework.test_case import TestCase
+from framework.virt_common import VM
+
 
 class TestVfInterruptPmd(TestCase):
     supported_vf_driver = ['pci-stub', 'vfio-pci']
diff --git a/tests/TestSuite_vf_jumboframe.py b/tests/TestSuite_vf_jumboframe.py
index 3eb441f2..9c5db0ae 100644
--- a/tests/TestSuite_vf_jumboframe.py
+++ b/tests/TestSuite_vf_jumboframe.py
@@ -32,13 +32,13 @@
 import re
 import time
 
-import utils
-from virt_common import VM
-from test_case import TestCase
-from pmd_output import PmdOutput
-from settings import HEADER_SIZE
-from packet import Packet
-from utils import RED
+import framework.utils as utils
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
+from framework.utils import RED
+from framework.virt_common import VM
 
 VM_CORES_MASK = 'all'
 
diff --git a/tests/TestSuite_vf_kernel.py b/tests/TestSuite_vf_kernel.py
index a4e1e52a..4947a2fc 100755
--- a/tests/TestSuite_vf_kernel.py
+++ b/tests/TestSuite_vf_kernel.py
@@ -35,18 +35,18 @@ DPDK Test suite.
 Test VF kernel
 """
 
-import utils
-import time
 import datetime
-import re
 import random
+import re
 import threading
-from test_case import TestCase
-from qemu_kvm import QEMUKvm
-from pmd_output import PmdOutput
-from packet import Packet
-import random
-from utils import GREEN, RED
+import time
+
+import framework.utils as utils
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.qemu_kvm import QEMUKvm
+from framework.test_case import TestCase
+from framework.utils import GREEN, RED
 
 
 class TestVfKernel(TestCase):
diff --git a/tests/TestSuite_vf_l3fwd.py b/tests/TestSuite_vf_l3fwd.py
index a9bc7fa4..cb29154f 100644
--- a/tests/TestSuite_vf_l3fwd.py
+++ b/tests/TestSuite_vf_l3fwd.py
@@ -29,14 +29,15 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-import time
 import os
 import string
-import utils
-from test_case import TestCase
-from pmd_output import PmdOutput
-from settings import HEADER_SIZE
-from pktgen import PacketGeneratorHelper
+import time
+
+import framework.utils as utils
+from framework.pktgen import PacketGeneratorHelper
+from framework.pmd_output import PmdOutput
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
 
 
 class TestVfL3fwd(TestCase):
diff --git a/tests/TestSuite_vf_l3fwd_em_kernelpf.py b/tests/TestSuite_vf_l3fwd_em_kernelpf.py
index 05cda1d1..f90974e1 100644
--- a/tests/TestSuite_vf_l3fwd_em_kernelpf.py
+++ b/tests/TestSuite_vf_l3fwd_em_kernelpf.py
@@ -31,8 +31,16 @@
 
 import os
 import time
-from test_case import TestCase
-from perf_test_base import PerfTestBase, IP_TYPE, MATCH_MODE, SUITE_TYPE, VF_L3FWD_NIC_SUPPORT
+
+from framework.test_case import TestCase
+
+from .perf_test_base import (
+    IP_TYPE,
+    MATCH_MODE,
+    SUITE_TYPE,
+    VF_L3FWD_NIC_SUPPORT,
+    PerfTestBase,
+)
 
 
 class TestVfL3fwdEmKernelPf(TestCase, PerfTestBase):
diff --git a/tests/TestSuite_vf_l3fwd_kernelpf.py b/tests/TestSuite_vf_l3fwd_kernelpf.py
index d5ed897a..c718b417 100644
--- a/tests/TestSuite_vf_l3fwd_kernelpf.py
+++ b/tests/TestSuite_vf_l3fwd_kernelpf.py
@@ -31,8 +31,16 @@
 
 import os
 import time
-from test_case import TestCase
-from perf_test_base import PerfTestBase, IP_TYPE, MATCH_MODE, SUITE_TYPE, VF_L3FWD_NIC_SUPPORT
+
+from framework.test_case import TestCase
+
+from .perf_test_base import (
+    IP_TYPE,
+    MATCH_MODE,
+    SUITE_TYPE,
+    VF_L3FWD_NIC_SUPPORT,
+    PerfTestBase,
+)
 
 
 class TestVfL3fwdKernelPf(TestCase, PerfTestBase):
diff --git a/tests/TestSuite_vf_l3fwd_lpm_ipv4_kernelpf.py b/tests/TestSuite_vf_l3fwd_lpm_ipv4_kernelpf.py
index 51490047..46c3d0ca 100644
--- a/tests/TestSuite_vf_l3fwd_lpm_ipv4_kernelpf.py
+++ b/tests/TestSuite_vf_l3fwd_lpm_ipv4_kernelpf.py
@@ -31,8 +31,16 @@
 
 import os
 import time
-from test_case import TestCase
-from perf_test_base import PerfTestBase, IP_TYPE, MATCH_MODE, SUITE_TYPE, VF_L3FWD_NIC_SUPPORT
+
+from framework.test_case import TestCase
+
+from .perf_test_base import (
+    IP_TYPE,
+    MATCH_MODE,
+    SUITE_TYPE,
+    VF_L3FWD_NIC_SUPPORT,
+    PerfTestBase,
+)
 
 
 class TestVfL3fwdLpmIpv4KernelPf(TestCase, PerfTestBase):
diff --git a/tests/TestSuite_vf_l3fwd_lpm_ipv4_rfc2544_kernelpf.py b/tests/TestSuite_vf_l3fwd_lpm_ipv4_rfc2544_kernelpf.py
index c37d18ad..16e1d91c 100644
--- a/tests/TestSuite_vf_l3fwd_lpm_ipv4_rfc2544_kernelpf.py
+++ b/tests/TestSuite_vf_l3fwd_lpm_ipv4_rfc2544_kernelpf.py
@@ -31,8 +31,16 @@
 
 import os
 import time
-from test_case import TestCase
-from perf_test_base import PerfTestBase, IP_TYPE, MATCH_MODE, SUITE_TYPE, VF_L3FWD_NIC_SUPPORT
+
+from framework.test_case import TestCase
+
+from .perf_test_base import (
+    IP_TYPE,
+    MATCH_MODE,
+    SUITE_TYPE,
+    VF_L3FWD_NIC_SUPPORT,
+    PerfTestBase,
+)
 
 
 class TestVfL3fwdLpmIpv4Rfc2544KernelPf(TestCase, PerfTestBase):
diff --git a/tests/TestSuite_vf_l3fwd_lpm_ipv6_kernelpf.py b/tests/TestSuite_vf_l3fwd_lpm_ipv6_kernelpf.py
index c7cb1b6c..fc8fca29 100644
--- a/tests/TestSuite_vf_l3fwd_lpm_ipv6_kernelpf.py
+++ b/tests/TestSuite_vf_l3fwd_lpm_ipv6_kernelpf.py
@@ -31,8 +31,16 @@
 
 import os
 import time
-from test_case import TestCase
-from perf_test_base import PerfTestBase, IP_TYPE, MATCH_MODE, SUITE_TYPE, VF_L3FWD_NIC_SUPPORT
+
+from framework.test_case import TestCase
+
+from .perf_test_base import (
+    IP_TYPE,
+    MATCH_MODE,
+    SUITE_TYPE,
+    VF_L3FWD_NIC_SUPPORT,
+    PerfTestBase,
+)
 
 
 class TestVfL3fwdLpmIpv6KernelPf(TestCase, PerfTestBase):
diff --git a/tests/TestSuite_vf_macfilter.py b/tests/TestSuite_vf_macfilter.py
index b3035603..2555fef3 100644
--- a/tests/TestSuite_vf_macfilter.py
+++ b/tests/TestSuite_vf_macfilter.py
@@ -32,9 +32,9 @@
 import re
 import time
 
-from virt_common import VM
-from test_case import TestCase
-from pmd_output import PmdOutput
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
+from framework.virt_common import VM
 
 VM_CORES_MASK = 'all'
 
diff --git a/tests/TestSuite_vf_offload.py b/tests/TestSuite_vf_offload.py
index f7773297..b5ea2f80 100644
--- a/tests/TestSuite_vf_offload.py
+++ b/tests/TestSuite_vf_offload.py
@@ -30,17 +30,18 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 import re
-import time
 import string
+import time
+
+import framework.utils as utils
+from framework.crb import Crb
+from framework.pmd_output import PmdOutput
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
+from framework.utils import GREEN, RED
+from framework.virt_common import VM
+from nics.net_device import NetDevice
 
-import utils
-from virt_common import VM
-from test_case import TestCase
-from pmd_output import PmdOutput
-from utils import RED, GREEN
-from net_device import NetDevice
-from crb import Crb
-from settings import HEADER_SIZE
 VM_CORES_MASK = 'all'
 DEFAULT_MTU = 1500
 TSO_MTU = 9000
diff --git a/tests/TestSuite_vf_packet_rxtx.py b/tests/TestSuite_vf_packet_rxtx.py
index faf9c402..9cae8850 100644
--- a/tests/TestSuite_vf_packet_rxtx.py
+++ b/tests/TestSuite_vf_packet_rxtx.py
@@ -32,10 +32,10 @@
 import re
 import time
 
-from virt_common import VM
-from test_case import TestCase
-from pmd_output import PmdOutput
-from packet import Packet
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
+from framework.virt_common import VM
 
 VM_CORES_MASK = 'all'
 
diff --git a/tests/TestSuite_vf_port_start_stop.py b/tests/TestSuite_vf_port_start_stop.py
index de67a67c..d4561f6e 100644
--- a/tests/TestSuite_vf_port_start_stop.py
+++ b/tests/TestSuite_vf_port_start_stop.py
@@ -32,10 +32,11 @@
 import re
 import time
 
-from virt_common import VM
-from test_case import TestCase
-from pmd_output import PmdOutput
-from packet import Packet
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
+from framework.virt_common import VM
+
 VM_CORES_MASK = 'all'
 
 class TestVfPortStartStop(TestCase):
diff --git a/tests/TestSuite_vf_rss.py b/tests/TestSuite_vf_rss.py
index 4e48163b..1eb47cc6 100644
--- a/tests/TestSuite_vf_rss.py
+++ b/tests/TestSuite_vf_rss.py
@@ -33,18 +33,20 @@
 DPDK Test suite.
 Test RSS reta (redirection table) update function.
 """
-import time
 import random
 import re
+import time
+
 testQueues = [4]
 reta_entries = []
 reta_lines = []
 
+from framework.pmd_output import PmdOutput
+
 # Use scapy to send packets with different source and dest ip.
 # and collect the hash result of five tuple and the queue id.
-from test_case import TestCase
-from pmd_output import PmdOutput
-from virt_common import VM
+from framework.test_case import TestCase
+from framework.virt_common import VM
 
 
 class TestVfRss(TestCase):
diff --git a/tests/TestSuite_vf_single_core_perf.py b/tests/TestSuite_vf_single_core_perf.py
index d40547cd..86148ef4 100644
--- a/tests/TestSuite_vf_single_core_perf.py
+++ b/tests/TestSuite_vf_single_core_perf.py
@@ -32,15 +32,16 @@
 DPDK Test suite.
 """
 
-import utils
 import json
 import os
-from test_case import TestCase
-from settings import HEADER_SIZE, UPDATE_EXPECTED, load_global_setting
-from pmd_output import PmdOutput
 from copy import deepcopy
-import rst
-from pktgen import PacketGeneratorHelper
+
+import framework.rst as rst
+import framework.utils as utils
+from framework.pktgen import PacketGeneratorHelper
+from framework.pmd_output import PmdOutput
+from framework.settings import HEADER_SIZE, UPDATE_EXPECTED, load_global_setting
+from framework.test_case import TestCase
 
 
 class TestVfSingleCorePerf(TestCase):
diff --git a/tests/TestSuite_vf_smoke.py b/tests/TestSuite_vf_smoke.py
index ac627aa3..ab939acc 100644
--- a/tests/TestSuite_vf_smoke.py
+++ b/tests/TestSuite_vf_smoke.py
@@ -29,14 +29,17 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-from packet import Packet
-from pmd_output import PmdOutput
-from test_case import TestCase
-from smoke_base import SmokeTest
-from smoke_base import JUMBO_FRAME_LENGTH
-from smoke_base import JUMBO_FRAME_MTU
-from smoke_base import DEFAULT_MTU_VALUE
-from smoke_base import LAUNCH_QUEUE
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
+
+from .smoke_base import (
+    DEFAULT_MTU_VALUE,
+    JUMBO_FRAME_LENGTH,
+    JUMBO_FRAME_MTU,
+    LAUNCH_QUEUE,
+    SmokeTest,
+)
 
 VF_MAC_ADDR = '00:11:22:33:44:55'
 
diff --git a/tests/TestSuite_vf_to_vf_nic_bridge.py b/tests/TestSuite_vf_to_vf_nic_bridge.py
index b7b749bc..d03f4459 100644
--- a/tests/TestSuite_vf_to_vf_nic_bridge.py
+++ b/tests/TestSuite_vf_to_vf_nic_bridge.py
@@ -33,14 +33,14 @@ DPDK Test suite
 Test vf to vf nic bridge
 """
 
+import pdb
 import re
-import utils
 import time
-import pdb
 
-from test_case import TestCase
-from virt_common import VM
-from pmd_output import PmdOutput
+import framework.utils as utils
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
+from framework.virt_common import VM
 
 VF_NUMS_ON_ONE_PF = 2
 VF_TEMP_MAC = "52:54:12:45:67:1%d"
diff --git a/tests/TestSuite_vf_vlan.py b/tests/TestSuite_vf_vlan.py
index 28650143..bbb46c7c 100644
--- a/tests/TestSuite_vf_vlan.py
+++ b/tests/TestSuite_vf_vlan.py
@@ -29,15 +29,15 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+import random
 import re
 import time
 
-from virt_common import VM
-from test_case import TestCase
-from pmd_output import PmdOutput
-from packet import Packet
-from settings import get_nic_name
-import random
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.settings import get_nic_name
+from framework.test_case import TestCase
+from framework.virt_common import VM
 
 VM_CORES_MASK = 'all'
 MAX_VLAN = 4095
diff --git a/tests/TestSuite_vhost_1024_ethports.py b/tests/TestSuite_vhost_1024_ethports.py
index 5eb89c3b..3b20f3e0 100644
--- a/tests/TestSuite_vhost_1024_ethports.py
+++ b/tests/TestSuite_vhost_1024_ethports.py
@@ -34,8 +34,8 @@ DPDK Test suite.
 Basic test for launch vhost with 1024 ethports
 """
 
-import utils
-from test_case import TestCase
+import framework.utils as utils
+from framework.test_case import TestCase
 
 
 class TestVhost1024Ethports(TestCase):
diff --git a/tests/TestSuite_vhost_cbdma.py b/tests/TestSuite_vhost_cbdma.py
index c44b692a..034b9b24 100644
--- a/tests/TestSuite_vhost_cbdma.py
+++ b/tests/TestSuite_vhost_cbdma.py
@@ -42,18 +42,19 @@ Here is an example:
  $ ./testpmd -c f -n 4 \
    --vdev 'net_vhost0,iface=/tmp/s0,queues=1,dmas=[txq0@80:04.0],dmathr=1024'
 """
-import rst, json
+import json
 import os
 import re
 import time
-from test_case import TestCase
-from settings import HEADER_SIZE
-from packet import Packet
-from pktgen import PacketGeneratorHelper
-from pmd_output import PmdOutput
-from settings import UPDATE_EXPECTED, load_global_setting
 from copy import deepcopy
 
+import framework.rst as rst
+from framework.packet import Packet
+from framework.pktgen import PacketGeneratorHelper
+from framework.pmd_output import PmdOutput
+from framework.settings import HEADER_SIZE, UPDATE_EXPECTED, load_global_setting
+from framework.test_case import TestCase
+
 
 class TestVirTioVhostCbdma(TestCase):
     def set_up_all(self):
diff --git a/tests/TestSuite_vhost_event_idx_interrupt.py b/tests/TestSuite_vhost_event_idx_interrupt.py
index 6179dd1c..4e318b6b 100644
--- a/tests/TestSuite_vhost_event_idx_interrupt.py
+++ b/tests/TestSuite_vhost_event_idx_interrupt.py
@@ -34,11 +34,12 @@ DPDK Test suite.
 Vhost event idx interrupt need test with l3fwd-power sample
 """
 
-import utils
-import time
 import re
-from virt_common import VM
-from test_case import TestCase
+import time
+
+import framework.utils as utils
+from framework.test_case import TestCase
+from framework.virt_common import VM
 
 
 class TestVhostEventIdxInterrupt(TestCase):
diff --git a/tests/TestSuite_vhost_multi_queue_qemu.py b/tests/TestSuite_vhost_multi_queue_qemu.py
index 01d5826b..27960bb5 100644
--- a/tests/TestSuite_vhost_multi_queue_qemu.py
+++ b/tests/TestSuite_vhost_multi_queue_qemu.py
@@ -36,13 +36,14 @@ Vhost PVP performance using Qemu test suite.
 """
 import re
 import time
-import utils
-from test_case import TestCase
-from settings import HEADER_SIZE
-from virt_common import VM
-from packet import Packet
-from pmd_output import PmdOutput
-from pktgen import PacketGeneratorHelper
+
+import framework.utils as utils
+from framework.packet import Packet
+from framework.pktgen import PacketGeneratorHelper
+from framework.pmd_output import PmdOutput
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
+from framework.virt_common import VM
 
 
 class TestVhostMultiQueueQemu(TestCase):
diff --git a/tests/TestSuite_vhost_pmd_xstats.py b/tests/TestSuite_vhost_pmd_xstats.py
index 016348d1..a1c65b3f 100644
--- a/tests/TestSuite_vhost_pmd_xstats.py
+++ b/tests/TestSuite_vhost_pmd_xstats.py
@@ -34,16 +34,18 @@ DPDK Test suite.
 
 vhost pmd xstats test suite.
 """
+import copy
+import datetime
 import re
 import time
-import utils
-import datetime
-import copy
-from test_case import TestCase
-from settings import HEADER_SIZE
-from qemu_kvm import QEMUKvm
-from packet import Packet
-from pmd_output import PmdOutput
+
+import framework.utils as utils
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.qemu_kvm import QEMUKvm
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
+
 ETHER_JUMBO_FRAME_MTU = 9000
 DEFAULT_JUMBO_FRAME_MTU = 1500
 
diff --git a/tests/TestSuite_vhost_user_interrupt.py b/tests/TestSuite_vhost_user_interrupt.py
index e64a4c14..f71a2467 100644
--- a/tests/TestSuite_vhost_user_interrupt.py
+++ b/tests/TestSuite_vhost_user_interrupt.py
@@ -34,10 +34,11 @@ DPDK Test suite.
 Vhost enqueue interrupt need test with l3fwd-power sample
 """
 
-import utils
-import time
 import re
-from test_case import TestCase
+import time
+
+import framework.utils as utils
+from framework.test_case import TestCase
 
 
 class TestVhostUserInterrupt(TestCase):
diff --git a/tests/TestSuite_vhost_user_live_migration.py b/tests/TestSuite_vhost_user_live_migration.py
index f73411e5..e50800d5 100644
--- a/tests/TestSuite_vhost_user_live_migration.py
+++ b/tests/TestSuite_vhost_user_live_migration.py
@@ -31,11 +31,12 @@
 
 import re
 import time
-import utils
-from virt_common import VM
-from test_case import TestCase
-from config import UserConf
-from exception import VirtDutInitException
+
+import framework.utils as utils
+from framework.config import UserConf
+from framework.exception import VirtDutInitException
+from framework.test_case import TestCase
+from framework.virt_common import VM
 
 
 class TestVhostUserLiveMigration(TestCase):
diff --git a/tests/TestSuite_vhost_virtio_pmd_interrupt.py b/tests/TestSuite_vhost_virtio_pmd_interrupt.py
index 5dd2f830..f421a095 100644
--- a/tests/TestSuite_vhost_virtio_pmd_interrupt.py
+++ b/tests/TestSuite_vhost_virtio_pmd_interrupt.py
@@ -34,13 +34,14 @@ DPDK Test suite.
 vhost virtio pmd interrupt need test with l3fwd-power sample
 """
 
-import utils
-import time
 import re
-from virt_common import VM
-from test_case import TestCase
-from packet import Packet
-from pktgen import PacketGeneratorHelper
+import time
+
+import framework.utils as utils
+from framework.packet import Packet
+from framework.pktgen import PacketGeneratorHelper
+from framework.test_case import TestCase
+from framework.virt_common import VM
 
 
 class TestVhostVirtioPmdInterrupt(TestCase):
diff --git a/tests/TestSuite_vhost_virtio_user_interrupt.py b/tests/TestSuite_vhost_virtio_user_interrupt.py
index 1c4a5a98..89ff9800 100644
--- a/tests/TestSuite_vhost_virtio_user_interrupt.py
+++ b/tests/TestSuite_vhost_virtio_user_interrupt.py
@@ -36,8 +36,9 @@ Virtio-user interrupt need test with l3fwd-power sample
 
 import re
 import time
-import utils
-from test_case import TestCase
+
+import framework.utils as utils
+from framework.test_case import TestCase
 
 
 class TestVirtioUserInterrupt(TestCase):
diff --git a/tests/TestSuite_virtio_event_idx_interrupt.py b/tests/TestSuite_virtio_event_idx_interrupt.py
index 09918992..e10fb5f2 100644
--- a/tests/TestSuite_virtio_event_idx_interrupt.py
+++ b/tests/TestSuite_virtio_event_idx_interrupt.py
@@ -34,13 +34,14 @@ DPDK Test suite.
 Virtio idx interrupt need test with l3fwd-power sample
 """
 
-import utils
-import time
 import _thread
 import re
-from virt_common import VM
-from test_case import TestCase
-from pktgen import PacketGeneratorHelper
+import time
+
+import framework.utils as utils
+from framework.pktgen import PacketGeneratorHelper
+from framework.test_case import TestCase
+from framework.virt_common import VM
 
 
 class TestVirtioIdxInterrupt(TestCase):
diff --git a/tests/TestSuite_virtio_ipsec_cryptodev_func.py b/tests/TestSuite_virtio_ipsec_cryptodev_func.py
index ec610dde..c4f62b86 100644
--- a/tests/TestSuite_virtio_ipsec_cryptodev_func.py
+++ b/tests/TestSuite_virtio_ipsec_cryptodev_func.py
@@ -32,15 +32,17 @@
 DPDK Test suite
 Test DPDK vhost + virtio scenarios
 """
+import binascii
 import os
-import utils
-import time
 import subprocess
-import binascii
-from test_case import TestCase
-from qemu_kvm import QEMUKvm
-import cryptodev_common as cc
-from packet import Packet
+import time
+
+import framework.utils as utils
+import tests.cryptodev_common as cc
+from framework.packet import Packet
+from framework.qemu_kvm import QEMUKvm
+from framework.test_case import TestCase
+
 
 class VirtioCryptodevIpsecTest(TestCase):
     def set_up_all(self):
diff --git a/tests/TestSuite_virtio_perf_cryptodev_func.py b/tests/TestSuite_virtio_perf_cryptodev_func.py
index 506dd5a7..92765675 100644
--- a/tests/TestSuite_virtio_perf_cryptodev_func.py
+++ b/tests/TestSuite_virtio_perf_cryptodev_func.py
@@ -33,11 +33,13 @@ DPDK Test suite
 Test DPDK vhost + virtio scenarios
 """
 import os
-import utils
 import subprocess
-from test_case import TestCase
-from qemu_kvm import QEMUKvm
-import cryptodev_common as cc
+
+import framework.utils as utils
+import tests.cryptodev_common as cc
+from framework.qemu_kvm import QEMUKvm
+from framework.test_case import TestCase
+
 
 class VirtioCryptodevPerfTest(TestCase):
     def set_up_all(self):
diff --git a/tests/TestSuite_virtio_pvp_regression.py b/tests/TestSuite_virtio_pvp_regression.py
index 8e04ba5a..c19c6da9 100644
--- a/tests/TestSuite_virtio_pvp_regression.py
+++ b/tests/TestSuite_virtio_pvp_regression.py
@@ -43,11 +43,12 @@ qemu =
 """
 import re
 import time
-import utils
-from test_case import TestCase
-from settings import HEADER_SIZE
-from virt_common import VM
-from pktgen import PacketGeneratorHelper
+
+import framework.utils as utils
+from framework.pktgen import PacketGeneratorHelper
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
+from framework.virt_common import VM
 
 
 class TestVirtioPVPRegression(TestCase):
diff --git a/tests/TestSuite_virtio_smoke.py b/tests/TestSuite_virtio_smoke.py
index b7391b77..fca31c98 100644
--- a/tests/TestSuite_virtio_smoke.py
+++ b/tests/TestSuite_virtio_smoke.py
@@ -34,8 +34,10 @@ DPDK Test suite.
 """
 
 import re
-from test_case import TestCase
-from pmd_output import PmdOutput
+
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
+
 DEFAULT_MTU = 1500
 TSO_MTU = 9000
 
diff --git a/tests/TestSuite_virtio_unit_cryptodev_func.py b/tests/TestSuite_virtio_unit_cryptodev_func.py
index bf96b62f..6ccfef7f 100644
--- a/tests/TestSuite_virtio_unit_cryptodev_func.py
+++ b/tests/TestSuite_virtio_unit_cryptodev_func.py
@@ -35,11 +35,13 @@ Test DPDK vhost + virtio scenarios
 """
 
 import os
-import utils
 import subprocess
-from test_case import TestCase
-from qemu_kvm import QEMUKvm
-import cryptodev_common as cc
+
+import framework.utils as utils
+import tests.cryptodev_common as cc
+from framework.qemu_kvm import QEMUKvm
+from framework.test_case import TestCase
+
 
 class VirtioCryptodevUnitTest(TestCase):
     def set_up_all(self):
diff --git a/tests/TestSuite_virtio_user_as_exceptional_path.py b/tests/TestSuite_virtio_user_as_exceptional_path.py
index 3d54441c..e34b7a3c 100644
--- a/tests/TestSuite_virtio_user_as_exceptional_path.py
+++ b/tests/TestSuite_virtio_user_as_exceptional_path.py
@@ -36,11 +36,13 @@ virtio user as exception path test suite.
 """
 import re
 import time
-import utils
-from test_case import TestCase
-from settings import HEADER_SIZE
-import vhost_peer_conf as peer
-from pktgen import PacketGeneratorHelper
+
+import framework.utils as utils
+import tests.vhost_peer_conf as peer
+from framework.pktgen import PacketGeneratorHelper
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
+
 
 class TestVirtioUserAsExceptionalPath(TestCase):
 
diff --git a/tests/TestSuite_virtio_user_for_container_networking.py b/tests/TestSuite_virtio_user_for_container_networking.py
index 53c7864e..037a1bd2 100644
--- a/tests/TestSuite_virtio_user_for_container_networking.py
+++ b/tests/TestSuite_virtio_user_for_container_networking.py
@@ -35,16 +35,16 @@ Virtio user for container networking
 """
 
 import json
-import rst
 import os
-import utils
 import time
-from test_case import TestCase
-from settings import HEADER_SIZE
-from pktgen import PacketGeneratorHelper
-from settings import UPDATE_EXPECTED, load_global_setting
 from copy import deepcopy
 
+import framework.rst as rst
+import framework.utils as utils
+from framework.pktgen import PacketGeneratorHelper
+from framework.settings import HEADER_SIZE, UPDATE_EXPECTED, load_global_setting
+from framework.test_case import TestCase
+
 
 class TestVirtioUserForContainer(TestCase):
 
diff --git a/tests/TestSuite_vlan.py b/tests/TestSuite_vlan.py
index ec4cca7b..b8cbf8c5 100644
--- a/tests/TestSuite_vlan.py
+++ b/tests/TestSuite_vlan.py
@@ -37,13 +37,12 @@ Test the support of VLAN Offload Features by Poll Mode Drivers.
 
 """
 
-import utils
 import time
 
-
-from test_case import TestCase
-from pmd_output import PmdOutput
-from packet import Packet
+import framework.utils as utils
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
 
 
 class TestVlan(TestCase):
diff --git a/tests/TestSuite_vlan_ethertype_config.py b/tests/TestSuite_vlan_ethertype_config.py
index 514bdd1f..563d994f 100644
--- a/tests/TestSuite_vlan_ethertype_config.py
+++ b/tests/TestSuite_vlan_ethertype_config.py
@@ -37,19 +37,19 @@ Test the support of VLAN Offload Features by Poll Mode Drivers.
 
 """
 
-import dts
+import random
 import time
-import utils
 
-from test_case import TestCase
-from pmd_output import PmdOutput
-from scapy.utils import struct, socket, wrpcap, rdpcap
-from scapy.layers.inet import Ether, IP, TCP, UDP, ICMP
-from scapy.layers.l2 import Dot1Q, ARP, GRE
-from settings import DPDK_RXMODE_SETTING
-from settings import load_global_setting
+from scapy.layers.inet import ICMP, IP, TCP, UDP, Ether
+from scapy.layers.l2 import ARP, GRE, Dot1Q
+from scapy.utils import rdpcap, socket, struct, wrpcap
+
+import framework.dts as dts
+import framework.utils as utils
+from framework.pmd_output import PmdOutput
+from framework.settings import DPDK_RXMODE_SETTING, load_global_setting
+from framework.test_case import TestCase
 
-import random
 MAX_VLAN = 4095
 
 
diff --git a/tests/TestSuite_vm2vm_virtio_net_perf.py b/tests/TestSuite_vm2vm_virtio_net_perf.py
index 0ec542af..ae9b3d2f 100644
--- a/tests/TestSuite_vm2vm_virtio_net_perf.py
+++ b/tests/TestSuite_vm2vm_virtio_net_perf.py
@@ -38,14 +38,15 @@ vm2vm split ring and packed ring vhost-user/virtio-net check the payload of larg
 mergeable and non-mergeable dequeue zero copy.
 please use qemu version greater 4.1.94 which support packed feathur to test this suite.
 """
+import random
 import re
-import time
 import string
-import random
-import utils
-from virt_common import VM
-from test_case import TestCase
-from pmd_output import PmdOutput
+import time
+
+import framework.utils as utils
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
+from framework.virt_common import VM
 
 
 class TestVM2VMVirtioNetPerf(TestCase):
diff --git a/tests/TestSuite_vm2vm_virtio_pmd.py b/tests/TestSuite_vm2vm_virtio_pmd.py
index 44f17a36..d89b9499 100644
--- a/tests/TestSuite_vm2vm_virtio_pmd.py
+++ b/tests/TestSuite_vm2vm_virtio_pmd.py
@@ -40,11 +40,13 @@ About mergeable path check the large packet payload.
 """
 import re
 import time
-import utils
-from virt_common import VM
-from test_case import TestCase
-from packet import Packet
-from pmd_output import PmdOutput
+
+import framework.utils as utils
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
+from framework.virt_common import VM
+
 
 class TestVM2VMVirtioPMD(TestCase):
     def set_up_all(self):
diff --git a/tests/TestSuite_vm2vm_virtio_user.py b/tests/TestSuite_vm2vm_virtio_user.py
index bd1c320e..f758ab76 100644
--- a/tests/TestSuite_vm2vm_virtio_user.py
+++ b/tests/TestSuite_vm2vm_virtio_user.py
@@ -40,10 +40,11 @@ mergeable, non-mergeable path test
 """
 import re
 import time
-import utils
-from test_case import TestCase
-from packet import Packet
-from pmd_output import PmdOutput
+
+import framework.utils as utils
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
 
 
 class TestVM2VMVirtioUser(TestCase):
diff --git a/tests/TestSuite_vm_hotplug.py b/tests/TestSuite_vm_hotplug.py
index f403d40e..c3695b68 100644
--- a/tests/TestSuite_vm_hotplug.py
+++ b/tests/TestSuite_vm_hotplug.py
@@ -39,9 +39,10 @@ Test some vm hotplug function with vfio
 import os
 import re
 import time
-from qemu_kvm import QEMUKvm
-from test_case import TestCase
-from pmd_output import PmdOutput
+
+from framework.pmd_output import PmdOutput
+from framework.qemu_kvm import QEMUKvm
+from framework.test_case import TestCase
 
 VM_CORES_MASK = 'all'
 
diff --git a/tests/TestSuite_vm_power_manager.py b/tests/TestSuite_vm_power_manager.py
index f02b8125..ea104a38 100644
--- a/tests/TestSuite_vm_power_manager.py
+++ b/tests/TestSuite_vm_power_manager.py
@@ -35,10 +35,11 @@ VM power manager test suite.
 """
 
 import re
-import utils
-from test_case import TestCase
-from settings import HEADER_SIZE
-from qemu_libvirt import LibvirtKvm
+
+import framework.utils as utils
+from framework.qemu_libvirt import LibvirtKvm
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
 
 
 class TestVmPowerManager(TestCase):
diff --git a/tests/TestSuite_vm_pw_mgmt_policy.py b/tests/TestSuite_vm_pw_mgmt_policy.py
index f074f6d7..c3f55d29 100644
--- a/tests/TestSuite_vm_pw_mgmt_policy.py
+++ b/tests/TestSuite_vm_pw_mgmt_policy.py
@@ -34,23 +34,23 @@ DPDK Test suite.
 virtual power manager policy (traffic/time) test suite.
 """
 import os
+import random
 import re
-import time
 import textwrap
-import random
+import time
 import traceback
-from itertools import product
-from datetime import datetime, timedelta
 from copy import deepcopy
+from datetime import datetime, timedelta
+from itertools import product
 from pprint import pformat
 
-from utils import create_mask as dts_create_mask
-from test_case import TestCase
-from pmd_output import PmdOutput
-from qemu_libvirt import LibvirtKvm
-from pktgen import TRANSMIT_CONT
-from exception import VerifyFailure
-from packet import Packet
+from framework.exception import VerifyFailure
+from framework.packet import Packet
+from framework.pktgen import TRANSMIT_CONT
+from framework.pmd_output import PmdOutput
+from framework.qemu_libvirt import LibvirtKvm
+from framework.test_case import TestCase
+from framework.utils import create_mask as dts_create_mask
 
 
 class TestVmPwMgmtPolicy(TestCase):
diff --git a/tests/TestSuite_vmdq.py b/tests/TestSuite_vmdq.py
index 6dae54a4..2a07fb4d 100644
--- a/tests/TestSuite_vmdq.py
+++ b/tests/TestSuite_vmdq.py
@@ -35,13 +35,14 @@ DPDK Test suite.
 Tests for vmdq.
 
 """
-import utils
 import os
 import re
-from test_case import TestCase
 from time import sleep
-from settings import HEADER_SIZE
-from pktgen import PacketGeneratorHelper
+
+import framework.utils as utils
+from framework.pktgen import PacketGeneratorHelper
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
 
 
 class TestVmdq(TestCase):
diff --git a/tests/TestSuite_vmdq_dcb.py b/tests/TestSuite_vmdq_dcb.py
index 2a248f8c..d68e46bd 100644
--- a/tests/TestSuite_vmdq_dcb.py
+++ b/tests/TestSuite_vmdq_dcb.py
@@ -36,13 +36,14 @@ DPDK Test suite.
 Test  example vmdq_dcb.
 
 """
-import utils
 import os
-import re
 import random
-from test_case import TestCase
-from settings import HEADER_SIZE
-from pktgen import PacketGeneratorHelper
+import re
+
+import framework.utils as utils
+from framework.pktgen import PacketGeneratorHelper
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
 
 
 class TestVmdqDcb(TestCase):
diff --git a/tests/TestSuite_vswitch_sample_cbdma.py b/tests/TestSuite_vswitch_sample_cbdma.py
index 08422ea3..7a19b483 100644
--- a/tests/TestSuite_vswitch_sample_cbdma.py
+++ b/tests/TestSuite_vswitch_sample_cbdma.py
@@ -33,18 +33,19 @@
 DPDK Test suite.
 """
 
-import utils
-import re
-import time
 import os
-from test_case import TestCase
-from packet import Packet
-from pktgen import PacketGeneratorHelper
-from pmd_output import PmdOutput
-from virt_common import VM
-from settings import HEADER_SIZE
 import random
+import re
 import string
+import time
+
+import framework.utils as utils
+from framework.packet import Packet
+from framework.pktgen import PacketGeneratorHelper
+from framework.pmd_output import PmdOutput
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
+from framework.virt_common import VM
 
 
 class TestVswitchSampleCBDMA(TestCase):
diff --git a/tests/TestSuite_vxlan.py b/tests/TestSuite_vxlan.py
index fdf6170f..1442578d 100644
--- a/tests/TestSuite_vxlan.py
+++ b/tests/TestSuite_vxlan.py
@@ -36,29 +36,29 @@ Test VXLAN behaviour in DPDK.
 
 """
 
-import utils
-import string
+import os
 import re
+import string
 import time
-import os
-from pmd_output import PmdOutput
-from packet import IncreaseIP, IncreaseIPv6
 from random import randint
 
-from scapy.utils import wrpcap, rdpcap
-from scapy.layers.inet import Ether, IP, TCP, UDP
+from scapy.config import conf
+from scapy.layers.inet import IP, TCP, UDP, Ether
 from scapy.layers.inet6 import IPv6
 from scapy.layers.l2 import Dot1Q
-from scapy.layers.vxlan import VXLAN
 from scapy.layers.sctp import SCTP, SCTPChunkData
-from scapy.sendrecv import sniff
-from scapy.config import conf
+from scapy.layers.vxlan import VXLAN
 from scapy.route import *
+from scapy.sendrecv import sniff
+from scapy.utils import rdpcap, wrpcap
 
-from test_case import TestCase
-from settings import HEADER_SIZE, FOLDERS
-from pktgen import PacketGeneratorHelper
-import packet
+import framework.packet as packet
+import framework.utils as utils
+from framework.packet import IncreaseIP, IncreaseIPv6
+from framework.pktgen import PacketGeneratorHelper
+from framework.pmd_output import PmdOutput
+from framework.settings import FOLDERS, HEADER_SIZE
+from framework.test_case import TestCase
 
 #
 #
@@ -622,7 +622,7 @@ class TestVxlan(TestCase):
 
         out = self.dut.send_expect("stop", "testpmd>", 10)
         self.dut.send_expect("quit", "#", 10)
-        
+
     def test_vxlan_ipv6_detect(self):
         """
         verify vxlan packet detection with ipv6 header
diff --git a/tests/TestSuite_vxlan_gpe_support_in_i40e.py b/tests/TestSuite_vxlan_gpe_support_in_i40e.py
index b5022540..555f7a0f 100644
--- a/tests/TestSuite_vxlan_gpe_support_in_i40e.py
+++ b/tests/TestSuite_vxlan_gpe_support_in_i40e.py
@@ -36,17 +36,19 @@ Test VXLAN-GPE behaviour in DPDK.
 
 """
 
-import utils
 import os
 import re
-from pmd_output import PmdOutput
-from scapy.utils import wrpcap, rdpcap
-from scapy.layers.inet import Ether, IP, UDP
+
+from scapy.config import conf
+from scapy.layers.inet import IP, UDP, Ether
 from scapy.layers.l2 import Dot1Q
 from scapy.layers.vxlan import VXLAN
-from scapy.config import conf
-from test_case import TestCase
-from settings import FOLDERS
+from scapy.utils import rdpcap, wrpcap
+
+import framework.utils as utils
+from framework.pmd_output import PmdOutput
+from framework.settings import FOLDERS
+from framework.test_case import TestCase
 
 #
 #
diff --git a/tests/__init__.py b/tests/__init__.py
new file mode 100644
index 00000000..ae0043b7
--- /dev/null
+++ b/tests/__init__.py
@@ -0,0 +1,30 @@
+#!/usr/bin/python3
+# BSD LICENSE
+#
+# Copyright (c) 2021 PANTHEON.tech s.r.o.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#   * Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+#   * Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in
+#     the documentation and/or other materials provided with the
+#     distribution.
+#   * Neither the name of PANTHEON.tech s.r.o. nor the names of its
+#     contributors may be used to endorse or promote products derived
+#     from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/tests/bonding.py b/tests/bonding.py
index b5fc45fc..40e324d6 100644
--- a/tests/bonding.py
+++ b/tests/bonding.py
@@ -30,20 +30,20 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 import os
-import time
 import re
-import struct
 import socket
+import struct
+import time
 from socket import htonl
 
-from packet import Packet, TMP_PATH
 from scapy.sendrecv import sendp
 from scapy.utils import wrpcap
 
-import utils
-from exception import TimeoutException, VerifyFailure
-from pmd_output import PmdOutput
-from settings import HEADER_SIZE
+import framework.utils as utils
+from framework.exception import TimeoutException, VerifyFailure
+from framework.packet import TMP_PATH, Packet
+from framework.pmd_output import PmdOutput
+from framework.settings import HEADER_SIZE
 
 # define bonding mode
 MODE_ROUND_ROBIN = 0
diff --git a/tests/compress_common.py b/tests/compress_common.py
index 4afdcdef..06a9836b 100644
--- a/tests/compress_common.py
+++ b/tests/compress_common.py
@@ -32,8 +32,9 @@
 
 import os
 import re
-import utils
-from config import SuiteConf
+
+import framework.utils as utils
+from framework.config import SuiteConf
 
 conf = SuiteConf('compressdev_sample')
 
diff --git a/tests/cryptodev_common.py b/tests/cryptodev_common.py
index bb725897..e3c58cdc 100644
--- a/tests/cryptodev_common.py
+++ b/tests/cryptodev_common.py
@@ -29,8 +29,8 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-from net_device import GetNicObj
-from config import SuiteConf
+from framework.config import SuiteConf
+from nics.net_device import GetNicObj
 
 conf = SuiteConf('cryptodev_sample')
 
diff --git a/tests/flexible_common.py b/tests/flexible_common.py
index 9df62caa..fe37e95d 100644
--- a/tests/flexible_common.py
+++ b/tests/flexible_common.py
@@ -29,10 +29,11 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-import time
-from packet import Packet
-from pmd_output import PmdOutput
 import re
+import time
+
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
 
 
 class FlexibleRxdBase(object):
diff --git a/tests/perf_test_base.py b/tests/perf_test_base.py
index 02a73eec..34e15ee9 100644
--- a/tests/perf_test_base.py
+++ b/tests/perf_test_base.py
@@ -32,25 +32,30 @@
 """
 Layer-3 forwarding test script base class.
 """
+import json
 import os
 import re
 import time
 import traceback
-import texttable
-import json
-import numpy as np
+from copy import deepcopy
 from enum import Enum, unique
-from pprint import pformat
 from itertools import product
-from copy import deepcopy
+from pprint import pformat
 
-from config import SuiteConf
-from packet import Packet
-from pktgen import TRANSMIT_CONT, PKTGEN_TREX, PKTGEN_IXIA, PKTGEN_IXIA_NETWORK
-from utils import convert_int2ip, convert_ip2int
-from exception import VerifyFailure
-import utils
+import numpy as np
 
+import framework.texttable as texttable
+import framework.utils as utils
+from framework.config import SuiteConf
+from framework.exception import VerifyFailure
+from framework.packet import Packet
+from framework.pktgen import (
+    PKTGEN_IXIA,
+    PKTGEN_IXIA_NETWORK,
+    PKTGEN_TREX,
+    TRANSMIT_CONT,
+)
+from framework.utils import convert_int2ip, convert_ip2int
 
 VF_L3FWD_NIC_SUPPORT = frozenset((
     "niantic",
diff --git a/tests/rte_flow_common.py b/tests/rte_flow_common.py
index 591aa5a1..eae24e2e 100644
--- a/tests/rte_flow_common.py
+++ b/tests/rte_flow_common.py
@@ -30,10 +30,11 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 import json
-import time
 import re
-from utils import GREEN, RED
-from packet import Packet
+import time
+
+from framework.packet import Packet
+from framework.utils import GREEN, RED
 
 CVL_TXQ_RXQ_NUMBER = 16
 
diff --git a/tests/smoke_base.py b/tests/smoke_base.py
index 0d7046b0..bbdc84ad 100644
--- a/tests/smoke_base.py
+++ b/tests/smoke_base.py
@@ -31,7 +31,8 @@
 
 import re
 import time
-from settings import HEADER_SIZE
+
+from framework.settings import HEADER_SIZE
 
 JUMBO_FRAME_MTU = 9600
 DEFAULT_MTU_VALUE = 1500
diff --git a/tests/vhost_peer_conf.py b/tests/vhost_peer_conf.py
index 59b34956..c8802277 100644
--- a/tests/vhost_peer_conf.py
+++ b/tests/vhost_peer_conf.py
@@ -29,7 +29,7 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-from config import UserConf
+from framework.config import UserConf
 
 conf_file = 'conf/vhost_peer_conf.cfg'
 conf_peer = UserConf(conf_file)
diff --git a/tools/__init__.py b/tools/__init__.py
new file mode 100644
index 00000000..ae0043b7
--- /dev/null
+++ b/tools/__init__.py
@@ -0,0 +1,30 @@
+#!/usr/bin/python3
+# BSD LICENSE
+#
+# Copyright (c) 2021 PANTHEON.tech s.r.o.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#   * Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+#   * Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in
+#     the documentation and/or other materials provided with the
+#     distribution.
+#   * Neither the name of PANTHEON.tech s.r.o. nor the names of its
+#     contributors may be used to endorse or promote products derived
+#     from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/tools/dump_case.py b/tools/dump_case.py
index 22c79d2c..310df6bf 100755
--- a/tools/dump_case.py
+++ b/tools/dump_case.py
@@ -1,8 +1,8 @@
-import sys
-import os
-import re
 import inspect
 import json
+import os
+import re
+import sys
 
 exec_file = os.path.realpath(__file__)
 DTS_PATH = exec_file.replace('/tools/dump_case.py', '')
@@ -13,9 +13,9 @@ DTS_FRAMEWORK = DTS_PATH + '/framework'
 sys.path.append(DTS_SUITES)
 sys.path.append(DTS_FRAMEWORK)
 
-import dts
-from test_case import TestCase
-from utils import pprint
+import framework.dts as dts
+from framework.test_case import TestCase
+from framework.utils import pprint
 
 
 def get_subclasses(module, clazz):
@@ -79,7 +79,7 @@ def load_cases():
     suite_func_list = {}
     suite_perf_list = {}
     for suite in suites:
-        test_module = __import__('TestSuite_' + suite)
+        test_module = __import__('tests.TestSuite_' + suite)
         for classname, test_class in get_subclasses(test_module, TestCase):
             test_suite = test_class(dut, None, None, suite)
             func_cases = get_functional_test_cases(test_suite)
diff --git a/tools/parse_opt.py b/tools/parse_opt.py
index c1bc02db..e578e212 100755
--- a/tools/parse_opt.py
+++ b/tools/parse_opt.py
@@ -1,6 +1,6 @@
-import sys
 import os.path
 import re
+import sys
 
 
 def RED(text):
diff --git a/tools/setup.py b/tools/setup.py
index c0852f21..c800962d 100755
--- a/tools/setup.py
+++ b/tools/setup.py
@@ -1,9 +1,10 @@
-import sys
+import configparser
 import os
-import parse_opt
 import re
+import sys
 import time
-import configparser
+
+import parse_opt
 
 exec_file = os.path.realpath(__file__)
 DTS_PATH = exec_file.replace('/tools/setup.py', '')
@@ -22,10 +23,11 @@ DTS_IXIA_CFG = DTS_PATH + '/conf/ixia.cfg'
 sys.path.append(DTS_FRAMEWORK)
 sys.path.append(DTS_TOOLS)
 
-import utils
-from parse_opt import Option
-from settings import NICS
-from utils import GREEN, RED
+import framework.utils as utils
+from framework.settings import NICS
+from framework.utils import GREEN, RED
+
+from .parse_opt import Option
 
 global def_opt
 global dut_ip
