diff mbox series

[v3] python: standard project structure

Message ID 1631281303-19151-1-git-send-email-juraj.linkes@pantheon.tech (mailing list archive)
State Superseded
Headers show
Series [v3] python: standard project structure | expand

Commit Message

Juraj Linkeš Sept. 10, 2021, 1:41 p.m. UTC
DTS does not use the standard project structure and therefore has to add
paths to python interpreter search paths. Move to a standard structure:
* Move main.py to the root directory.
* Add __init__.py to directories from which python modules are imported.
* Adjust import paths to account for this new structure.

Moving to a standard structure has a host of positives, such as:
* No need to study any non-standard approaches. This removes any
bewilderment the developers may feel when encountering something
non-standard without proper justification (as is the case with DTS).
* Better integration with IDEs which rely on the standard structure.
* More accurate results from automated tools.

In addition to this, not only adjust the import paths but make then
explicit for modules imported from the same level, e.g. instead of using
from foo import, use from .foo import (and import bar.foo as foo, where
foo if on the same level as the importing module). This allows
developers to separate DTS modules from third party modules at a glance.

Also sort the import using the isort tool. Add config using the "black"
profile for isort to facilitate interoperability with Black.

Signed-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech>
---
v3: addressed dynamic imports, reverted Dot1BR import in packet.py and
made dynamic imports therein more readable.
---
 dep/QMP/qemu-ga-client                        |  4 +-
 dep/QMP/qmp.py                                |  3 +-
 dep/__init__.py                               | 30 ++++++++
 dep/scapy_modules/Dot1BR.py                   |  5 +-
 dep/scapy_modules/__init__.py                 | 30 ++++++++
 dts                                           |  2 +-
 framework/__init__.py                         | 30 ++++++++
 framework/checkCase.py                        |  7 +-
 framework/config.py                           | 26 +++++--
 framework/crb.py                              | 17 +++--
 framework/crbs.py                             |  2 +-
 framework/debugger.py                         | 16 ++--
 framework/dts.py                              | 74 ++++++++++---------
 framework/dut.py                              | 18 +++--
 framework/etgen.py                            | 13 ++--
 framework/flow/flow.py                        | 12 +--
 framework/flow/flow_action_items.py           |  6 +-
 framework/flow/flow_items.py                  | 13 ++--
 framework/flow/flow_pattern_items.py          | 14 ++--
 framework/flow/flow_rule.py                   |  7 +-
 framework/flow/generator.py                   | 24 ++++--
 framework/ixia_network/ixnet.py               | 11 +--
 framework/ixia_network/ixnet_stream.py        |  4 +-
 framework/ixia_network/packet_parser.py       |  2 +-
 framework/json_reporter.py                    |  1 +
 framework/logger.py                           |  8 +-
 framework/multiple_vm.py                      | 17 +++--
 framework/packet.py                           | 44 ++++-------
 framework/pktgen.py                           | 27 ++++---
 framework/pktgen_base.py                      | 11 +--
 framework/pktgen_ixia.py                      | 19 +++--
 framework/pktgen_ixia_network.py              |  2 +-
 framework/pktgen_trex.py                      | 29 ++++++--
 framework/plotgraph.py                        |  5 +-
 framework/plotting.py                         | 12 +--
 framework/pmd_output.py                       |  5 +-
 framework/project_dpdk.py                     | 30 +++++---
 framework/qemu_kvm.py                         | 13 ++--
 framework/qemu_libvirt.py                     | 26 +++----
 framework/rst.py                              |  7 +-
 framework/settings.py                         |  2 +-
 framework/ssh_connection.py                   |  4 +-
 framework/ssh_pexpect.py                      |  8 +-
 framework/test_case.py                        | 39 ++++++----
 framework/test_result.py                      |  2 +-
 framework/tester.py                           | 72 +++++++++---------
 framework/texttable.py                        |  4 +-
 framework/utils.py                            |  8 +-
 framework/virt_base.py                        | 17 ++---
 framework/virt_common.py                      |  8 +-
 framework/virt_dut.py                         | 23 ++++--
 framework/virt_resource.py                    |  2 +-
 framework/virt_scene.py                       | 18 ++---
 framework/main.py => main.py                  | 12 +--
 nics/__init__.py                              | 30 ++++++++
 nics/net_device.py                            | 11 ++-
 nics/perf_report.py                           | 23 +++---
 nics/system_info.py                           |  5 +-
 pyproject.toml                                |  3 +
 requirements.txt                              |  1 +
 tests/TestSuite_ABI_stable.py                 | 12 ++-
 tests/TestSuite_acl.py                        |  2 +-
 tests/TestSuite_af_xdp_2.py                   |  9 ++-
 tests/TestSuite_blocklist.py                  |  9 ++-
 tests/TestSuite_cbdma.py                      | 11 +--
 tests/TestSuite_checksum_offload.py           | 34 ++++-----
 tests/TestSuite_cloud_filter_with_l4_port.py  | 19 ++---
 tests/TestSuite_cmdline.py                    |  5 +-
 tests/TestSuite_compressdev_isal_pmd.py       | 10 ++-
 tests/TestSuite_compressdev_qat_pmd.py        |  9 ++-
 tests/TestSuite_compressdev_zlib_pmd.py       | 10 ++-
 tests/TestSuite_coremask.py                   |  7 +-
 tests/TestSuite_crypto_perf_cryptodev_perf.py |  7 +-
 tests/TestSuite_cvl_advanced_iavf_rss.py      | 12 +--
 ...TestSuite_cvl_advanced_iavf_rss_gtpogre.py | 12 +--
 tests/TestSuite_cvl_advanced_iavf_rss_gtpu.py | 12 +--
 ...advanced_iavf_rss_vlan_esp_ah_l2tp_pfcp.py | 14 ++--
 tests/TestSuite_cvl_advanced_rss.py           | 12 +--
 tests/TestSuite_cvl_advanced_rss_gtpogre.py   |  9 ++-
 tests/TestSuite_cvl_advanced_rss_gtpu.py      |  9 ++-
 tests/TestSuite_cvl_advanced_rss_pppoe.py     | 12 +--
 ..._cvl_advanced_rss_vlan_esp_ah_l2tp_pfcp.py | 14 ++--
 tests/TestSuite_cvl_dcf_acl_filter.py         | 17 ++---
 tests/TestSuite_cvl_dcf_date_path.py          |  7 +-
 tests/TestSuite_cvl_dcf_flow_priority.py      | 17 ++---
 tests/TestSuite_cvl_dcf_switch_filter.py      | 17 ++---
 tests/TestSuite_cvl_dcf_switch_filter_gtpu.py | 17 ++---
 .../TestSuite_cvl_dcf_switch_filter_pppoe.py  | 18 ++---
 tests/TestSuite_cvl_ecpri.py                  | 13 ++--
 tests/TestSuite_cvl_fdir.py                   | 17 ++---
 ...TestSuite_cvl_iavf_ip_fragment_rte_flow.py | 12 +--
 tests/TestSuite_cvl_iavf_rss_configure.py     | 15 ++--
 tests/TestSuite_cvl_ip_fragment_rte_flow.py   | 12 +--
 tests/TestSuite_cvl_limit_value_test.py       | 18 +++--
 tests/TestSuite_cvl_qinq.py                   | 14 ++--
 tests/TestSuite_cvl_rss_configure.py          | 20 ++---
 tests/TestSuite_cvl_switch_filter.py          | 21 +++---
 tests/TestSuite_cvl_switch_filter_pppoe.py    | 21 +++---
 ...tSuite_cvl_vf_support_multicast_address.py |  7 +-
 tests/TestSuite_dcf_lifecycle.py              | 15 ++--
 tests/TestSuite_ddp_gtp.py                    | 15 ++--
 tests/TestSuite_ddp_gtp_qregion.py            | 14 ++--
 tests/TestSuite_ddp_l2tpv3.py                 | 10 ++-
 tests/TestSuite_ddp_mpls.py                   | 15 ++--
 tests/TestSuite_ddp_ppp_l2tp.py               | 14 ++--
 tests/TestSuite_distributor.py                |  9 ++-
 tests/TestSuite_dpdk_gro_lib.py               |  9 ++-
 tests/TestSuite_dpdk_gso_lib.py               | 13 ++--
 tests/TestSuite_dpdk_hugetlbfs_mount_size.py  |  5 +-
 tests/TestSuite_dual_vlan.py                  |  7 +-
 tests/TestSuite_dynamic_config.py             |  7 +-
 tests/TestSuite_dynamic_flowtype.py           | 11 +--
 tests/TestSuite_dynamic_queue.py              | 15 ++--
 tests/TestSuite_eeprom_dump.py                |  7 +-
 tests/TestSuite_efd.py                        |  9 ++-
 ...e_enable_package_download_in_ice_driver.py | 10 ++-
 tests/TestSuite_etag.py                       | 15 ++--
 tests/TestSuite_ethtool_stats.py              | 18 ++---
 tests/TestSuite_eventdev_perf.py              | 21 +++---
 tests/TestSuite_eventdev_pipeline.py          | 10 ++-
 tests/TestSuite_eventdev_pipeline_perf.py     | 21 +++---
 tests/TestSuite_example_build.py              |  6 +-
 tests/TestSuite_external_memory.py            |  7 +-
 tests/TestSuite_external_mempool_handler.py   |  6 +-
 tests/TestSuite_fdir.py                       | 18 ++---
 tests/TestSuite_fips_cryptodev.py             |  8 +-
 tests/TestSuite_firmware_version.py           |  5 +-
 tests/TestSuite_flexible_rxd.py               |  9 ++-
 tests/TestSuite_floating_veb.py               | 16 ++--
 tests/TestSuite_flow_classify.py              | 14 ++--
 tests/TestSuite_flow_classify_softnic.py      | 45 +++++------
 tests/TestSuite_flow_filtering.py             | 12 +--
 ...tSuite_fortville_rss_granularity_config.py | 12 +--
 tests/TestSuite_fortville_rss_input.py        | 12 +--
 tests/TestSuite_generic_filter.py             | 11 ++-
 tests/TestSuite_generic_flow_api.py           | 30 ++++----
 tests/TestSuite_hello_world.py                |  5 +-
 tests/TestSuite_hotplug.py                    | 11 +--
 tests/TestSuite_hotplug_mp.py                 |  7 +-
 tests/TestSuite_iavf.py                       | 15 ++--
 tests/TestSuite_iavf_fdir.py                  | 17 ++---
 tests/TestSuite_iavf_flexible_descriptor.py   |  4 +-
 ...tSuite_iavf_package_driver_error_handle.py | 12 +--
 tests/TestSuite_ieee1588.py                   | 11 +--
 tests/TestSuite_inline_ipsec.py               | 11 +--
 tests/TestSuite_interrupt_pmd.py              |  5 +-
 tests/TestSuite_ip_pipeline.py                | 49 ++++++------
 tests/TestSuite_ipfrag.py                     | 14 ++--
 tests/TestSuite_ipgre.py                      | 22 +++---
 tests/TestSuite_ipsec_gw_cryptodev_func.py    |  9 ++-
 tests/TestSuite_ipv4_reassembly.py            |  9 ++-
 ...te_ixgbe_vf_get_extra_queue_information.py | 14 ++--
 tests/TestSuite_jumboframes.py                |  9 ++-
 tests/TestSuite_keep_alive.py                 |  8 +-
 tests/TestSuite_kernelpf_iavf.py              | 17 +++--
 tests/TestSuite_kni.py                        | 11 +--
 tests/TestSuite_l2fwd.py                      |  9 ++-
 tests/TestSuite_l2fwd_cryptodev_func.py       | 20 ++---
 tests/TestSuite_l2fwd_jobstats.py             |  7 +-
 tests/TestSuite_l2tp_esp_coverage.py          |  9 ++-
 tests/TestSuite_l3fwd.py                      |  5 +-
 tests/TestSuite_l3fwd_em.py                   |  5 +-
 tests/TestSuite_l3fwd_lpm_ipv4.py             |  5 +-
 tests/TestSuite_l3fwd_lpm_ipv4_rfc2544.py     |  5 +-
 tests/TestSuite_l3fwd_lpm_ipv6.py             |  5 +-
 tests/TestSuite_l3fwdacl.py                   |  8 +-
 tests/TestSuite_large_vf.py                   |  9 +--
 tests/TestSuite_link_flowctrl.py              | 14 ++--
 tests/TestSuite_link_status_interrupt.py      |  9 ++-
 tests/TestSuite_linux_modules.py              |  5 +-
 tests/TestSuite_loadbalancer.py               |  9 ++-
 ...Suite_loopback_multi_paths_port_restart.py |  9 ++-
 tests/TestSuite_loopback_multi_queues.py      |  9 ++-
 ...tSuite_loopback_virtio_user_server_mode.py |  9 ++-
 tests/TestSuite_mac_filter.py                 | 12 +--
 tests/TestSuite_macsec_for_ixgbe.py           | 11 +--
 ...Suite_malicious_driver_event_indication.py |  9 +--
 tests/TestSuite_mdd.py                        |  9 ++-
 tests/TestSuite_metering_and_policing.py      | 15 ++--
 tests/TestSuite_metrics.py                    | 16 ++--
 tests/TestSuite_mtu_update.py                 | 23 +++---
 tests/TestSuite_multicast.py                  |  5 +-
 tests/TestSuite_multiple_pthread.py           | 11 +--
 tests/TestSuite_multiprocess.py               |  9 ++-
 tests/TestSuite_netmap_compat.py              |  8 +-
 tests/TestSuite_nic_single_core_perf.py       | 16 ++--
 tests/TestSuite_ntb.py                        | 12 +--
 tests/TestSuite_nvgre.py                      | 26 +++----
 tests/TestSuite_packet_capture.py             | 19 +++--
 tests/TestSuite_packet_ordering.py            |  7 +-
 tests/TestSuite_perf_virtio_user_loopback.py  | 15 ++--
 tests/TestSuite_perf_virtio_user_pvp.py       | 11 +--
 tests/TestSuite_perf_vm2vm_virtio_net_perf.py | 19 ++---
 tests/TestSuite_performance_thread.py         |  9 ++-
 tests/TestSuite_pf_smoke.py                   | 19 +++--
 tests/TestSuite_pipeline.py                   | 51 ++++++-------
 tests/TestSuite_pmd.py                        | 21 +++---
 tests/TestSuite_pmd_bonded.py                 | 16 ++--
 tests/TestSuite_pmd_bonded_8023ad.py          | 14 ++--
 tests/TestSuite_pmd_stacked_bonded.py         | 29 ++++----
 tests/TestSuite_pmdpcap.py                    |  9 ++-
 tests/TestSuite_pmdrss_hash.py                |  9 ++-
 tests/TestSuite_pmdrssreta.py                 | 11 ++-
 tests/TestSuite_port_control.py               | 13 ++--
 tests/TestSuite_port_representor.py           | 10 +--
 tests/TestSuite_power_bidirection_channel.py  |  8 +-
 tests/TestSuite_power_branch_ratio.py         | 19 ++---
 tests/TestSuite_power_empty_poll.py           | 12 +--
 tests/TestSuite_power_negative.py             |  8 +-
 tests/TestSuite_power_pbf.py                  | 16 ++--
 tests/TestSuite_power_pstate.py               | 13 ++--
 tests/TestSuite_power_telemetry.py            | 19 ++---
 tests/TestSuite_ptpclient.py                  |  6 +-
 tests/TestSuite_ptype_mapping.py              | 14 ++--
 tests/TestSuite_pvp_diff_qemu_version.py      | 12 +--
 .../TestSuite_pvp_multi_paths_performance.py  | 15 ++--
 ...lti_paths_vhost_single_core_performance.py | 15 ++--
 ...ti_paths_virtio_single_core_performance.py | 15 ++--
 ...Suite_pvp_qemu_multi_paths_port_restart.py | 13 ++--
 tests/TestSuite_pvp_share_lib.py              |  8 +-
 ...uite_pvp_vhost_user_built_in_net_driver.py | 13 ++--
 tests/TestSuite_pvp_vhost_user_reconnect.py   | 11 +--
 tests/TestSuite_pvp_virtio_bonding.py         | 13 ++--
 .../TestSuite_pvp_virtio_user_2M_hugepages.py |  9 ++-
 tests/TestSuite_pvp_virtio_user_4k_pages.py   |  9 ++-
 ...p_virtio_user_multi_queues_port_restart.py | 12 +--
 tests/TestSuite_qinq_filter.py                |  8 +-
 tests/TestSuite_qos_api.py                    | 13 ++--
 tests/TestSuite_qos_meter.py                  | 11 +--
 tests/TestSuite_queue_region.py               | 18 ++---
 tests/TestSuite_queue_start_stop.py           | 13 ++--
 tests/TestSuite_rss_key_update.py             | 10 +--
 tests/TestSuite_rss_to_rte_flow.py            |  8 +-
 tests/TestSuite_rte_flow.py                   | 11 +--
 tests/TestSuite_rteflow_priority.py           | 20 ++---
 tests/TestSuite_runtime_vf_queue_number.py    | 11 +--
 ...estSuite_runtime_vf_queue_number_kernel.py | 10 +--
 ...stSuite_runtime_vf_queue_number_maxinum.py |  9 ++-
 tests/TestSuite_rxtx_callbacks.py             |  5 +-
 tests/TestSuite_rxtx_offload.py               | 18 ++---
 tests/TestSuite_scatter.py                    |  8 +-
 tests/TestSuite_short_live.py                 | 11 +--
 tests/TestSuite_shutdown_api.py               | 20 ++---
 tests/TestSuite_skeleton.py                   |  4 +-
 tests/TestSuite_softnic.py                    | 15 ++--
 tests/TestSuite_speed_capabilities.py         |  6 +-
 tests/TestSuite_sriov_kvm.py                  | 13 ++--
 tests/TestSuite_stats_checks.py               | 16 ++--
 tests/TestSuite_telemetry.py                  | 11 +--
 tests/TestSuite_testpmd_perf.py               |  5 +-
 tests/TestSuite_timer.py                      |  5 +-
 tests/TestSuite_tso.py                        | 14 ++--
 tests/TestSuite_tx_preparation.py             | 18 +++--
 tests/TestSuite_uni_pkt.py                    | 11 +--
 tests/TestSuite_unit_tests_cmdline.py         |  4 +-
 tests/TestSuite_unit_tests_crc.py             |  4 +-
 tests/TestSuite_unit_tests_cryptodev_func.py  |  6 +-
 tests/TestSuite_unit_tests_dump.py            |  4 +-
 tests/TestSuite_unit_tests_eal.py             |  6 +-
 tests/TestSuite_unit_tests_event_timer.py     |  5 +-
 tests/TestSuite_unit_tests_kni.py             |  4 +-
 tests/TestSuite_unit_tests_loopback.py        |  5 +-
 tests/TestSuite_unit_tests_lpm.py             |  4 +-
 tests/TestSuite_unit_tests_mbuf.py            |  4 +-
 tests/TestSuite_unit_tests_mempool.py         |  4 +-
 tests/TestSuite_unit_tests_pmd_perf.py        |  3 +-
 tests/TestSuite_unit_tests_power.py           |  4 +-
 tests/TestSuite_unit_tests_qos.py             |  4 +-
 tests/TestSuite_unit_tests_ring.py            |  4 +-
 tests/TestSuite_unit_tests_ringpmd.py         |  4 +-
 tests/TestSuite_unit_tests_timer.py           |  4 +-
 tests/TestSuite_userspace_ethtool.py          | 20 ++---
 tests/TestSuite_vdev_primary_secondary.py     |  9 ++-
 tests/TestSuite_veb_switch.py                 | 20 ++---
 tests/TestSuite_vf_daemon.py                  | 17 +++--
 tests/TestSuite_vf_interrupt_pmd.py           | 14 ++--
 tests/TestSuite_vf_jumboframe.py              | 14 ++--
 tests/TestSuite_vf_kernel.py                  | 18 ++---
 tests/TestSuite_vf_l3fwd.py                   | 13 ++--
 tests/TestSuite_vf_l3fwd_em_kernelpf.py       | 12 ++-
 tests/TestSuite_vf_l3fwd_kernelpf.py          | 12 ++-
 tests/TestSuite_vf_l3fwd_lpm_ipv4_kernelpf.py | 12 ++-
 ...uite_vf_l3fwd_lpm_ipv4_rfc2544_kernelpf.py | 12 ++-
 tests/TestSuite_vf_l3fwd_lpm_ipv6_kernelpf.py | 12 ++-
 tests/TestSuite_vf_macfilter.py               |  6 +-
 tests/TestSuite_vf_offload.py                 | 19 ++---
 tests/TestSuite_vf_packet_rxtx.py             |  8 +-
 tests/TestSuite_vf_port_start_stop.py         |  9 ++-
 tests/TestSuite_vf_rss.py                     | 10 ++-
 tests/TestSuite_vf_single_core_perf.py        | 13 ++--
 tests/TestSuite_vf_smoke.py                   | 19 +++--
 tests/TestSuite_vf_to_vf_nic_bridge.py        | 10 +--
 tests/TestSuite_vf_vlan.py                    | 12 +--
 tests/TestSuite_vhost_1024_ethports.py        |  4 +-
 tests/TestSuite_vhost_cbdma.py                | 15 ++--
 tests/TestSuite_vhost_event_idx_interrupt.py  |  9 ++-
 tests/TestSuite_vhost_multi_queue_qemu.py     | 15 ++--
 tests/TestSuite_vhost_pmd_xstats.py           | 18 +++--
 tests/TestSuite_vhost_user_interrupt.py       |  7 +-
 tests/TestSuite_vhost_user_live_migration.py  | 11 +--
 tests/TestSuite_vhost_virtio_pmd_interrupt.py | 13 ++--
 .../TestSuite_vhost_virtio_user_interrupt.py  |  5 +-
 tests/TestSuite_virtio_event_idx_interrupt.py | 11 +--
 .../TestSuite_virtio_ipsec_cryptodev_func.py  | 16 ++--
 tests/TestSuite_virtio_perf_cryptodev_func.py | 10 ++-
 tests/TestSuite_virtio_pvp_regression.py      | 11 +--
 tests/TestSuite_virtio_smoke.py               |  6 +-
 tests/TestSuite_virtio_unit_cryptodev_func.py | 10 ++-
 ...stSuite_virtio_user_as_exceptional_path.py | 12 +--
 ...te_virtio_user_for_container_networking.py |  9 ++-
 tests/TestSuite_vlan.py                       |  9 +--
 tests/TestSuite_vlan_ethertype_config.py      | 20 ++---
 tests/TestSuite_vm2vm_virtio_net_perf.py      | 13 ++--
 tests/TestSuite_vm2vm_virtio_pmd.py           | 12 +--
 tests/TestSuite_vm2vm_virtio_user.py          |  9 ++-
 tests/TestSuite_vm_hotplug.py                 |  7 +-
 tests/TestSuite_vm_power_manager.py           | 11 +--
 tests/TestSuite_vm_pw_mgmt_policy.py          | 22 +++---
 tests/TestSuite_vmdq.py                       |  9 ++-
 tests/TestSuite_vmdq_dcb.py                   | 11 +--
 tests/TestSuite_vswitch_sample_cbdma.py       | 19 ++---
 tests/TestSuite_vxlan.py                      | 30 ++++----
 tests/TestSuite_vxlan_gpe_support_in_i40e.py  | 16 ++--
 tests/__init__.py                             | 30 ++++++++
 tests/bonding.py                              | 14 ++--
 tests/compress_common.py                      |  5 +-
 tests/cryptodev_common.py                     |  4 +-
 tests/flexible_common.py                      |  7 +-
 tests/perf_test_base.py                       | 27 ++++---
 tests/rte_flow_common.py                      |  7 +-
 tests/smoke_base.py                           |  3 +-
 tests/vhost_peer_conf.py                      |  2 +-
 tools/__init__.py                             | 30 ++++++++
 tools/dump_case.py                            | 14 ++--
 tools/parse_opt.py                            |  2 +-
 tools/setup.py                                | 16 ++--
 336 files changed, 2378 insertions(+), 1886 deletions(-)
 create mode 100644 dep/__init__.py
 create mode 100644 dep/scapy_modules/__init__.py
 create mode 100644 framework/__init__.py
 rename framework/main.py => main.py (96%)
 create mode 100644 nics/__init__.py
 create mode 100644 pyproject.toml
 create mode 100644 tests/__init__.py
 create mode 100644 tools/__init__.py

Comments

Tu, Lijuan Sept. 16, 2021, 2:33 a.m. UTC | #1
Hi Juraj,

Could you please kindly generate v4 based on latest DTS main branch.
Intel is trying to test it ,but found a lot of conflict, and it's not easy to fix them one by one.



> -----Original Message-----
> From: Juraj Linkeš <juraj.linkes@pantheon.tech>
> Sent: 2021年9月10日 21:42
> To: Tu, Lijuan <lijuan.tu@intel.com>; ohilyard@iol.unh.edu
> Cc: dts@dpdk.org; Juraj Linkeš <juraj.linkes@pantheon.tech>
> Subject: [PATCH v3] python: standard project structure
> 
> DTS does not use the standard project structure and therefore has to add
> paths to python interpreter search paths. Move to a standard structure:
> * Move main.py to the root directory.
> * Add __init__.py to directories from which python modules are imported.
> * Adjust import paths to account for this new structure.
> 
> Moving to a standard structure has a host of positives, such as:
> * No need to study any non-standard approaches. This removes any
> bewilderment the developers may feel when encountering something
> non-standard without proper justification (as is the case with DTS).
> * Better integration with IDEs which rely on the standard structure.
> * More accurate results from automated tools.
> 
> In addition to this, not only adjust the import paths but make then
> explicit for modules imported from the same level, e.g. instead of using
> from foo import, use from .foo import (and import bar.foo as foo, where
> foo if on the same level as the importing module). This allows
> developers to separate DTS modules from third party modules at a glance.
> 
> Also sort the import using the isort tool. Add config using the "black"
> profile for isort to facilitate interoperability with Black.
> 
> Signed-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech>
> ---
> v3: addressed dynamic imports, reverted Dot1BR import in packet.py and
> made dynamic imports therein more readable.
diff mbox series

Patch

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 88ae8ea5..e24c6225 100644
--- a/framework/config.py
+++ b/framework/config.py
@@ -32,14 +32,28 @@ 
 """
 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 (IXIA, 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,
+    IXIA,
+    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
diff --git a/framework/crb.py b/framework/crb.py
index 3964e213..e80ed499 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, IXIA
-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 IXIA, 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/crbs.py b/framework/crbs.py
index 2ff937ac..40587fcb 100644
--- a/framework/crbs.py
+++ b/framework/crbs.py
@@ -1,7 +1,7 @@ 
 """
 Static configuration data for any CRBs that can be used.
 """
-from settings import IXIA
+from .settings import IXIA
 
 crbs_desc = {
     'CrownPassCRB1':
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 6f621a51..68886db6 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)
@@ -451,7 +456,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)
@@ -530,9 +535,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/etgen.py b/framework/etgen.py
index acfa2960..3068eb39 100644
--- a/framework/etgen.py
+++ b/framework/etgen.py
@@ -32,12 +32,13 @@ 
 import re
 import string
 import time
-from config import IxiaConf
-from ssh_connection import SSHConnection
-from settings import SCAPY2IXIA
-from logger import getLogger
-from exception import VerifyFailure
-from utils import create_mask
+
+from .config import IxiaConf
+from .exception import VerifyFailure
+from .logger import getLogger
+from .settings import SCAPY2IXIA
+from .ssh_connection import SSHConnection
+from .utils import create_mask
 
 
 class SoftwarePacketGenerator():
diff --git a/framework/flow/flow.py b/framework/flow/flow.py
index 2cce0796..c991ef20 100644
--- a/framework/flow/flow.py
+++ b/framework/flow/flow.py
@@ -36,15 +36,15 @@  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 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="") / ('\x00' * 64)
diff --git a/framework/flow/flow_action_items.py b/framework/flow/flow_action_items.py
index b08272f9..f59b4de3 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 bb143067..9cf11ffb 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 0fe52b2b..34d6659b 100644
--- a/framework/flow/generator.py
+++ b/framework/flow/generator.py
@@ -36,15 +36,27 @@  import itertools
 import os
 import sys
 import time
-from typing import List, Set, Generator, Iterable, FrozenSet, Tuple
+from typing import FrozenSet, Generator, Iterable, List, Set, Tuple
 
 import numpy as np
 
-from flow.flow import Flow
-from flow.flow_pattern_items import PATTERN_ITEMS_TYPE_CLASS_MAPPING, PatternFlowItem, \
-    PATTERN_OPERATION_TYPES, TUNNELING_PROTOCOL_TYPES, ALWAYS_ALLOWED_ITEMS, FlowItemEnd, FlowItemVxlan, FlowItemIpv4, \
-    FlowItemEth, FlowItemGre, L3_FLOW_TYPES, FlowItemVlan, 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,
+    TUNNELING_PROTOCOL_TYPES,
+    FlowItemEnd,
+    FlowItemEth,
+    FlowItemGre,
+    FlowItemIpv4,
+    FlowItemUdp,
+    FlowItemVlan,
+    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 63e1d831..08dcd057 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 d96f8d63..21c63fa9 100644
--- a/framework/project_dpdk.py
+++ b/framework/project_dpdk.py
@@ -32,16 +32,26 @@ 
 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 IXIA, 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,
+    IXIA,
+    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):
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 fe7c01b5..8b8c1f62 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 ec233b8a..37b3f1bd 100644
--- a/framework/tester.py
+++ b/framework/tester.py
@@ -33,23 +33,39 @@ 
 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 IXIA, USERNAME, PKTGEN, PKTGEN_GRP
-from crb import Crb
-from net_device import GetNicObj
-from etgen import IxiaPacketGenerator, SoftwarePacketGenerator
 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 .etgen import IxiaPacketGenerator, SoftwarePacketGenerator
+from .exception import ParameterInvalidException
+from .packet import (
+    SCAPY_IMP_CMD,
+    Packet,
+    compare_pktload,
+    start_tcpdump,
+    stop_and_load_tcpdump_packets,
+    strip_pktload,
+)
+from .pktgen import getPacketGenerator
+from .settings import (
+    IXIA,
+    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):
 
@@ -736,11 +752,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
@@ -749,13 +760,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
@@ -779,10 +790,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):
@@ -815,11 +826,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
@@ -842,19 +853,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 40a3d416..a84923ff 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 eee09105..27c32d35 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 a7003b38..90b77199 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 5d5d7eea..68040937 100755
--- a/tests/TestSuite_cvl_advanced_iavf_rss_gtpogre.py
+++ b/tests/TestSuite_cvl_advanced_iavf_rss_gtpogre.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
-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="00:11:22:33:44:55")/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_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 da756ac1..78efb36b 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 f1f4fe43..abf9ede6 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 2d3e226e..140e691e 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 1d516fcf..ee867d57 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 dd7e0109..d88efd5c 100644
--- 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 052e97b7..98ee1ce5 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 357e7fa9..0a80ac4e 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 0c3a1917..01e66f80 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 b0e41a1b..5cd3d543 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 acf8e78e..7a52ab7b 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 5ec8b184..cce87bbc 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 c2949546..93aeeb69 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 b8645a61..94b5c063 100644
--- 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 cd88977d..f52b2527 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 787733ca..04666a0f 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_etag.py b/tests/TestSuite_etag.py
index f165c91d..daba6888 100644
--- a/tests/TestSuite_etag.py
+++ b/tests/TestSuite_etag.py
@@ -35,18 +35,17 @@  DPDK Test suite.
 '''
 
 import re
-import time
 import sys
-
-import utils
-from qemu_kvm import QEMUKvm
-from test_case import TestCase
-from pmd_output import PmdOutput
-from exception import VerifyFailure
+import time
 
 from scapy.utils import rdpcap
 
-from packet import Packet
+import framework.utils as utils
+from framework.exception import VerifyFailure
+from framework.packet import Packet
+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_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 fd142e89..be5259a8 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 etgen import IxiaPacketGenerator
 
-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.etgen import IxiaPacketGenerator
+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,IxiaPacketGenerator):
 
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 361b47ee..32af44e9 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 etgen import IxiaPacketGenerator
 
-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.etgen import IxiaPacketGenerator
+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,IxiaPacketGenerator):
 
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 007db26d..fcfe1158 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 etgen import IxiaPacketGenerator
-from test_case import TestCase
-from settings import HEADER_SIZE
-from pmd_output import PmdOutput
+from scapy.utils import PcapWriter, socket, struct
 
-import sys
-import imp
+import framework.utils as utils
+from framework.etgen import IxiaPacketGenerator
+from framework.pmd_output import PmdOutput
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
 
 
 class TestFdir(TestCase, IxiaPacketGenerator):
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 3ebd5139..6897725e 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 f542b667..94cafd54 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 e8171589..8b4bdb5d 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
 MAX_VFQUEUE = 3
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 9656b4fc..b59a8812 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 d79829ea..b34a5646 100644
--- 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_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 57db70f4..e0145ac4 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 5db1ec00..7ed9b745 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 2e8c282e..843d59c9 100644
--- 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_loadbalancer.py b/tests/TestSuite_loadbalancer.py
index 84e534c9..76723c9b 100644
--- a/tests/TestSuite_loadbalancer.py
+++ b/tests/TestSuite_loadbalancer.py
@@ -36,12 +36,13 @@  Test Load Balancer.
 
 """
 
-import dts
-from packet import Packet
-from test_case import TestCase
-import utils
 import time
 
+import framework.dts as dts
+import framework.utils as utils
+from framework.packet import Packet
+from framework.test_case import TestCase
+
 
 class TestLoadbalancer(TestCase):
 
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 f1da8660..911cf512 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 8d9dc3f7..436c0cef 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 743ca1f3..f1ce0bf3 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_netmap_compat.py b/tests/TestSuite_netmap_compat.py
index 31fa684c..c9e151ee 100644
--- a/tests/TestSuite_netmap_compat.py
+++ b/tests/TestSuite_netmap_compat.py
@@ -35,11 +35,13 @@  DPDK Test suite.
 Test Netmap_compat.
 """
 
-import utils
+import re
 import string
 import time
-import re
-from test_case import TestCase
+
+import framework.utils as utils
+from framework.test_case import TestCase
+
 
 class TestNetmapCompat(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 e5013132..de21383f 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 807a3c0d..5e66d479 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_virtio_user_pvp.py b/tests/TestSuite_perf_virtio_user_pvp.py
index 344dba5a..4b80a5c6 100644
--- a/tests/TestSuite_perf_virtio_user_pvp.py
+++ b/tests/TestSuite_perf_virtio_user_pvp.py
@@ -32,17 +32,18 @@ 
 """
 DPDK Test suite.
 """
-import utils
 import json
-import rst
 import os
 import re
 import time
-from test_case import TestCase
-from packet import Packet
-from settings import UPDATE_EXPECTED, load_global_setting
 from copy import deepcopy
 
+import framework.rst as rst
+import framework.utils as utils
+from framework.packet import Packet
+from framework.settings import UPDATE_EXPECTED, load_global_setting
+from framework.test_case import TestCase
+
 
 class TestVirtioSingleCorePerf(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 3ff20150..59468f66 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 48d35831..07bb1001 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 e8d96f5a..c26b1d36 100644
--- 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 f6d41491..069e8a1f 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 11db11ee..b52091de 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 d26b2719..a9b4741a 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 03c5a3ce..5a0397ab 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_built_in_net_driver.py b/tests/TestSuite_pvp_vhost_user_built_in_net_driver.py
index a0d16671..ecd3ef1f 100644
--- a/tests/TestSuite_pvp_vhost_user_built_in_net_driver.py
+++ b/tests/TestSuite_pvp_vhost_user_built_in_net_driver.py
@@ -33,13 +33,14 @@ 
 DPDK Test suite.
 """
 
-import utils
-import time
 import re
-from test_case import TestCase
-from settings import HEADER_SIZE
-from pktgen import PacketGeneratorHelper
-from pmd_output import PmdOutput
+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 TestPVPVhostUserBuiltInNetDriver(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 0cc9830f..d654af7d 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
-
+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 353dc8f9..c9a117b3 100644
--- a/tests/TestSuite_rteflow_priority.py
+++ b/tests/TestSuite_rteflow_priority.py
@@ -35,19 +35,21 @@  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 etgen import IxiaPacketGenerator
-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.etgen import IxiaPacketGenerator
+from framework.pmd_output import PmdOutput
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
+
 imp.reload(sys)
 
 
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 3daf2347..0e290cc0 100644
--- 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 0e70526f..4ccfe967 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 5dc21b6d..8f9dca01 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 fd65d718..c90b3e6c 100644
--- 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 etgen import IxiaPacketGenerator
-from settings import HEADER_SIZE
-from settings import SCAPY2IXIA
-from utils import RED
-from exception import VerifyFailure
+import re
+import time
+
+import framework.utils as utils
+from framework.etgen import IxiaPacketGenerator
+from framework.exception import VerifyFailure
+from framework.packet import Packet
+from framework.settings import HEADER_SIZE, SCAPY2IXIA
+from framework.test_case import TestCase
+from framework.utils import RED
 
 
 class TestUserspaceEthtool(TestCase, IxiaPacketGenerator):
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 cdd2b3c4..b66448e7 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 4a16134b..d903e194 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 16fef645..975ea55e 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 675a15ee..3d62d8b7 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 37634f05..8b9a8037 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 0fca14ab..b66d76e1 100644
--- a/tests/TestSuite_virtio_user_for_container_networking.py
+++ b/tests/TestSuite_virtio_user_for_container_networking.py
@@ -34,11 +34,12 @@  DPDK Test suite.
 Virtio user for container networking
 """
 
-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 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 fca122bb..2df77b93 100644
--- a/tests/TestSuite_vm_power_manager.py
+++ b/tests/TestSuite_vm_power_manager.py
@@ -35,11 +35,12 @@  VM power manager test suite.
 """
 
 import re
-import utils
-from test_case import TestCase
-from etgen import IxiaPacketGenerator
-from settings import HEADER_SIZE
-from qemu_libvirt import LibvirtKvm
+
+import framework.utils as utils
+from framework.etgen import IxiaPacketGenerator
+from framework.qemu_libvirt import LibvirtKvm
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
 
 
 class TestVmPowerManager(TestCase, IxiaPacketGenerator):
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 3f2ccde2..dec4726a 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 5f0da0fb..96741de1 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 fdb6616d..6ad939a4 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 test_case import TestCase
-from settings import HEADER_SIZE, FOLDERS
-from etgen import IxiaPacketGenerator
-import packet
+from scapy.sendrecv import sniff
+from scapy.utils import rdpcap, wrpcap
+
+import framework.packet as packet
+import framework.utils as utils
+from framework.etgen import IxiaPacketGenerator
+from framework.packet import IncreaseIP, IncreaseIPv6
+from framework.pmd_output import PmdOutput
+from framework.settings import FOLDERS, HEADER_SIZE
+from framework.test_case import TestCase
 
 #
 #
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