test suite reviews and discussions
 help / color / mirror / Atom feed
* [dts] [PATCH v1] python: standard project structure
@ 2021-08-24 11:34 Juraj Linkeš
  2021-08-24 13:46 ` Owen Hilyard
  2021-08-27 13:03 ` [dts] [PATCH v2] " Juraj Linkeš
  0 siblings, 2 replies; 12+ messages in thread
From: Juraj Linkeš @ 2021-08-24 11:34 UTC (permalink / raw)
  To: lijuan.tu, ohilyard; +Cc: dts, Juraj Linkeš

DTS does not use the standard project structure and has therefore add
paths to python interpreter search paths. Move to a standard structure:
* Move main.py to the root directory (and consequently remove the
redundant dts shell script).
* 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.

Signed-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech>
---
There a number of question/notes I have about this patch:
1. Should we do the explicit import paths?
2. If so, do we want to enforce it (for new patches)? How (is there a
tool that check that or just manually in review)?
3. Some paths might not have been moved to the explicit format, as I may
have missed them.
4. I did not test the patch as I don't have access to an environment in
which I could do so. Is there a way to test it locally (i.e. without any
hw dependencies)?
5. Do we want to sort imports?
6. If so, how? Do we want to do it in this patch?
---
 dep/__init__.py                               | 30 ++++++++++++++++
 dep/scapy_modules/__init__.py                 | 30 ++++++++++++++++
 dts                                           |  7 ----
 framework/__init__.py                         | 30 ++++++++++++++++
 framework/checkCase.py                        |  4 +--
 framework/config.py                           |  6 ++--
 framework/crb.py                              | 12 +++----
 framework/crbs.py                             |  2 +-
 framework/debugger.py                         | 10 +++---
 framework/dts.py                              | 36 +++++++++----------
 framework/dut.py                              | 16 ++++-----
 framework/etgen.py                            | 12 +++----
 framework/flow/flow.py                        | 10 +++---
 framework/flow/flow_action_items.py           |  4 +--
 framework/flow/flow_items.py                  | 10 +++---
 framework/flow/flow_pattern_items.py          |  8 ++---
 framework/flow/flow_rule.py                   |  6 ++--
 framework/flow/generator.py                   |  6 ++--
 framework/ixia_network/ixnet_stream.py        |  2 +-
 framework/logger.py                           |  4 +--
 framework/multiple_vm.py                      |  8 ++---
 framework/packet.py                           | 26 ++++----------
 framework/pktgen.py                           | 12 +++----
 framework/pktgen_base.py                      |  6 ++--
 framework/pktgen_ixia.py                      |  8 ++---
 framework/pktgen_ixia_network.py              |  2 +-
 framework/pktgen_trex.py                      |  2 +-
 framework/plotting.py                         | 10 +++---
 framework/pmd_output.py                       |  4 +--
 framework/project_dpdk.py                     | 20 +++++------
 framework/qemu_kvm.py                         | 10 +++---
 framework/qemu_libvirt.py                     | 18 +++++-----
 framework/rst.py                              |  4 +--
 framework/ssh_connection.py                   |  2 +-
 framework/ssh_pexpect.py                      |  6 ++--
 framework/test_case.py                        | 22 ++++++------
 framework/test_result.py                      |  2 +-
 framework/tester.py                           | 20 +++++------
 framework/virt_base.py                        | 16 ++++-----
 framework/virt_common.py                      |  8 ++---
 framework/virt_dut.py                         | 16 ++++-----
 framework/virt_resource.py                    |  2 +-
 framework/virt_scene.py                       | 18 +++++-----
 framework/main.py => main.py                  |  7 +---
 nics/__init__.py                              | 30 ++++++++++++++++
 nics/net_device.py                            |  8 ++---
 nics/perf_report.py                           | 10 +++---
 tests/TestSuite_ABI_stable.py                 |  8 ++---
 tests/TestSuite_acl.py                        |  2 +-
 tests/TestSuite_af_xdp_2.py                   |  8 ++---
 tests/TestSuite_blocklist.py                  |  8 ++---
 tests/TestSuite_cbdma.py                      | 10 +++---
 tests/TestSuite_checksum_offload.py           | 24 ++++++-------
 tests/TestSuite_cloud_filter_with_l4_port.py  | 16 ++++-----
 tests/TestSuite_cmdline.py                    |  4 +--
 tests/TestSuite_compressdev_isal_pmd.py       |  4 +--
 tests/TestSuite_compressdev_qat_pmd.py        |  4 +--
 tests/TestSuite_compressdev_zlib_pmd.py       |  4 +--
 tests/TestSuite_coremask.py                   |  6 ++--
 tests/TestSuite_crypto_perf_cryptodev_perf.py |  4 +--
 tests/TestSuite_cvl_advanced_iavf_rss.py      |  8 ++---
 ...TestSuite_cvl_advanced_iavf_rss_gtpogre.py |  8 ++---
 tests/TestSuite_cvl_advanced_iavf_rss_gtpu.py |  8 ++---
 ...advanced_iavf_rss_vlan_esp_ah_l2tp_pfcp.py | 10 +++---
 tests/TestSuite_cvl_advanced_rss.py           |  8 ++---
 tests/TestSuite_cvl_advanced_rss_gtpogre.py   |  8 ++---
 tests/TestSuite_cvl_advanced_rss_gtpu.py      |  8 ++---
 tests/TestSuite_cvl_advanced_rss_pppoe.py     |  8 ++---
 ..._cvl_advanced_rss_vlan_esp_ah_l2tp_pfcp.py | 10 +++---
 tests/TestSuite_cvl_dcf_acl_filter.py         | 10 +++---
 tests/TestSuite_cvl_dcf_date_path.py          |  6 ++--
 tests/TestSuite_cvl_dcf_flow_priority.py      | 10 +++---
 tests/TestSuite_cvl_dcf_switch_filter.py      | 10 +++---
 tests/TestSuite_cvl_dcf_switch_filter_gtpu.py | 10 +++---
 .../TestSuite_cvl_dcf_switch_filter_pppoe.py  | 10 +++---
 tests/TestSuite_cvl_ecpri.py                  | 12 +++----
 tests/TestSuite_cvl_fdir.py                   | 12 +++----
 ...TestSuite_cvl_iavf_ip_fragment_rte_flow.py | 10 +++---
 tests/TestSuite_cvl_iavf_rss_configure.py     |  8 ++---
 tests/TestSuite_cvl_ip_fragment_rte_flow.py   | 10 +++---
 tests/TestSuite_cvl_limit_value_test.py       | 12 +++----
 tests/TestSuite_cvl_qinq.py                   | 10 +++---
 tests/TestSuite_cvl_rss_configure.py          | 12 +++----
 tests/TestSuite_cvl_switch_filter.py          | 10 +++---
 tests/TestSuite_cvl_switch_filter_pppoe.py    | 10 +++---
 ...tSuite_cvl_vf_support_multicast_address.py |  6 ++--
 tests/TestSuite_dcf_lifecycle.py              | 12 +++----
 tests/TestSuite_ddp_gtp.py                    | 10 +++---
 tests/TestSuite_ddp_gtp_qregion.py            | 10 +++---
 tests/TestSuite_ddp_l2tpv3.py                 |  4 +--
 tests/TestSuite_ddp_mpls.py                   | 10 +++---
 tests/TestSuite_ddp_ppp_l2tp.py               |  8 ++---
 tests/TestSuite_distributor.py                |  6 ++--
 tests/TestSuite_dpdk_gro_lib.py               |  8 ++---
 tests/TestSuite_dpdk_gso_lib.py               | 10 +++---
 tests/TestSuite_dpdk_hugetlbfs_mount_size.py  |  4 +--
 tests/TestSuite_dual_vlan.py                  |  6 ++--
 tests/TestSuite_dynamic_config.py             |  6 ++--
 tests/TestSuite_dynamic_flowtype.py           |  8 ++---
 tests/TestSuite_dynamic_queue.py              | 10 +++---
 tests/TestSuite_eeprom_dump.py                |  6 ++--
 tests/TestSuite_efd.py                        |  6 ++--
 ...e_enable_package_download_in_ice_driver.py |  4 +--
 tests/TestSuite_etag.py                       | 12 +++----
 tests/TestSuite_ethtool_stats.py              | 12 +++----
 tests/TestSuite_eventdev_perf.py              | 16 ++++-----
 tests/TestSuite_eventdev_pipeline.py          |  6 ++--
 tests/TestSuite_eventdev_pipeline_perf.py     | 16 ++++-----
 tests/TestSuite_example_build.py              |  2 +-
 tests/TestSuite_external_memory.py            |  4 +--
 tests/TestSuite_external_mempool_handler.py   |  6 ++--
 tests/TestSuite_fdir.py                       | 10 +++---
 tests/TestSuite_fips_cryptodev.py             |  6 ++--
 tests/TestSuite_firmware_version.py           |  4 +--
 tests/TestSuite_flexible_rxd.py               |  6 ++--
 tests/TestSuite_floating_veb.py               | 16 ++++-----
 tests/TestSuite_flow_classify.py              | 10 +++---
 tests/TestSuite_flow_classify_softnic.py      | 22 ++++++------
 tests/TestSuite_flow_filtering.py             |  8 ++---
 ...tSuite_fortville_rss_granularity_config.py |  8 ++---
 tests/TestSuite_fortville_rss_input.py        |  8 ++---
 tests/TestSuite_generic_filter.py             | 10 +++---
 tests/TestSuite_generic_flow_api.py           | 22 ++++++------
 tests/TestSuite_hello_world.py                |  4 +--
 tests/TestSuite_hotplug.py                    |  6 ++--
 tests/TestSuite_hotplug_mp.py                 |  4 +--
 tests/TestSuite_iavf.py                       | 12 +++----
 tests/TestSuite_iavf_fdir.py                  | 14 ++++----
 tests/TestSuite_iavf_flexible_descriptor.py   |  4 +--
 ...tSuite_iavf_package_driver_error_handle.py |  6 ++--
 tests/TestSuite_ieee1588.py                   |  8 ++---
 tests/TestSuite_inline_ipsec.py               |  4 +--
 tests/TestSuite_interrupt_pmd.py              |  4 +--
 tests/TestSuite_ip_pipeline.py                | 22 ++++++------
 tests/TestSuite_ipfrag.py                     | 10 +++---
 tests/TestSuite_ipgre.py                      | 10 +++---
 tests/TestSuite_ipsec_gw_cryptodev_func.py    |  8 ++---
 tests/TestSuite_ipv4_reassembly.py            |  4 +--
 ...te_ixgbe_vf_get_extra_queue_information.py | 10 +++---
 tests/TestSuite_jumboframes.py                |  8 ++---
 tests/TestSuite_keep_alive.py                 |  4 +--
 tests/TestSuite_kernelpf_iavf.py              | 14 ++++----
 tests/TestSuite_kni.py                        |  8 ++---
 tests/TestSuite_l2fwd.py                      |  8 ++---
 tests/TestSuite_l2fwd_cryptodev_func.py       |  8 ++---
 tests/TestSuite_l2fwd_jobstats.py             |  4 +--
 tests/TestSuite_l2tp_esp_coverage.py          |  8 ++---
 tests/TestSuite_l3fwd.py                      |  4 +--
 tests/TestSuite_l3fwd_em.py                   |  4 +--
 tests/TestSuite_l3fwd_lpm_ipv4.py             |  4 +--
 tests/TestSuite_l3fwd_lpm_ipv4_rfc2544.py     |  4 +--
 tests/TestSuite_l3fwd_lpm_ipv6.py             |  4 +--
 tests/TestSuite_l3fwdacl.py                   |  6 ++--
 tests/TestSuite_large_vf.py                   |  8 ++---
 tests/TestSuite_link_flowctrl.py              | 10 +++---
 tests/TestSuite_link_status_interrupt.py      |  6 ++--
 tests/TestSuite_linux_modules.py              |  4 +--
 tests/TestSuite_loadbalancer.py               |  8 ++---
 ...Suite_loopback_multi_paths_port_restart.py |  6 ++--
 tests/TestSuite_loopback_multi_queues.py      |  6 ++--
 ...tSuite_loopback_virtio_user_server_mode.py |  6 ++--
 tests/TestSuite_mac_filter.py                 |  8 ++---
 tests/TestSuite_macsec_for_ixgbe.py           |  8 ++---
 ...Suite_malicious_driver_event_indication.py |  8 ++---
 tests/TestSuite_mdd.py                        |  8 ++---
 tests/TestSuite_metering_and_policing.py      | 12 +++----
 tests/TestSuite_metrics.py                    | 14 ++++----
 tests/TestSuite_mtu_update.py                 | 18 +++++-----
 tests/TestSuite_multicast.py                  |  4 +--
 tests/TestSuite_multiple_pthread.py           |  6 ++--
 tests/TestSuite_multiprocess.py               |  6 ++--
 tests/TestSuite_netmap_compat.py              |  4 +--
 tests/TestSuite_nic_single_core_perf.py       | 14 ++++----
 tests/TestSuite_ntb.py                        | 10 +++---
 tests/TestSuite_nvgre.py                      | 10 +++---
 tests/TestSuite_packet_capture.py             |  8 ++---
 tests/TestSuite_packet_ordering.py            |  6 ++--
 tests/TestSuite_perf_virtio_user_loopback.py  | 10 +++---
 tests/TestSuite_perf_virtio_user_pvp.py       | 10 +++---
 tests/TestSuite_perf_vm2vm_virtio_net_perf.py | 10 +++---
 tests/TestSuite_performance_thread.py         |  8 ++---
 tests/TestSuite_pf_smoke.py                   | 16 ++++-----
 tests/TestSuite_pipeline.py                   | 22 ++++++------
 tests/TestSuite_pmd.py                        | 16 ++++-----
 tests/TestSuite_pmd_bonded.py                 | 10 +++---
 tests/TestSuite_pmd_bonded_8023ad.py          |  8 ++---
 tests/TestSuite_pmd_stacked_bonded.py         | 10 +++---
 tests/TestSuite_pmdpcap.py                    |  4 +--
 tests/TestSuite_pmdrss_hash.py                |  4 +--
 tests/TestSuite_pmdrssreta.py                 |  6 ++--
 tests/TestSuite_port_control.py               | 10 +++---
 tests/TestSuite_port_representor.py           |  8 ++---
 tests/TestSuite_power_bidirection_channel.py  |  8 ++---
 tests/TestSuite_power_branch_ratio.py         | 18 +++++-----
 tests/TestSuite_power_empty_poll.py           | 12 +++----
 tests/TestSuite_power_negative.py             |  8 ++---
 tests/TestSuite_power_pbf.py                  | 12 +++----
 tests/TestSuite_power_pstate.py               |  8 ++---
 tests/TestSuite_power_telemetry.py            | 18 +++++-----
 tests/TestSuite_ptpclient.py                  |  4 +--
 tests/TestSuite_ptype_mapping.py              | 10 +++---
 tests/TestSuite_pvp_diff_qemu_version.py      | 10 +++---
 .../TestSuite_pvp_multi_paths_performance.py  | 14 ++++----
 ...lti_paths_vhost_single_core_performance.py | 14 ++++----
 ...ti_paths_virtio_single_core_performance.py | 14 ++++----
 ...Suite_pvp_qemu_multi_paths_port_restart.py | 10 +++---
 tests/TestSuite_pvp_share_lib.py              |  8 ++---
 ...uite_pvp_vhost_user_built_in_net_driver.py | 10 +++---
 tests/TestSuite_pvp_vhost_user_reconnect.py   | 10 +++---
 tests/TestSuite_pvp_virtio_bonding.py         | 12 +++----
 .../TestSuite_pvp_virtio_user_2M_hugepages.py |  8 ++---
 tests/TestSuite_pvp_virtio_user_4k_pages.py   |  8 ++---
 ...p_virtio_user_multi_queues_port_restart.py |  8 ++---
 tests/TestSuite_qinq_filter.py                |  6 ++--
 tests/TestSuite_qos_api.py                    |  8 ++---
 tests/TestSuite_qos_meter.py                  | 10 +++---
 tests/TestSuite_queue_region.py               | 16 ++++-----
 tests/TestSuite_queue_start_stop.py           |  8 ++---
 tests/TestSuite_rss_key_update.py             |  6 ++--
 tests/TestSuite_rss_to_rte_flow.py            |  6 ++--
 tests/TestSuite_rte_flow.py                   |  8 ++---
 tests/TestSuite_rteflow_priority.py           | 10 +++---
 tests/TestSuite_runtime_vf_queue_number.py    |  8 ++---
 ...estSuite_runtime_vf_queue_number_kernel.py | 10 +++---
 ...stSuite_runtime_vf_queue_number_maxinum.py |  4 +--
 tests/TestSuite_rxtx_callbacks.py             |  4 +--
 tests/TestSuite_rxtx_offload.py               | 16 ++++-----
 tests/TestSuite_scatter.py                    |  6 ++--
 tests/TestSuite_short_live.py                 |  6 ++--
 tests/TestSuite_shutdown_api.py               | 16 ++++-----
 tests/TestSuite_skeleton.py                   |  4 +--
 tests/TestSuite_softnic.py                    | 10 +++---
 tests/TestSuite_speed_capabilities.py         |  6 ++--
 tests/TestSuite_sriov_kvm.py                  |  8 ++---
 tests/TestSuite_stats_checks.py               |  8 ++---
 tests/TestSuite_telemetry.py                  |  6 ++--
 tests/TestSuite_testpmd_perf.py               |  4 +--
 tests/TestSuite_timer.py                      |  4 +--
 tests/TestSuite_tso.py                        | 10 +++---
 tests/TestSuite_tx_preparation.py             | 12 +++----
 tests/TestSuite_uni_pkt.py                    | 10 +++---
 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             |  4 +--
 tests/TestSuite_unit_tests_event_timer.py     |  4 +--
 tests/TestSuite_unit_tests_kni.py             |  4 +--
 tests/TestSuite_unit_tests_loopback.py        |  4 +--
 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        |  2 +-
 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          | 16 ++++-----
 tests/TestSuite_vdev_primary_secondary.py     |  6 ++--
 tests/TestSuite_veb_switch.py                 | 20 +++++------
 tests/TestSuite_vf_daemon.py                  | 12 +++----
 tests/TestSuite_vf_interrupt_pmd.py           |  8 ++---
 tests/TestSuite_vf_jumboframe.py              | 14 ++++----
 tests/TestSuite_vf_kernel.py                  | 12 +++----
 tests/TestSuite_vf_l3fwd.py                   | 10 +++---
 tests/TestSuite_vf_l3fwd_em_kernelpf.py       |  4 +--
 tests/TestSuite_vf_l3fwd_kernelpf.py          |  4 +--
 tests/TestSuite_vf_l3fwd_lpm_ipv4_kernelpf.py |  4 +--
 ...uite_vf_l3fwd_lpm_ipv4_rfc2544_kernelpf.py |  4 +--
 tests/TestSuite_vf_l3fwd_lpm_ipv6_kernelpf.py |  4 +--
 tests/TestSuite_vf_macfilter.py               |  6 ++--
 tests/TestSuite_vf_offload.py                 | 16 ++++-----
 tests/TestSuite_vf_packet_rxtx.py             |  8 ++---
 tests/TestSuite_vf_port_start_stop.py         |  8 ++---
 tests/TestSuite_vf_rss.py                     |  6 ++--
 tests/TestSuite_vf_single_core_perf.py        | 12 +++----
 tests/TestSuite_vf_smoke.py                   | 16 ++++-----
 tests/TestSuite_vf_to_vf_nic_bridge.py        |  8 ++---
 tests/TestSuite_vf_vlan.py                    | 10 +++---
 tests/TestSuite_vhost_1024_ethports.py        |  4 +--
 tests/TestSuite_vhost_cbdma.py                | 14 ++++----
 tests/TestSuite_vhost_event_idx_interrupt.py  |  6 ++--
 tests/TestSuite_vhost_multi_queue_qemu.py     | 14 ++++----
 tests/TestSuite_vhost_pmd_xstats.py           | 12 +++----
 tests/TestSuite_vhost_user_interrupt.py       |  4 +--
 tests/TestSuite_vhost_user_live_migration.py  | 10 +++---
 tests/TestSuite_vhost_virtio_pmd_interrupt.py | 10 +++---
 .../TestSuite_vhost_virtio_user_interrupt.py  |  4 +--
 tests/TestSuite_virtio_event_idx_interrupt.py |  8 ++---
 .../TestSuite_virtio_ipsec_cryptodev_func.py  | 10 +++---
 tests/TestSuite_virtio_perf_cryptodev_func.py |  8 ++---
 tests/TestSuite_virtio_pvp_regression.py      | 10 +++---
 tests/TestSuite_virtio_smoke.py               |  4 +--
 tests/TestSuite_virtio_unit_cryptodev_func.py |  8 ++---
 ...stSuite_virtio_user_as_exceptional_path.py | 10 +++---
 ...te_virtio_user_for_container_networking.py |  8 ++---
 tests/TestSuite_vlan.py                       |  8 ++---
 tests/TestSuite_vlan_ethertype_config.py      | 12 +++----
 tests/TestSuite_vm2vm_virtio_net_perf.py      |  8 ++---
 tests/TestSuite_vm2vm_virtio_pmd.py           | 10 +++---
 tests/TestSuite_vm2vm_virtio_user.py          |  8 ++---
 tests/TestSuite_vm_hotplug.py                 |  6 ++--
 tests/TestSuite_vm_power_manager.py           | 10 +++---
 tests/TestSuite_vm_pw_mgmt_policy.py          | 14 ++++----
 tests/TestSuite_vmdq.py                       |  8 ++---
 tests/TestSuite_vmdq_dcb.py                   |  8 ++---
 tests/TestSuite_vswitch_sample_cbdma.py       | 14 ++++----
 tests/TestSuite_vxlan.py                      | 14 ++++----
 tests/TestSuite_vxlan_gpe_support_in_i40e.py  |  8 ++---
 tests/__init__.py                             | 30 ++++++++++++++++
 tests/bonding.py                              | 10 +++---
 tests/compress_common.py                      |  4 +--
 tests/cryptodev_common.py                     |  4 +--
 tests/flexible_common.py                      |  4 +--
 tests/perf_test_base.py                       | 14 ++++----
 tests/rte_flow_common.py                      |  4 +--
 tests/smoke_base.py                           |  2 +-
 tests/vhost_peer_conf.py                      |  2 +-
 tools/__init__.py                             | 30 ++++++++++++++++
 tools/dump_case.py                            |  6 ++--
 tools/setup.py                                |  8 ++---
 322 files changed, 1532 insertions(+), 1376 deletions(-)
 create mode 100644 dep/__init__.py
 create mode 100644 dep/scapy_modules/__init__.py
 delete mode 100755 dts
 create mode 100644 framework/__init__.py
 rename framework/main.py => main.py (96%)
 create mode 100644 nics/__init__.py
 create mode 100644 tests/__init__.py
 create mode 100644 tools/__init__.py

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/__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
deleted file mode 100755
index f408e5b9..00000000
--- a/dts
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/bash
-
-# <COPYRIGHT_TAG>
-
-PWD=`dirname $0`
-
-(cd $PWD/framework; ./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..10410f49 100644
--- a/framework/checkCase.py
+++ b/framework/checkCase.py
@@ -2,8 +2,8 @@ import xlrd
 import collections
 import json
 
-from settings import get_nic_name, load_global_setting, HOST_DRIVER_SETTING
-from utils import RED
+from .settings import get_nic_name, load_global_setting, HOST_DRIVER_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..00b96cb6 100644
--- a/framework/config.py
+++ b/framework/config.py
@@ -36,10 +36,10 @@ 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,
+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 .settings import load_global_setting, DTS_CFG_FOLDER
+from .exception import ConfigParseException, VirtConfigParseException, PortConfigParseException
 
 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..5d37bc08 100644
--- a/framework/crb.py
+++ b/framework/crb.py
@@ -32,10 +32,10 @@
 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
+from .settings import TIMEOUT, IXIA
+from .ssh_connection import SSHConnection
+from .logger import getLogger
+from .config import PortConf, PORTCONF, PktgenConf
 
 """
 CRB (customer reference board) basic functions and handlers
@@ -578,7 +578,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 +588,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..3c9989eb 100644
--- a/framework/debugger.py
+++ b/framework/debugger.py
@@ -28,10 +28,10 @@ import signal
 import code
 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 .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 .test_case import TestCase
 
 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..cedcff72 100644
--- a/framework/dts.py
+++ b/framework/dts.py
@@ -32,7 +32,7 @@
 import re           # regular expressions module
 import configparser  # config parse module
 import os           # operation system module
-import texttable    # text format
+import framework.texttable as texttable    # text format
 import traceback    # exception traceback
 import inspect      # load attribute
 import atexit       # register callback when exit
@@ -41,24 +41,24 @@ 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 framework.rst as 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,
+import framework.settings as 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 framework.logger as logger
+import framework.debugger as 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 imp
diff --git a/framework/dut.py b/framework/dut.py
index f5481d06..80d76a85 100644
--- a/framework/dut.py
+++ b/framework/dut.py
@@ -32,14 +32,14 @@
 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
+import framework.settings as settings
+from .config import PortConf,AppNameConf
+from .settings import NICS, LOG_NAME_SEP
+from .ssh_connection import SSHConnection
+from .crb import Crb
+from nics.net_device import GetNicObj
+from .virt_resource import VirtResource
+from .utils import RED, remove_old_rsa_key
 from uuid import uuid4
 
 
diff --git a/framework/etgen.py b/framework/etgen.py
index acfa2960..b4025055 100644
--- a/framework/etgen.py
+++ b/framework/etgen.py
@@ -32,12 +32,12 @@
 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 .ssh_connection import SSHConnection
+from .settings import SCAPY2IXIA
+from .logger import getLogger
+from .exception import VerifyFailure
+from .utils import create_mask
 
 
 class SoftwarePacketGenerator():
diff --git a/framework/flow/flow.py b/framework/flow/flow.py
index 2cce0796..233a7e8c 100644
--- a/framework/flow/flow.py
+++ b/framework/flow/flow.py
@@ -40,11 +40,11 @@ from typing import List, FrozenSet, Union, Iterable, Tuple
 
 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 FlowItemType, FlowActionType
+from .exceptions import InvalidFlowItemException
+from .flow_action_items import ActionFlowItem
+from .flow_items import FlowItem
+from .flow_pattern_items import PatternFlowItem, TUNNELING_PROTOCOLS
 
 # 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..5416f9ab 100644
--- a/framework/flow/flow_action_items.py
+++ b/framework/flow/flow_action_items.py
@@ -32,8 +32,8 @@
 
 from typing import FrozenSet, Dict, 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..33e6a906 100644
--- a/framework/flow/flow_items.py
+++ b/framework/flow/flow_items.py
@@ -37,10 +37,10 @@ import itertools
 from functools import reduce
 from typing import FrozenSet, Union, Any, Set, Dict, Tuple, Iterable, Hashable
 
-from flow.enums import FlowItemType, FlowActionType
-from flow.exceptions import InvalidFlowItemException
-from flow import flow_action_items
-from flow import flow_pattern_items
+from .enums import FlowItemType, FlowActionType
+from .exceptions import InvalidFlowItemException
+import framework.flow.flow_action_items as flow_action_items
+import framework.flow.flow_pattern_items as flow_pattern_items
 
 PATTERN_ACTION_ITEMS = {FlowItemType.INVERT, FlowItemType.VOID, FlowItemType.MARK, FlowItemType.META}
 
@@ -90,7 +90,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..934efa7e 100644
--- a/framework/flow/flow_pattern_items.py
+++ b/framework/flow/flow_pattern_items.py
@@ -40,9 +40,9 @@ 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..e1a21a2f 100644
--- a/framework/flow/flow_rule.py
+++ b/framework/flow/flow_rule.py
@@ -32,9 +32,9 @@
 
 from typing import Union
 
-from flow.enums import *
-from flow.flow import Flow
-import flow.flow_action_items as flow_action_items
+from .enums import *
+from .flow import Flow
+import framework.flow.flow_action_items as flow_action_items
 
 
 class FlowPattern(Flow):
diff --git a/framework/flow/generator.py b/framework/flow/generator.py
index 0fe52b2b..4133b75c 100644
--- a/framework/flow/generator.py
+++ b/framework/flow/generator.py
@@ -40,11 +40,11 @@ from typing import List, Set, Generator, Iterable, FrozenSet, Tuple
 
 import numpy as np
 
-from flow.flow import Flow
-from flow.flow_pattern_items import PATTERN_ITEMS_TYPE_CLASS_MAPPING, PatternFlowItem, \
+from .flow import Flow
+from .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_rule import FlowItemType
 
 
 def get_valid_next_protocols(current_protocol, protocol_stack, type_denylist):
diff --git a/framework/ixia_network/ixnet_stream.py b/framework/ixia_network/ixnet_stream.py
index 56cd53b6..52a447ed 100644
--- a/framework/ixia_network/ixnet_stream.py
+++ b/framework/ixia_network/ixnet_stream.py
@@ -31,7 +31,7 @@
 import os
 import json
 
-from utils import convert_int2ip, convert_ip2int
+from framework.utils import convert_int2ip, convert_ip2int
 
 
 class IxnetConfigStream(object):
diff --git a/framework/logger.py b/framework/logger.py
index 63e1d831..445f40a9 100644
--- a/framework/logger.py
+++ b/framework/logger.py
@@ -35,8 +35,8 @@ import sys
 import inspect
 import re
 
-from settings import LOG_NAME_SEP, FOLDERS, load_global_setting, DTS_PARALLEL_SETTING
-from utils import RED
+from .settings import LOG_NAME_SEP, FOLDERS, load_global_setting, DTS_PARALLEL_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..75cf1ce6 100644
--- a/framework/multiple_vm.py
+++ b/framework/multiple_vm.py
@@ -3,9 +3,9 @@ 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
+from .settings import DTS_ERR_TBL, save_global_setting, DTS_PARALLEL_SETTING
+from .utils import RED
+from .logger import getLogger
 
 
 class MultipleVM(object):
@@ -74,7 +74,7 @@ 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..700fd731 100644
--- a/framework/packet.py
+++ b/framework/packet.py
@@ -36,6 +36,7 @@ Base on scapy(python program for packet manipulation)
 from socket import AF_INET6
 from importlib import import_module
 from scapy.all import *
+from dep.scapy_modules.Dot1BR import Dot1BR
 # load extension layers
 exec_file = os.path.realpath(__file__)
 DTS_PATH = exec_file.replace('/framework/packet.py', '')
@@ -44,43 +45,30 @@ 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
+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'],
                           }
-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(f'scapy.contrib.{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 scapy.contrib.{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..f6bece56 100644
--- a/framework/pktgen.py
+++ b/framework/pktgen.py
@@ -39,15 +39,15 @@ from scapy.fields import ConditionalField
 from scapy.utils import rdpcap
 
 # dts libs
-from utils import (convert_int2ip, convert_ip2int,
+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,
+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 .pktgen_base import DpdkPacketGenerator
+from .pktgen_ixia import IxiaPacketGenerator
+from .pktgen_ixia_network import IxNetworkPacketGenerator
+from .pktgen_trex import TrexPacketGenerator
 
 
 class PacketGeneratorHelper(object):
diff --git a/framework/pktgen_base.py b/framework/pktgen_base.py
index f30785d0..88d053c1 100644
--- a/framework/pktgen_base.py
+++ b/framework/pktgen_base.py
@@ -33,13 +33,13 @@ import time
 import logging
 from abc import abstractmethod
 from copy import deepcopy
-from logger import getLogger
+from .logger import getLogger
 from pprint import pformat
 from enum import Enum, unique
 
-from config import PktgenConf
+from .config import PktgenConf
 # packet generator name
-from settings import PKTGEN_DPDK, PKTGEN_TREX, PKTGEN_IXIA, PKTGEN_IXIA_NETWORK, PKTGEN
+from .settings import PKTGEN_DPDK, PKTGEN_TREX, PKTGEN_IXIA, PKTGEN_IXIA_NETWORK, PKTGEN
 
 # macro definition
 TRANSMIT_CONT = 'continuous'
diff --git a/framework/pktgen_ixia.py b/framework/pktgen_ixia.py
index 0273f3ad..fbb55943 100644
--- a/framework/pktgen_ixia.py
+++ b/framework/pktgen_ixia.py
@@ -34,12 +34,12 @@ import string
 import time
 from pprint import pformat
 
-from ssh_connection import SSHConnection
-from settings import SCAPY2IXIA
-from utils import (convert_int2ip, convert_ip2int,
+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,
+from .pktgen_base import (PacketGenerator, PKTGEN_IXIA,
                          TRANSMIT_CONT, TRANSMIT_M_BURST, TRANSMIT_S_BURST)
 
 from scapy.packet import Packet
diff --git a/framework/pktgen_ixia_network.py b/framework/pktgen_ixia_network.py
index 3cca2578..c9800e9f 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 PacketGenerator, PKTGEN_IXIA_NETWORK
 
 
 class IxNetworkPacketGenerator(PacketGenerator):
diff --git a/framework/pktgen_trex.py b/framework/pktgen_trex.py
index c0b13428..59f11754 100644
--- a/framework/pktgen_trex.py
+++ b/framework/pktgen_trex.py
@@ -35,7 +35,7 @@ import time
 import logging
 from pprint import pformat
 
-from pktgen_base import (PacketGenerator, PKTGEN_TREX, PKTGEN,
+from .pktgen_base import (PacketGenerator, PKTGEN_TREX, PKTGEN,
                          TRANSMIT_CONT, TRANSMIT_M_BURST, TRANSMIT_S_BURST)
 
 
diff --git a/framework/plotting.py b/framework/plotting.py
index 7d036fe4..ecae9607 100644
--- a/framework/plotting.py
+++ b/framework/plotting.py
@@ -31,12 +31,12 @@
 
 import os
 import shutil
-from plotgraph import Plot2DGraph
+from .plotgraph import Plot2DGraph
 from docutils.parsers.rst.directives import path
-from rst import path2Result
-import plotgraph
-import utils
-from exception import VerifyFailure
+from .rst import path2Result
+import framework.plotgraph as plotgraph
+import framework.utils as utils
+from .exception import VerifyFailure
 
 
 """
diff --git a/framework/pmd_output.py b/framework/pmd_output.py
index 838fa0bd..4161f4ad 100644
--- a/framework/pmd_output.py
+++ b/framework/pmd_output.py
@@ -32,8 +32,8 @@
 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 TIMEOUT, PROTOCOL_PACKET_SIZE, get_nic_driver
+from .utils import create_mask
 
 
 class PmdOutput():
diff --git a/framework/project_dpdk.py b/framework/project_dpdk.py
index d96f8d63..0d52dadd 100644
--- a/framework/project_dpdk.py
+++ b/framework/project_dpdk.py
@@ -32,16 +32,16 @@
 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 .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
 
 
 class DPDKdut(Dut):
diff --git a/framework/qemu_kvm.py b/framework/qemu_kvm.py
index 757737ec..e35d7499 100644
--- a/framework/qemu_kvm.py
+++ b/framework/qemu_kvm.py
@@ -34,11 +34,11 @@ import time
 import re
 import os
 
-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 .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
 
 # 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..3f014ce3 100644
--- a/framework/qemu_libvirt.py
+++ b/framework/qemu_libvirt.py
@@ -33,15 +33,15 @@ 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 framework.utils as 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 xml.etree.ElementTree as ET
 from xml.etree.ElementTree import ElementTree
 from xml.dom import minidom
diff --git a/framework/rst.py b/framework/rst.py
index 2b8e6132..bd36a015 100644
--- a/framework/rst.py
+++ b/framework/rst.py
@@ -32,13 +32,13 @@
 import os
 import shutil
 import re
-from exception import VerifyFailure
+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/ssh_connection.py b/framework/ssh_connection.py
index c9886b2b..a3be06c2 100644
--- a/framework/ssh_connection.py
+++ b/framework/ssh_connection.py
@@ -30,7 +30,7 @@
 # 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
 
 """
 Global structure for saving connections
diff --git a/framework/ssh_pexpect.py b/framework/ssh_pexpect.py
index fbc7dd4a..d81ae98b 100644
--- a/framework/ssh_pexpect.py
+++ b/framework/ssh_pexpect.py
@@ -1,9 +1,9 @@
 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 ignore_keyintr, aware_keyintr
+from .exception import TimeoutException, SSHConnectionException, SSHSessionDeadException
+from .utils import RED, GREEN, parallel_lock
 
 """
 Module handle ssh sessions between tester and DUT.
diff --git a/framework/test_case.py b/framework/test_case.py
index 98b716b9..650f9f05 100644
--- a/framework/test_case.py
+++ b/framework/test_case.py
@@ -33,21 +33,21 @@
 A base class for creating DTF test cases.
 """
 import re
-import debugger
+import framework.debugger as 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
+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
 from functools import wraps
 
 class TestCase(object):
diff --git a/framework/test_result.py b/framework/test_result.py
index a718034d..a5b8e88a 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..17c0f5cc 100644
--- a/framework/tester.py
+++ b/framework/tester.py
@@ -37,19 +37,19 @@ 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
+from .settings import NICS, load_global_setting, PERF_SETTING
+from .settings import IXIA, USERNAME, PKTGEN, PKTGEN_GRP
+from .crb import Crb
+from nics.net_device import GetNicObj
+from .etgen import IxiaPacketGenerator, SoftwarePacketGenerator
 import random
-from utils import (GREEN, convert_int2ip, convert_ip2int,
+from .utils import (GREEN, convert_int2ip, convert_ip2int,
                    check_crb_python_version)
-from exception import ParameterInvalidException
+from .exception import ParameterInvalidException
 from multiprocessing import Process
-from pktgen import getPacketGenerator
-from config import PktgenConf
-from packet import SCAPY_IMP_CMD
+from .pktgen import getPacketGenerator
+from .config import PktgenConf
+from .packet import SCAPY_IMP_CMD
 
 class Tester(Crb):
 
diff --git a/framework/virt_base.py b/framework/virt_base.py
index f19cbc4b..b991fb3c 100644
--- a/framework/virt_base.py
+++ b/framework/virt_base.py
@@ -35,14 +35,14 @@ import threading
 from random import randint
 
 
-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
+import framework.utils as utils
+import framework.exception as 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
 
 ST_NOTSTART = "NOTSTART"
 ST_PAUSE = "PAUSE"
diff --git a/framework/virt_common.py b/framework/virt_common.py
index 628cadf7..6708315a 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 .settings import CONFIG_ROOT_PATH
 
-from qemu_kvm import QEMUKvm
-from qemu_libvirt import LibvirtKvm
+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..2aceab24 100644
--- a/framework/virt_dut.py
+++ b/framework/virt_dut.py
@@ -32,14 +32,14 @@
 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 .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 nics.net_device import GetNicObj
+from nics.net_device import RemoveNicObj
 
 
 class VirtDut(DPDKdut):
diff --git a/framework/virt_resource.py b/framework/virt_resource.py
index 6ae2a28b..2bed1157 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 get_obj_funcs, parallel_lock, RED
 
 INIT_FREE_PORT = 6000
 INIT_SERIAL_PORT = 7000
diff --git a/framework/virt_scene.py b/framework/virt_scene.py
index e67b3b6b..95350b1c 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 .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
 
 # 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..46f3d0ec 100755
--- a/framework/main.py
+++ b/main.py
@@ -38,16 +38,11 @@ import os
 import sys
 import argparse
 import subprocess
+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..38888e44 100644
--- a/nics/net_device.py
+++ b/nics/net_device.py
@@ -36,10 +36,10 @@ from functools import wraps
 import time
 
 
-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 TIMEOUT, HEADER_SIZE
+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..41161f46 100644
--- a/nics/perf_report.py
+++ b/nics/perf_report.py
@@ -41,8 +41,8 @@ from email.mime.multipart import MIMEMultipart
 from collections import OrderedDict
 #install GitPython
 from git import Repo
-from system_info import SystemInfo
-import utils
+from .system_info import SystemInfo
+import framework.utils as utils
 
 def get_dpdk_git_info(repo_dir="/root/dpdk"):
 
@@ -63,14 +63,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 +106,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/tests/TestSuite_ABI_stable.py b/tests/TestSuite_ABI_stable.py
index 522296ad..c24bb1c6 100644
--- a/tests/TestSuite_ABI_stable.py
+++ b/tests/TestSuite_ABI_stable.py
@@ -51,12 +51,12 @@ DPDK Test suite.
 Test support of ABI .
 
 """
-import utils
+import framework.utils as 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
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.settings import load_global_setting, HOST_SHARED_LIB_SETTING, HOST_SHARED_LIB_PATH
 
 
 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..fffd991b 100644
--- a/tests/TestSuite_af_xdp_2.py
+++ b/tests/TestSuite_af_xdp_2.py
@@ -32,10 +32,10 @@
 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.settings import HEADER_SIZE
+from framework.test_case import TestCase
+from framework.packet import Packet
+from framework.pktgen import PacketGeneratorHelper
 
 
 class TestAfXdp(TestCase):
diff --git a/tests/TestSuite_blocklist.py b/tests/TestSuite_blocklist.py
index 3692dfbb..c64c9c98 100644
--- a/tests/TestSuite_blocklist.py
+++ b/tests/TestSuite_blocklist.py
@@ -33,10 +33,10 @@
 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.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.settings import DRIVERS
 
 class TestBlockList(TestCase):
     def set_up_all(self):
diff --git a/tests/TestSuite_cbdma.py b/tests/TestSuite_cbdma.py
index 0cf598dc..ba553f05 100644
--- a/tests/TestSuite_cbdma.py
+++ b/tests/TestSuite_cbdma.py
@@ -33,13 +33,13 @@
 DPDK Test suite.
 """
 
-import utils
+import framework.utils as utils
 import re
 import time
-from test_case import TestCase
-from packet import Packet
-from pktgen import TRANSMIT_CONT
-from pmd_output import PmdOutput
+from framework.test_case import TestCase
+from framework.packet import Packet
+from framework.pktgen import TRANSMIT_CONT
+from framework.pmd_output import PmdOutput
 
 
 class TestCBDMA(TestCase):
diff --git a/tests/TestSuite_checksum_offload.py b/tests/TestSuite_checksum_offload.py
index eee09105..37eea232 100644
--- a/tests/TestSuite_checksum_offload.py
+++ b/tests/TestSuite_checksum_offload.py
@@ -45,10 +45,10 @@ from typing import List, Union, Tuple, Pattern
 
 import time
 
-from rst import RstReport
-import utils
-from exception import VerifyFailure
-from pktgen import PacketGeneratorHelper
+from framework.rst import RstReport
+import framework.utils as utils
+from framework.exception import VerifyFailure
+from framework.pktgen import PacketGeneratorHelper
 from scapy.layers.inet import UDP, TCP, IP
 from scapy.layers.inet6 import IPv6
 from scapy.layers.l2 import Ether, GRE
@@ -56,16 +56,16 @@ 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 framework.test_capabilities import DRIVER_TEST_LACK_CAPA
+from framework.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 framework.pmd_output import PmdOutput
+from framework.test_capabilities import DRIVER_TEST_LACK_CAPA
+from framework.pktgen import PacketGeneratorHelper
+from framework.exception import VerifyFailure
+import framework.packet as packet
 
-from settings import FOLDERS
+from framework.settings import FOLDERS
 
 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..bff2fb7a 100644
--- a/tests/TestSuite_cloud_filter_with_l4_port.py
+++ b/tests/TestSuite_cloud_filter_with_l4_port.py
@@ -36,17 +36,17 @@ Test the support of generic flow API by Poll Mode Drivers.
 
 """
 
-import utils
+import framework.utils as utils
 import time
 import re
 
-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
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.settings import DRIVERS
+from framework.crb import Crb
+from framework.dut import Dut
+import framework.packet as packet
+from framework.exception import VerifyFailure
 import scapy.layers.inet
 from scapy.utils import rdpcap
 
diff --git a/tests/TestSuite_cmdline.py b/tests/TestSuite_cmdline.py
index c189934f..e88be9df 100644
--- a/tests/TestSuite_cmdline.py
+++ b/tests/TestSuite_cmdline.py
@@ -34,9 +34,9 @@ DPDK Test suite.
 Test cmdline.
 """
 
-import utils
+import framework.utils as utils
 
-from test_case import TestCase
+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..4155a1cf 100644
--- a/tests/TestSuite_compressdev_isal_pmd.py
+++ b/tests/TestSuite_compressdev_isal_pmd.py
@@ -31,10 +31,10 @@
 
 
 import os
-from test_case import TestCase
+from framework.test_case import TestCase
 import json
 import copy
-import compress_common as cc
+import tests.compress_common as cc
 
 class TestCompressdevIsalPmd(TestCase):
 
diff --git a/tests/TestSuite_compressdev_qat_pmd.py b/tests/TestSuite_compressdev_qat_pmd.py
index 4ac45938..b8ad0724 100644
--- a/tests/TestSuite_compressdev_qat_pmd.py
+++ b/tests/TestSuite_compressdev_qat_pmd.py
@@ -31,10 +31,10 @@
 
 
 import os
-from test_case import TestCase
+from framework.test_case import TestCase
 import json
 import copy
-import compress_common as cc
+import tests.compress_common as cc
 
 
 class TestCompressdevQatPmd(TestCase):
diff --git a/tests/TestSuite_compressdev_zlib_pmd.py b/tests/TestSuite_compressdev_zlib_pmd.py
index 35a7502b..7e1d13c0 100644
--- a/tests/TestSuite_compressdev_zlib_pmd.py
+++ b/tests/TestSuite_compressdev_zlib_pmd.py
@@ -31,10 +31,10 @@
 
 
 import os
-from test_case import TestCase
+from framework.test_case import TestCase
 import json
 import copy
-import compress_common as cc
+import tests.compress_common as cc
 
 class TestCompressdevZlibPmd(TestCase):
 
diff --git a/tests/TestSuite_coremask.py b/tests/TestSuite_coremask.py
index 43c68e9d..286dd0ae 100644
--- a/tests/TestSuite_coremask.py
+++ b/tests/TestSuite_coremask.py
@@ -36,10 +36,10 @@ Test coremask parsing in DPDK.
 
 """
 
-import utils
+import framework.utils as utils
 
-from exception import VerifyFailure
-from test_case import TestCase
+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..d8bfff97 100644
--- a/tests/TestSuite_crypto_perf_cryptodev_perf.py
+++ b/tests/TestSuite_crypto_perf_cryptodev_perf.py
@@ -31,8 +31,8 @@
 
 import re
 import json
-from test_case import TestCase
-import cryptodev_common as cc
+from framework.test_case import TestCase
+import tests.cryptodev_common as cc
 
 
 class PerfTestsCryptodev(TestCase):
diff --git a/tests/TestSuite_cvl_advanced_iavf_rss.py b/tests/TestSuite_cvl_advanced_iavf_rss.py
index a7003b38..bd0e8708 100644
--- a/tests/TestSuite_cvl_advanced_iavf_rss.py
+++ b/tests/TestSuite_cvl_advanced_iavf_rss.py
@@ -32,10 +32,10 @@
 
 import re
 import random
-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
 
 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..0a61e119 100755
--- a/tests/TestSuite_cvl_advanced_iavf_rss_gtpogre.py
+++ b/tests/TestSuite_cvl_advanced_iavf_rss_gtpogre.py
@@ -33,10 +33,10 @@
 import re
 import random
 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..c329e62f 100644
--- a/tests/TestSuite_cvl_advanced_iavf_rss_gtpu.py
+++ b/tests/TestSuite_cvl_advanced_iavf_rss_gtpu.py
@@ -33,10 +33,10 @@
 import re
 import random
 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, skip_unsupported_pkg, check_supported_nic
+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..068731d9 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
@@ -32,11 +32,11 @@ import re
 import random
 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.test_case import TestCase, skip_unsupported_pkg, check_supported_nic
+from framework.pmd_output import PmdOutput
+from framework.packet import Packet
+from .rte_flow_common import RssProcessing
+from framework.config import UserConf
 
 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..09e5c7be 100644
--- a/tests/TestSuite_cvl_advanced_rss.py
+++ b/tests/TestSuite_cvl_advanced_rss.py
@@ -32,10 +32,10 @@
 
 import re
 import random
-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
 
 # 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..4f5eb359 100755
--- a/tests/TestSuite_cvl_advanced_rss_gtpogre.py
+++ b/tests/TestSuite_cvl_advanced_rss_gtpogre.py
@@ -32,10 +32,10 @@
 
 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 = {
diff --git a/tests/TestSuite_cvl_advanced_rss_gtpu.py b/tests/TestSuite_cvl_advanced_rss_gtpu.py
index f1f4fe43..dc0f6130 100755
--- a/tests/TestSuite_cvl_advanced_rss_gtpu.py
+++ b/tests/TestSuite_cvl_advanced_rss_gtpu.py
@@ -32,10 +32,10 @@
 
 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, skip_unsupported_pkg, check_supported_nic
+from .rte_flow_common import RssProcessing
 
 
 mac_ipv4_gtpu_ipv4_basic = {
diff --git a/tests/TestSuite_cvl_advanced_rss_pppoe.py b/tests/TestSuite_cvl_advanced_rss_pppoe.py
index 2d3e226e..bcff298e 100644
--- a/tests/TestSuite_cvl_advanced_rss_pppoe.py
+++ b/tests/TestSuite_cvl_advanced_rss_pppoe.py
@@ -32,10 +32,10 @@
 import re
 import random
 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.test_case import TestCase, skip_unsupported_pkg
+from framework.pmd_output import PmdOutput
+from framework.packet import Packet
+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..115a97e0 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
@@ -31,11 +31,11 @@
 import re
 import random
 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.test_case import TestCase, skip_unsupported_pkg, check_supported_nic
+from framework.pmd_output import PmdOutput
+from framework.packet import Packet
+from .rte_flow_common import RssProcessing
+from framework.config import UserConf
 
 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..1a2d4c42 100644
--- a/tests/TestSuite_cvl_dcf_acl_filter.py
+++ b/tests/TestSuite_cvl_dcf_acl_filter.py
@@ -34,11 +34,11 @@ import time
 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
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.packet import Packet
+from framework.utils import BLUE, RED, GREEN
+import tests.rte_flow_common as rfc
 
 import os
 
diff --git a/tests/TestSuite_cvl_dcf_date_path.py b/tests/TestSuite_cvl_dcf_date_path.py
index 04ac5de6..71b42a8f 100644
--- a/tests/TestSuite_cvl_dcf_date_path.py
+++ b/tests/TestSuite_cvl_dcf_date_path.py
@@ -32,9 +32,9 @@
 
 import re
 import time
-from pmd_output import PmdOutput
-from test_case import TestCase
-from packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
+from framework.packet import Packet
 
 
 class DcfDatePathTest(TestCase):
diff --git a/tests/TestSuite_cvl_dcf_flow_priority.py b/tests/TestSuite_cvl_dcf_flow_priority.py
index 07d99d2c..cc95dcb1 100644
--- a/tests/TestSuite_cvl_dcf_flow_priority.py
+++ b/tests/TestSuite_cvl_dcf_flow_priority.py
@@ -34,11 +34,11 @@ 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
+from framework.test_case import TestCase, skip_unsupported_pkg, check_supported_nic
+from framework.pmd_output import PmdOutput
+from framework.packet import Packet
+from framework.utils import BLUE, RED, GREEN
+import tests.rte_flow_common as rfc
 
 import os
 
diff --git a/tests/TestSuite_cvl_dcf_switch_filter.py b/tests/TestSuite_cvl_dcf_switch_filter.py
index dd7e0109..a13b47b1 100644
--- a/tests/TestSuite_cvl_dcf_switch_filter.py
+++ b/tests/TestSuite_cvl_dcf_switch_filter.py
@@ -34,11 +34,11 @@ 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
+from framework.test_case import TestCase, skip_unsupported_pkg, check_supported_nic
+from framework.pmd_output import PmdOutput
+from framework.packet import Packet
+from framework.utils import BLUE, RED, GREEN
+import tests.rte_flow_common as rfc
 
 import os
 
diff --git a/tests/TestSuite_cvl_dcf_switch_filter_gtpu.py b/tests/TestSuite_cvl_dcf_switch_filter_gtpu.py
index 052e97b7..d357c239 100644
--- a/tests/TestSuite_cvl_dcf_switch_filter_gtpu.py
+++ b/tests/TestSuite_cvl_dcf_switch_filter_gtpu.py
@@ -34,11 +34,11 @@ 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
+from framework.test_case import TestCase, skip_unsupported_pkg, check_supported_nic
+from framework.pmd_output import PmdOutput
+from framework.packet import Packet
+from framework.utils import BLUE, RED, GREEN
+import tests.rte_flow_common as rfc
 
 import os
 
diff --git a/tests/TestSuite_cvl_dcf_switch_filter_pppoe.py b/tests/TestSuite_cvl_dcf_switch_filter_pppoe.py
index c51d14b1..32235be4 100644
--- a/tests/TestSuite_cvl_dcf_switch_filter_pppoe.py
+++ b/tests/TestSuite_cvl_dcf_switch_filter_pppoe.py
@@ -34,11 +34,11 @@ 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
+from framework.test_case import TestCase, skip_unsupported_pkg, check_supported_nic
+from framework.pmd_output import PmdOutput
+from framework.packet import Packet
+from framework.utils import BLUE, RED, GREEN
+import tests.rte_flow_common as rfc
 
 import os
 
diff --git a/tests/TestSuite_cvl_ecpri.py b/tests/TestSuite_cvl_ecpri.py
index 357e7fa9..3fec3c00 100644
--- a/tests/TestSuite_cvl_ecpri.py
+++ b/tests/TestSuite_cvl_ecpri.py
@@ -1,10 +1,10 @@
 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
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
+import tests.rte_flow_common as rfc
+import framework.utils as utils
+from framework.utils import GREEN, RED
 import time
 
 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']
diff --git a/tests/TestSuite_cvl_fdir.py b/tests/TestSuite_cvl_fdir.py
index 0c3a1917..e1c033c8 100644
--- a/tests/TestSuite_cvl_fdir.py
+++ b/tests/TestSuite_cvl_fdir.py
@@ -35,13 +35,13 @@ import time
 import copy
 import os
 
-from packet import Packet
-from pmd_output import PmdOutput
-from test_case import TestCase, skip_unsupported_pkg
-import 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
+import tests.rte_flow_common as rfc
 
-from utils import GREEN, RED
-import utils
+from framework.utils import GREEN, RED
+import framework.utils as utils
 
 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..575f0b0d 100644
--- a/tests/TestSuite_cvl_iavf_ip_fragment_rte_flow.py
+++ b/tests/TestSuite_cvl_iavf_ip_fragment_rte_flow.py
@@ -30,14 +30,14 @@
 # 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 framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
 import re
-from utils import GREEN, RED
+from framework.utils import GREEN, RED
 import time
 from scapy.all import *
-import rte_flow_common as rfc
+import tests.rte_flow_common as rfc
 
 LAUNCH_QUEUE = 16
 
diff --git a/tests/TestSuite_cvl_iavf_rss_configure.py b/tests/TestSuite_cvl_iavf_rss_configure.py
index 86b2819e..e94809a3 100755
--- a/tests/TestSuite_cvl_iavf_rss_configure.py
+++ b/tests/TestSuite_cvl_iavf_rss_configure.py
@@ -32,12 +32,12 @@
 import json
 import time
 import re
-import packet
+import framework.packet as packet
 import os
 from scapy.contrib.gtp import *
-from test_case import TestCase
-from pmd_output import PmdOutput
-from rte_flow_common import RssProcessing
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+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..b396ee72 100644
--- a/tests/TestSuite_cvl_ip_fragment_rte_flow.py
+++ b/tests/TestSuite_cvl_ip_fragment_rte_flow.py
@@ -30,13 +30,13 @@
 # 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
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
+from framework.utils import GREEN, RED
 import time
 from scapy.all import *
-import rte_flow_common as rfc
+import tests.rte_flow_common as rfc
 
 LAUNCH_QUEUE = 16
 
diff --git a/tests/TestSuite_cvl_limit_value_test.py b/tests/TestSuite_cvl_limit_value_test.py
index f8224258..4e97bd36 100644
--- a/tests/TestSuite_cvl_limit_value_test.py
+++ b/tests/TestSuite_cvl_limit_value_test.py
@@ -34,12 +34,12 @@ 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
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
+import tests.rte_flow_common as rfc
+from .rte_flow_common import CVL_TXQ_RXQ_NUMBER
+import framework.utils as utils
 
 # 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..d066d42b 100644
--- a/tests/TestSuite_cvl_qinq.py
+++ b/tests/TestSuite_cvl_qinq.py
@@ -33,11 +33,11 @@
 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..40d3e533 100644
--- a/tests/TestSuite_cvl_rss_configure.py
+++ b/tests/TestSuite_cvl_rss_configure.py
@@ -32,15 +32,15 @@
 import json
 import time
 import re
-import packet
+import framework.packet as packet
 import os
 from scapy.contrib.gtp import *
-from test_case import TestCase
-from pmd_output import PmdOutput
-from utils import BLUE, RED
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.utils import BLUE, RED
 from collections import OrderedDict
-from packet import IncreaseIP, IncreaseIPv6
-import rte_flow_common as rfc
+from framework.packet import IncreaseIP, IncreaseIPv6
+import tests.rte_flow_common as rfc
 
 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..e25d0127 100644
--- a/tests/TestSuite_cvl_switch_filter.py
+++ b/tests/TestSuite_cvl_switch_filter.py
@@ -37,12 +37,12 @@ import copy
 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
+from framework.test_case import TestCase, skip_unsupported_pkg
+from framework.pmd_output import PmdOutput
+from framework.packet import Packet
+from framework.utils import BLUE, RED, GREEN
 from collections import OrderedDict
-import rte_flow_common as rfc
+import tests.rte_flow_common as rfc
 
 import os
 
diff --git a/tests/TestSuite_cvl_switch_filter_pppoe.py b/tests/TestSuite_cvl_switch_filter_pppoe.py
index c2949546..e1e98e4e 100644
--- a/tests/TestSuite_cvl_switch_filter_pppoe.py
+++ b/tests/TestSuite_cvl_switch_filter_pppoe.py
@@ -37,12 +37,12 @@ import copy
 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
+from framework.test_case import TestCase, skip_unsupported_pkg
+from framework.pmd_output import PmdOutput
+from framework.packet import Packet
+from framework.utils import BLUE, RED, GREEN
 from collections import OrderedDict
-import rte_flow_common as rfc
+import tests.rte_flow_common as rfc
 
 import os
 
diff --git a/tests/TestSuite_cvl_vf_support_multicast_address.py b/tests/TestSuite_cvl_vf_support_multicast_address.py
index dd241a82..11c5897f 100644
--- a/tests/TestSuite_cvl_vf_support_multicast_address.py
+++ b/tests/TestSuite_cvl_vf_support_multicast_address.py
@@ -30,9 +30,9 @@
 # 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.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.packet import Packet
 
 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..1d24e6a8 100644
--- a/tests/TestSuite_dcf_lifecycle.py
+++ b/tests/TestSuite_dcf_lifecycle.py
@@ -52,12 +52,12 @@ from pprint import pformat
 from functools import partial
 
 
-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
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
+from framework.exception import VerifyFailure
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+import framework.utils as utils
 
 
 class TestDcfLifeCycle(TestCase):
diff --git a/tests/TestSuite_ddp_gtp.py b/tests/TestSuite_ddp_gtp.py
index c992e049..28848207 100644
--- a/tests/TestSuite_ddp_gtp.py
+++ b/tests/TestSuite_ddp_gtp.py
@@ -32,11 +32,11 @@
 import time
 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 framework.utils as utils
+from framework.qemu_kvm import QEMUKvm
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.settings import get_nic_name
 import random
 
 VM_CORES_MASK = 'all'
diff --git a/tests/TestSuite_ddp_gtp_qregion.py b/tests/TestSuite_ddp_gtp_qregion.py
index e7e40cfc..c46fade9 100644
--- a/tests/TestSuite_ddp_gtp_qregion.py
+++ b/tests/TestSuite_ddp_gtp_qregion.py
@@ -32,12 +32,12 @@
 import time
 import re
 import sys
-import utils
+import framework.utils as utils
 from scapy.all import *
-from test_case import TestCase
-from pmd_output import PmdOutput
-from settings import get_nic_name
-import packet
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.settings import get_nic_name
+import framework.packet as packet
 
 
 class TestDdpGtpQregion(TestCase):
diff --git a/tests/TestSuite_ddp_l2tpv3.py b/tests/TestSuite_ddp_l2tpv3.py
index 22ae0be7..477f9adc 100644
--- a/tests/TestSuite_ddp_l2tpv3.py
+++ b/tests/TestSuite_ddp_l2tpv3.py
@@ -35,8 +35,8 @@ l2tpv3 test script.
 """
 import time
 import re
-from test_case import TestCase
-from pmd_output import PmdOutput
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
 from scapy.all import *
 import random
 
diff --git a/tests/TestSuite_ddp_mpls.py b/tests/TestSuite_ddp_mpls.py
index 7c677c3c..9a93a745 100644
--- a/tests/TestSuite_ddp_mpls.py
+++ b/tests/TestSuite_ddp_mpls.py
@@ -31,13 +31,13 @@
 
 import time
 import sys
-import utils 
+import framework.utils as utils 
 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
+from framework.qemu_kvm import QEMUKvm
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.settings import get_nic_name
 import random
 
 VM_CORES_MASK = 'all'
diff --git a/tests/TestSuite_ddp_ppp_l2tp.py b/tests/TestSuite_ddp_ppp_l2tp.py
index 57b8c352..53de7e10 100644
--- a/tests/TestSuite_ddp_ppp_l2tp.py
+++ b/tests/TestSuite_ddp_ppp_l2tp.py
@@ -32,10 +32,10 @@
 import time
 import re
 import sys
-import utils
-from test_case import TestCase
-from pmd_output import PmdOutput
-from settings import get_nic_name
+import framework.utils as utils
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.settings import get_nic_name
 from scapy.all import *
 import random
 
diff --git a/tests/TestSuite_distributor.py b/tests/TestSuite_distributor.py
index cd88977d..f8a1ef6f 100644
--- a/tests/TestSuite_distributor.py
+++ b/tests/TestSuite_distributor.py
@@ -33,10 +33,10 @@
 DPDK Test suite.
 """
 import re
-import utils
+import framework.utils as utils
 import os
-from test_case import TestCase
-from pktgen import PacketGeneratorHelper
+from framework.test_case import TestCase
+from framework.pktgen import PacketGeneratorHelper
 
 
 class TestDistributor(TestCase):
diff --git a/tests/TestSuite_dpdk_gro_lib.py b/tests/TestSuite_dpdk_gro_lib.py
index f5668ad4..72dc20b3 100644
--- a/tests/TestSuite_dpdk_gro_lib.py
+++ b/tests/TestSuite_dpdk_gro_lib.py
@@ -38,10 +38,10 @@ 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
+from framework.test_case import TestCase
+from framework.virt_common import VM
+import tests.vhost_peer_conf as peer
 
 
 class TestDPDKGROLib(TestCase):
diff --git a/tests/TestSuite_dpdk_gso_lib.py b/tests/TestSuite_dpdk_gso_lib.py
index 8cb13a8f..a806f4d3 100644
--- a/tests/TestSuite_dpdk_gso_lib.py
+++ b/tests/TestSuite_dpdk_gso_lib.py
@@ -37,12 +37,12 @@ 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 framework.utils as utils
 import re
-from test_case import TestCase
-from virt_common import VM
-from config import UserConf
-import vhost_peer_conf as peer
+from framework.test_case import TestCase
+from framework.virt_common import VM
+from framework.config import UserConf
+import tests.vhost_peer_conf as peer
 
 
 class TestDPDKGsoLib(TestCase):
diff --git a/tests/TestSuite_dpdk_hugetlbfs_mount_size.py b/tests/TestSuite_dpdk_hugetlbfs_mount_size.py
index 48fdc8ef..c06b7f02 100644
--- a/tests/TestSuite_dpdk_hugetlbfs_mount_size.py
+++ b/tests/TestSuite_dpdk_hugetlbfs_mount_size.py
@@ -34,9 +34,9 @@ This feature is to limit DPDK to use the exact size which is the mounted hugepag
 """
 
 import re
-import utils
+import framework.utils as utils
 import time
-from test_case import TestCase
+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..e2d2c06d 100644
--- a/tests/TestSuite_dual_vlan.py
+++ b/tests/TestSuite_dual_vlan.py
@@ -37,7 +37,7 @@ Test the support of Dual VLAN Offload Features by Poll Mode Drivers.
 
 """
 
-import utils
+import framework.utils as utils
 import random
 import re
 import time
@@ -71,8 +71,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.test_case import TestCase
+from framework.pmd_output import PmdOutput
 
 
 class TestDualVlan(TestCase):
diff --git a/tests/TestSuite_dynamic_config.py b/tests/TestSuite_dynamic_config.py
index 92f15d36..20d57470 100644
--- a/tests/TestSuite_dynamic_config.py
+++ b/tests/TestSuite_dynamic_config.py
@@ -36,11 +36,11 @@ Test the dynamic driver configuration feature.
 
 """
 
-import utils
+import framework.utils as utils
 import time
 
-from test_case import TestCase
-from pmd_output import PmdOutput
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
 
 
 #
diff --git a/tests/TestSuite_dynamic_flowtype.py b/tests/TestSuite_dynamic_flowtype.py
index d60a5822..816dc3f2 100644
--- a/tests/TestSuite_dynamic_flowtype.py
+++ b/tests/TestSuite_dynamic_flowtype.py
@@ -31,10 +31,10 @@
 
 import time
 import re
-import utils
-from test_case import TestCase
-from pmd_output import PmdOutput
-import packet
+import framework.utils as utils
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+import framework.packet as packet
 
 VM_CORES_MASK = 'all'
 
diff --git a/tests/TestSuite_dynamic_queue.py b/tests/TestSuite_dynamic_queue.py
index 9314ff73..4abb0411 100644
--- a/tests/TestSuite_dynamic_queue.py
+++ b/tests/TestSuite_dynamic_queue.py
@@ -31,11 +31,11 @@
 
 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 framework.utils as utils
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.settings import get_nic_name
+from framework.packet import Packet
 import random
 
 test_loop = 3
diff --git a/tests/TestSuite_eeprom_dump.py b/tests/TestSuite_eeprom_dump.py
index 8c2bf4c4..b6afdf15 100644
--- a/tests/TestSuite_eeprom_dump.py
+++ b/tests/TestSuite_eeprom_dump.py
@@ -33,10 +33,10 @@
 """
 DPDK Test suite.
 """
-import utils
+import framework.utils as utils
 import re
-from pmd_output import PmdOutput
-from test_case import TestCase
+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..7779cfe8 100644
--- a/tests/TestSuite_efd.py
+++ b/tests/TestSuite_efd.py
@@ -33,10 +33,10 @@
 DPDK Test suite.
 """
 import re
-import utils
+import framework.utils as utils
 import os
-from test_case import TestCase
-from pktgen import PacketGeneratorHelper
+from framework.test_case import TestCase
+from framework.pktgen import PacketGeneratorHelper
 
 
 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..f3ef897c 100644
--- a/tests/TestSuite_enable_package_download_in_ice_driver.py
+++ b/tests/TestSuite_enable_package_download_in_ice_driver.py
@@ -32,8 +32,8 @@
 import time
 import re
 import os
-from test_case import TestCase
-from pmd_output import PmdOutput
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
 
 class TestEnable_Package_Download_In_Ice_Driver(TestCase):
 
diff --git a/tests/TestSuite_etag.py b/tests/TestSuite_etag.py
index f165c91d..0b5a5674 100644
--- a/tests/TestSuite_etag.py
+++ b/tests/TestSuite_etag.py
@@ -38,15 +38,15 @@ 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 framework.utils as utils
+from framework.qemu_kvm import QEMUKvm
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.exception import VerifyFailure
 
 from scapy.utils import rdpcap
 
-from packet import Packet
+from framework.packet import Packet
 
 VM_CORES_MASK = 'all'
 
diff --git a/tests/TestSuite_ethtool_stats.py b/tests/TestSuite_ethtool_stats.py
index c0032c86..942c0c50 100644
--- a/tests/TestSuite_ethtool_stats.py
+++ b/tests/TestSuite_ethtool_stats.py
@@ -39,14 +39,14 @@ import time
 import os
 import traceback
 
-from utils import create_mask as dts_create_mask
-from test_case import TestCase
-from pmd_output import PmdOutput
-from exception import VerifyFailure
+from framework.utils import create_mask as dts_create_mask
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.exception import VerifyFailure
 
-from packet import Packet
+from framework.packet import Packet
 from scapy.sendrecv import sendp
-from settings import HEADER_SIZE
+from framework.settings import HEADER_SIZE
 from functools import reduce
 
 
diff --git a/tests/TestSuite_eventdev_perf.py b/tests/TestSuite_eventdev_perf.py
index fd142e89..dabf75d6 100644
--- a/tests/TestSuite_eventdev_perf.py
+++ b/tests/TestSuite_eventdev_perf.py
@@ -34,20 +34,20 @@ DPDK Test suite.
 Test userland 10Gb/25Gb/40Gb/100Gb
 """
 
-import utils
+import framework.utils as utils
 import re
 import time
 import os
 
-from test_case import TestCase
+from framework.test_case import TestCase
 from time import sleep
-from settings import HEADER_SIZE
-from pmd_output import PmdOutput
-from etgen import IxiaPacketGenerator
+from framework.settings import HEADER_SIZE
+from framework.pmd_output import PmdOutput
+from framework.etgen import IxiaPacketGenerator
 
-from settings import FOLDERS
-from system_info import SystemInfo
-import perf_report
+from framework.settings import FOLDERS
+from nics.system_info import SystemInfo
+import nics.perf_report as perf_report
 from datetime import datetime
 
 class TestEventdevPerf(TestCase,IxiaPacketGenerator):
diff --git a/tests/TestSuite_eventdev_pipeline.py b/tests/TestSuite_eventdev_pipeline.py
index 33091b6a..04e16c63 100644
--- a/tests/TestSuite_eventdev_pipeline.py
+++ b/tests/TestSuite_eventdev_pipeline.py
@@ -34,13 +34,13 @@ DPDK Test suite.
 Test eventdev pipeline
 """
 
-import utils
+import framework.utils as utils
 import time
 import re
-from test_case import TestCase
+from framework.test_case import TestCase
 import scapy.layers.inet
 from scapy.utils import rdpcap
-from packet import Packet
+from framework.packet import Packet
 
 
 class TestEventdevPipeline(TestCase):
diff --git a/tests/TestSuite_eventdev_pipeline_perf.py b/tests/TestSuite_eventdev_pipeline_perf.py
index 361b47ee..1e89a250 100644
--- a/tests/TestSuite_eventdev_pipeline_perf.py
+++ b/tests/TestSuite_eventdev_pipeline_perf.py
@@ -34,20 +34,20 @@ DPDK Test suite.
 Test userland 10Gb/25Gb/40Gb/100Gb
 """
 
-import utils
+import framework.utils as utils
 import re
 import time
 import os
 
-from test_case import TestCase
+from framework.test_case import TestCase
 from time import sleep
-from settings import HEADER_SIZE
-from pmd_output import PmdOutput
-from etgen import IxiaPacketGenerator
+from framework.settings import HEADER_SIZE
+from framework.pmd_output import PmdOutput
+from framework.etgen import IxiaPacketGenerator
 
-from settings import FOLDERS
-from system_info import SystemInfo
-import perf_report
+from framework.settings import FOLDERS
+from nics.system_info import SystemInfo
+import nics.perf_report as perf_report
 from datetime import datetime
 
 class TestEventdevPipelinePerf(TestCase,IxiaPacketGenerator):
diff --git a/tests/TestSuite_example_build.py b/tests/TestSuite_example_build.py
index 00db2f78..936fb258 100644
--- a/tests/TestSuite_example_build.py
+++ b/tests/TestSuite_example_build.py
@@ -37,7 +37,7 @@ Test example_build.
 
 import time
 import re
-from test_case import TestCase
+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..2f7344fe 100644
--- a/tests/TestSuite_external_memory.py
+++ b/tests/TestSuite_external_memory.py
@@ -37,8 +37,8 @@ Test external memory.
 
 import time
 import re
-import utils
-from test_case import TestCase
+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..6f200666 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.test_case import TestCase
+from framework.pmd_output import PmdOutput
 
 
 class TestExternalMempool(TestCase):
diff --git a/tests/TestSuite_fdir.py b/tests/TestSuite_fdir.py
index 007db26d..6763d401 100644
--- a/tests/TestSuite_fdir.py
+++ b/tests/TestSuite_fdir.py
@@ -41,11 +41,11 @@ import string
 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 framework.utils as utils
+from framework.etgen import IxiaPacketGenerator
+from framework.test_case import TestCase
+from framework.settings import HEADER_SIZE
+from framework.pmd_output import PmdOutput
 
 import sys
 import imp
diff --git a/tests/TestSuite_fips_cryptodev.py b/tests/TestSuite_fips_cryptodev.py
index 8c75d54c..b9f5e4a3 100644
--- a/tests/TestSuite_fips_cryptodev.py
+++ b/tests/TestSuite_fips_cryptodev.py
@@ -30,9 +30,9 @@
 # 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 framework.utils as utils
+from framework.test_case import TestCase
+import tests.cryptodev_common as cc
 import re
 
 class FipCryptodev(TestCase):
diff --git a/tests/TestSuite_firmware_version.py b/tests/TestSuite_firmware_version.py
index 85f08337..5ad03339 100644
--- a/tests/TestSuite_firmware_version.py
+++ b/tests/TestSuite_firmware_version.py
@@ -33,8 +33,8 @@
 """
 DPDK Test suite.
 """
-from pmd_output import PmdOutput
-from test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
 import re
 
 
diff --git a/tests/TestSuite_flexible_rxd.py b/tests/TestSuite_flexible_rxd.py
index 45eb6036..16e179bb 100644
--- a/tests/TestSuite_flexible_rxd.py
+++ b/tests/TestSuite_flexible_rxd.py
@@ -32,9 +32,9 @@
 
 
 import time
-from test_case import TestCase, skip_unsupported_pkg, check_supported_nic
-from flexible_common import FlexibleRxdBase
-import rte_flow_common as rfc
+from framework.test_case import TestCase, skip_unsupported_pkg, check_supported_nic
+from .flexible_common import FlexibleRxdBase
+import tests.rte_flow_common as rfc
 
 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..c4214037 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.virt_dut import VirtDut
+from framework.project_dpdk import DPDKdut
+from framework.dut import Dut
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.settings import HEADER_SIZE
+from framework.packet import Packet
+from framework.utils import RED
 
 
 class TestFloatingVEBSwitching(TestCase):
diff --git a/tests/TestSuite_flow_classify.py b/tests/TestSuite_flow_classify.py
index 67d78734..14e2f862 100644
--- a/tests/TestSuite_flow_classify.py
+++ b/tests/TestSuite_flow_classify.py
@@ -35,13 +35,13 @@ import re
 from collections import Counter
 from datetime import datetime
 
-from packet import Packet
+from framework.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 framework.utils import create_mask as dts_create_mask
+from framework.test_case import TestCase
+from framework.exception import VerifyFailure
+from framework.settings import HEADER_SIZE
 from functools import reduce
 
 
diff --git a/tests/TestSuite_flow_classify_softnic.py b/tests/TestSuite_flow_classify_softnic.py
index e5937289..eb6bf33d 100644
--- a/tests/TestSuite_flow_classify_softnic.py
+++ b/tests/TestSuite_flow_classify_softnic.py
@@ -29,24 +29,24 @@
 # (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 framework.utils as utils
 import re
 import time
 
-from settings import HEADER_SIZE
-from test_case import TestCase
-from pmd_output import PmdOutput
-from settings import DRIVERS
-from crb import Crb
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.settings import DRIVERS
+from framework.crb import Crb
 
-from virt_dut import VirtDut
-from project_dpdk import DPDKdut
-from dut import Dut
-from packet import Packet
+from framework.virt_dut import VirtDut
+from framework.project_dpdk import DPDKdut
+from framework.dut import Dut
+from framework.packet import Packet
 
 import os
 import random
-from exception import VerifyFailure
+from framework.exception import VerifyFailure
 import scapy.layers.inet
 from scapy.utils import rdpcap
 
diff --git a/tests/TestSuite_flow_filtering.py b/tests/TestSuite_flow_filtering.py
index 7d089bc3..a46846fd 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 framework.utils as utils
 import time
 import re
 import os
-import packet
-from test_case import TestCase
-from settings import HEADER_SIZE
+import framework.packet as packet
+from framework.test_case import TestCase
+from framework.settings import HEADER_SIZE
 
 
 class TestFlowFiltering(TestCase):
diff --git a/tests/TestSuite_fortville_rss_granularity_config.py b/tests/TestSuite_fortville_rss_granularity_config.py
index 3ebd5139..64a1922d 100644
--- a/tests/TestSuite_fortville_rss_granularity_config.py
+++ b/tests/TestSuite_fortville_rss_granularity_config.py
@@ -50,9 +50,9 @@ 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 framework.utils as utils
+import framework.dut as dut
+from framework.pmd_output import PmdOutput
 
 testQueues = [16]
 reta_entries = []
@@ -60,7 +60,7 @@ 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..3b20f227 100644
--- a/tests/TestSuite_fortville_rss_input.py
+++ b/tests/TestSuite_fortville_rss_input.py
@@ -50,9 +50,9 @@ 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 framework.utils as utils
+import framework.dut as dut
+from framework.pmd_output import PmdOutput
 
 testQueues = [16]
 reta_entries = []
@@ -60,7 +60,7 @@ 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..d126b8b0 100644
--- a/tests/TestSuite_generic_filter.py
+++ b/tests/TestSuite_generic_filter.py
@@ -36,14 +36,14 @@ Test the support of VLAN Offload Features by Poll Mode Drivers.
 
 """
 
-import utils
+import framework.utils as 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 framework.test_case import TestCase
+from framework.settings import HEADER_SIZE
+from framework.pmd_output import PmdOutput
+from framework.settings import DRIVERS
 
 
 class TestGeneric_filter(TestCase):
diff --git a/tests/TestSuite_generic_flow_api.py b/tests/TestSuite_generic_flow_api.py
index e8171589..82bae0ff 100644
--- a/tests/TestSuite_generic_flow_api.py
+++ b/tests/TestSuite_generic_flow_api.py
@@ -36,24 +36,24 @@ Test the support of generic flow API by Poll Mode Drivers.
 
 """
 
-import utils
+import framework.utils as 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 framework.test_case import TestCase
+from framework.settings import HEADER_SIZE
+from framework.pmd_output import PmdOutput
+from framework.settings import DRIVERS
+from framework.crb import Crb
 
-from virt_dut import VirtDut
-from project_dpdk import DPDKdut
-from dut import Dut
-import packet
+from framework.virt_dut import VirtDut
+from framework.project_dpdk import DPDKdut
+from framework.dut import Dut
+import framework.packet as packet
 
 import os
 import random
-from exception import VerifyFailure
+from framework.exception import VerifyFailure
 import scapy.layers.inet
 from scapy.utils import rdpcap
 
diff --git a/tests/TestSuite_hello_world.py b/tests/TestSuite_hello_world.py
index 8e2ffd90..0bcafe0e 100644
--- a/tests/TestSuite_hello_world.py
+++ b/tests/TestSuite_hello_world.py
@@ -34,8 +34,8 @@ 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..fcbd07df 100644
--- a/tests/TestSuite_hotplug.py
+++ b/tests/TestSuite_hotplug.py
@@ -37,9 +37,9 @@ Test port hot plug.
 
 import time
 import re
-import utils
-from test_case import TestCase
-from packet import Packet
+import framework.utils as utils
+from framework.test_case import TestCase
+from framework.packet import Packet
 import os
 
 
diff --git a/tests/TestSuite_hotplug_mp.py b/tests/TestSuite_hotplug_mp.py
index 9b846a0e..bc4951e1 100644
--- a/tests/TestSuite_hotplug_mp.py
+++ b/tests/TestSuite_hotplug_mp.py
@@ -34,9 +34,9 @@ DPDK Test suite.
 Hotplug Multi-process Test.
 """
 
-import utils
+import framework.utils as utils
 import time
-from test_case import TestCase
+from framework.test_case import TestCase
 import itertools
 
 test_loop = 2
diff --git a/tests/TestSuite_iavf.py b/tests/TestSuite_iavf.py
index 9656b4fc..e0bb1c4c 100644
--- a/tests/TestSuite_iavf.py
+++ b/tests/TestSuite_iavf.py
@@ -40,13 +40,13 @@ 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
+from framework.virt_common import VM
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.packet import Packet
+from framework.settings import get_nic_name
 import random
-from settings import HEADER_SIZE
+from framework.settings import HEADER_SIZE
 
 VM_CORES_MASK = 'Default'
 
diff --git a/tests/TestSuite_iavf_fdir.py b/tests/TestSuite_iavf_fdir.py
index d79829ea..90a6cf8f 100644
--- a/tests/TestSuite_iavf_fdir.py
+++ b/tests/TestSuite_iavf_fdir.py
@@ -33,16 +33,16 @@
 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 rte_flow_common import CVL_TXQ_RXQ_NUMBER
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase, skip_unsupported_pkg
+import tests.rte_flow_common as rfc
+from .rte_flow_common import CVL_TXQ_RXQ_NUMBER
 from multiprocessing import Process
 from multiprocessing import Manager
 
-from utils import GREEN, RED
-import utils
+from framework.utils import GREEN, RED
+import framework.utils as utils
 
 MAC_IPV4_PAY = {
     "match": [
diff --git a/tests/TestSuite_iavf_flexible_descriptor.py b/tests/TestSuite_iavf_flexible_descriptor.py
index e5cd9b3d..667a9641 100644
--- a/tests/TestSuite_iavf_flexible_descriptor.py
+++ b/tests/TestSuite_iavf_flexible_descriptor.py
@@ -35,8 +35,8 @@ import time
 import traceback
 
 
-from test_case import TestCase, skip_unsupported_pkg, check_supported_nic
-from flexible_common import FlexibleRxdBase
+from framework.test_case import TestCase, skip_unsupported_pkg, check_supported_nic
+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..962d1336 100644
--- a/tests/TestSuite_iavf_package_driver_error_handle.py
+++ b/tests/TestSuite_iavf_package_driver_error_handle.py
@@ -32,9 +32,9 @@
 import time
 import re
 import os
-from test_case import TestCase
-from pmd_output import PmdOutput
-from config import UserConf
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.config import UserConf
 
 class Testiavf_package_and_driver_check(TestCase):
 
diff --git a/tests/TestSuite_ieee1588.py b/tests/TestSuite_ieee1588.py
index f737c796..7fcff6ca 100644
--- a/tests/TestSuite_ieee1588.py
+++ b/tests/TestSuite_ieee1588.py
@@ -34,12 +34,12 @@ DPDK Test suite.
 Test support of IEEE1588 Precise Time Protocol.
 """
 
-import utils
+import framework.utils as utils
 import time
 import re
-from test_case import TestCase
-from pmd_output import PmdOutput
-from packet import Packet
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.packet import Packet
 
 DEV_TX_OFFLOAD_MULTI_SEGS = '0x00008000'
 
diff --git a/tests/TestSuite_inline_ipsec.py b/tests/TestSuite_inline_ipsec.py
index 2b9db77e..3826dda2 100644
--- a/tests/TestSuite_inline_ipsec.py
+++ b/tests/TestSuite_inline_ipsec.py
@@ -35,13 +35,13 @@ DPDK Test suite.
 Test inline_ipsec.
 """
 
-import utils
+import framework.utils as utils
 import time
 import re
 import random
 
 from scapy.all import ESP, IP, Ether, sendp, SecurityAssociation
-from test_case import TestCase
+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..947a9615 100644
--- a/tests/TestSuite_interrupt_pmd.py
+++ b/tests/TestSuite_interrupt_pmd.py
@@ -37,8 +37,8 @@ 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..dcfdb62c 100644
--- a/tests/TestSuite_ip_pipeline.py
+++ b/tests/TestSuite_ip_pipeline.py
@@ -29,24 +29,24 @@
 # (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 framework.utils as utils
 import re
 import time
 
-from settings import HEADER_SIZE
-from test_case import TestCase
-from pmd_output import PmdOutput
-from settings import DRIVERS
-from crb import Crb
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.settings import DRIVERS
+from framework.crb import Crb
 
-from virt_dut import VirtDut
-from project_dpdk import DPDKdut
-from dut import Dut
-from packet import Packet
+from framework.virt_dut import VirtDut
+from framework.project_dpdk import DPDKdut
+from framework.dut import Dut
+from framework.packet import Packet
 
 import os
 import random
-from exception import VerifyFailure
+from framework.exception import VerifyFailure
 import scapy.layers.inet
 from scapy.utils import rdpcap
 
diff --git a/tests/TestSuite_ipfrag.py b/tests/TestSuite_ipfrag.py
index e9972659..a5b343e4 100644
--- a/tests/TestSuite_ipfrag.py
+++ b/tests/TestSuite_ipfrag.py
@@ -34,15 +34,15 @@ DPDK Test suite.
 Test IPv4 fragmentation features in DPDK.
 """
 
-import utils
+import framework.utils as utils
 import string
 import re
 import time
 import os
-from settings import HEADER_SIZE
-from packet import Packet
-from pktgen import PacketGeneratorHelper
-from test_case import TestCase
+from framework.settings import HEADER_SIZE
+from framework.packet import Packet
+from framework.pktgen import PacketGeneratorHelper
+from framework.test_case import TestCase
 
 
 lpm_table_ipv4 = [
diff --git a/tests/TestSuite_ipgre.py b/tests/TestSuite_ipgre.py
index 5e7750c5..dfd70ac7 100644
--- a/tests/TestSuite_ipgre.py
+++ b/tests/TestSuite_ipgre.py
@@ -39,12 +39,12 @@ inside virtual point-to-point links over an Internet Protocol network.
 Fortville support GRE packet detecting, checksum computing and filtering.
 """
 
-import utils
+import framework.utils as utils
 import re
 import time
 import os
 
-from packet import Packet
+from framework.packet import Packet
 
 from scapy.utils import wrpcap, rdpcap
 from scapy.packet import split_layers,bind_layers
@@ -52,9 +52,9 @@ from scapy.layers.inet import Ether, IP, TCP, UDP
 from scapy.layers.sctp import SCTP
 from scapy.layers.l2 import GRE
 
-from test_case import TestCase
-from exception import VerifyFailure
-from pmd_output import PmdOutput
+from framework.test_case import TestCase
+from framework.exception import VerifyFailure
+from framework.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..bf08402e 100644
--- a/tests/TestSuite_ipsec_gw_cryptodev_func.py
+++ b/tests/TestSuite_ipsec_gw_cryptodev_func.py
@@ -31,11 +31,11 @@
 
 import binascii
 import time
-import utils
-from test_case import TestCase
-import packet
+import framework.utils as utils
+from framework.test_case import TestCase
+import framework.packet as packet
 
-import cryptodev_common as cc
+import tests.cryptodev_common as cc
 
 class TestIPsecGW(TestCase):
 
diff --git a/tests/TestSuite_ipv4_reassembly.py b/tests/TestSuite_ipv4_reassembly.py
index 0342fb0a..3f5b9a30 100644
--- a/tests/TestSuite_ipv4_reassembly.py
+++ b/tests/TestSuite_ipv4_reassembly.py
@@ -42,8 +42,8 @@ from scapy.utils import struct, socket, PcapWriter
 from scapy.layers.inet import Ether, IP, TCP, fragment
 from scapy.route import *
 
-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..ca3b0fe8 100644
--- a/tests/TestSuite_ixgbe_vf_get_extra_queue_information.py
+++ b/tests/TestSuite_ixgbe_vf_get_extra_queue_information.py
@@ -36,14 +36,14 @@ Test Niantic ixgbe_get_vf_queue Include Extra Information function.
 import time
 import random
 import re
-import utils
+import framework.utils as utils
 
 # 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.pmd_output import PmdOutput
+from framework.virt_common import VM
+from framework.qemu_kvm import QEMUKvm
 
 class TestIxgbeVfGetExtraInfo(TestCase):
 
diff --git a/tests/TestSuite_jumboframes.py b/tests/TestSuite_jumboframes.py
index e277bace..e2c2a362 100644
--- a/tests/TestSuite_jumboframes.py
+++ b/tests/TestSuite_jumboframes.py
@@ -34,12 +34,12 @@ DPDK Test suite.
 Test the support of Jumbo Frames by Poll Mode Drivers
 """
 
-import utils
+import framework.utils as utils
 import re
 from time import sleep
-from test_case import TestCase
-from pmd_output import PmdOutput
-from settings import PROTOCOL_PACKET_SIZE
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.settings import PROTOCOL_PACKET_SIZE
 
 ETHER_HEADER_LEN = 18
 IP_HEADER_LEN = 20
diff --git a/tests/TestSuite_keep_alive.py b/tests/TestSuite_keep_alive.py
index 4d350d79..093988fd 100644
--- a/tests/TestSuite_keep_alive.py
+++ b/tests/TestSuite_keep_alive.py
@@ -37,8 +37,8 @@ Test keep alive
 
 import time
 import re
-import utils
-from test_case import TestCase
+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..b40197cb 100644
--- a/tests/TestSuite_kernelpf_iavf.py
+++ b/tests/TestSuite_kernelpf_iavf.py
@@ -40,13 +40,13 @@ Test some vf function in ice driver
 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.virt_common import VM
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.settings import HEADER_SIZE
+from framework.packet import Packet
+from framework.utils import RED
 
 VM_CORES_MASK = 'all'
 MAX_VLAN = 4095
diff --git a/tests/TestSuite_kni.py b/tests/TestSuite_kni.py
index ba946140..689dca76 100644
--- a/tests/TestSuite_kni.py
+++ b/tests/TestSuite_kni.py
@@ -36,14 +36,14 @@ DPDK Test suite.
 Test Kernel NIC Interface.
 """
 
-import utils
+import framework.utils as utils
 import re
 import os
 import time
 from random import randint
-from pktgen import PacketGeneratorHelper
-from test_case import TestCase
-import packet
+from framework.pktgen import PacketGeneratorHelper
+from framework.test_case import TestCase
+import framework.packet as packet
 
 dut_ports = []
 port_virtual_interaces = []
diff --git a/tests/TestSuite_l2fwd.py b/tests/TestSuite_l2fwd.py
index 091ac093..03dce364 100644
--- a/tests/TestSuite_l2fwd.py
+++ b/tests/TestSuite_l2fwd.py
@@ -34,10 +34,10 @@ 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.test_case import TestCase
+from framework.settings import HEADER_SIZE
+from framework.pktgen import PacketGeneratorHelper
 
 
 class TestL2fwd(TestCase):
diff --git a/tests/TestSuite_l2fwd_cryptodev_func.py b/tests/TestSuite_l2fwd_cryptodev_func.py
index de0c0447..c9671c3c 100644
--- a/tests/TestSuite_l2fwd_cryptodev_func.py
+++ b/tests/TestSuite_l2fwd_cryptodev_func.py
@@ -33,9 +33,9 @@ import hmac
 import hashlib
 import binascii
 import time
-import utils
-from test_case import TestCase
-from packet import Packet
+import framework.utils as utils
+from framework.test_case import TestCase
+from framework.packet import Packet
 
 from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
 from cryptography.hazmat.primitives.ciphers.aead import AESCCM, AESGCM
@@ -47,7 +47,7 @@ from cryptography.hazmat.backends import default_backend
 import CryptoMobile.CM as cm
 import pyDes
 
-import cryptodev_common as cc
+import tests.cryptodev_common as cc
 
 class TestL2fwdCrypto(TestCase):
 
diff --git a/tests/TestSuite_l2fwd_jobstats.py b/tests/TestSuite_l2fwd_jobstats.py
index 6c104168..bd60dc16 100644
--- a/tests/TestSuite_l2fwd_jobstats.py
+++ b/tests/TestSuite_l2fwd_jobstats.py
@@ -37,8 +37,8 @@ Test L2fwd Jobstats
 
 import time
 import re
-import utils
-from test_case import TestCase
+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..5f8dda80 100644
--- a/tests/TestSuite_l2tp_esp_coverage.py
+++ b/tests/TestSuite_l2tp_esp_coverage.py
@@ -31,10 +31,10 @@
 
 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
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase, skip_unsupported_pkg, check_supported_nic
+import tests.rte_flow_common as rfc
 
 vf0_mac = "00:11:22:33:44:55"
 
diff --git a/tests/TestSuite_l3fwd.py b/tests/TestSuite_l3fwd.py
index 4efcca09..6739ac87 100644
--- a/tests/TestSuite_l3fwd.py
+++ b/tests/TestSuite_l3fwd.py
@@ -33,8 +33,8 @@
 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 PerfTestBase, MATCH_MODE, IP_TYPE
 
 
 class TestL3fwd(TestCase, PerfTestBase):
diff --git a/tests/TestSuite_l3fwd_em.py b/tests/TestSuite_l3fwd_em.py
index 4879b503..e148083d 100644
--- a/tests/TestSuite_l3fwd_em.py
+++ b/tests/TestSuite_l3fwd_em.py
@@ -33,8 +33,8 @@
 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 PerfTestBase, MATCH_MODE, IP_TYPE
 
 
 class TestL3fwdEm(TestCase, PerfTestBase):
diff --git a/tests/TestSuite_l3fwd_lpm_ipv4.py b/tests/TestSuite_l3fwd_lpm_ipv4.py
index 3b881e0a..7ce887cb 100644
--- a/tests/TestSuite_l3fwd_lpm_ipv4.py
+++ b/tests/TestSuite_l3fwd_lpm_ipv4.py
@@ -33,8 +33,8 @@
 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 PerfTestBase, MATCH_MODE, IP_TYPE
 
 
 class TestL3fwdLpmIpv4(TestCase, PerfTestBase):
diff --git a/tests/TestSuite_l3fwd_lpm_ipv4_rfc2544.py b/tests/TestSuite_l3fwd_lpm_ipv4_rfc2544.py
index 5b4a0aa3..d167be04 100644
--- a/tests/TestSuite_l3fwd_lpm_ipv4_rfc2544.py
+++ b/tests/TestSuite_l3fwd_lpm_ipv4_rfc2544.py
@@ -33,8 +33,8 @@
 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 PerfTestBase, MATCH_MODE, IP_TYPE
 
 
 class TestL3fwdLpmIpv4Rfc2544(TestCase, PerfTestBase):
diff --git a/tests/TestSuite_l3fwd_lpm_ipv6.py b/tests/TestSuite_l3fwd_lpm_ipv6.py
index e53e4f77..bafd91c8 100644
--- a/tests/TestSuite_l3fwd_lpm_ipv6.py
+++ b/tests/TestSuite_l3fwd_lpm_ipv6.py
@@ -33,8 +33,8 @@
 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 PerfTestBase, MATCH_MODE, IP_TYPE
 
 
 class TestL3fwdLpmIpv6(TestCase, PerfTestBase):
diff --git a/tests/TestSuite_l3fwdacl.py b/tests/TestSuite_l3fwdacl.py
index 4cc51d40..90905251 100644
--- a/tests/TestSuite_l3fwdacl.py
+++ b/tests/TestSuite_l3fwdacl.py
@@ -35,10 +35,10 @@ Layer-3 forwarding ACL test script.
 """
 
 import re
-import utils
+import framework.utils as utils
 import time
-from test_case import TestCase
-import packet
+from framework.test_case import TestCase
+import framework.packet as packet
 
 class TestL3fwdacl(TestCase):
 
diff --git a/tests/TestSuite_large_vf.py b/tests/TestSuite_large_vf.py
index 84f592d1..68002c9b 100644
--- a/tests/TestSuite_large_vf.py
+++ b/tests/TestSuite_large_vf.py
@@ -32,11 +32,11 @@
 import re
 import time
 
-from packet import Packet
-from pmd_output import PmdOutput
-from test_case import TestCase
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
 
-from utils import GREEN, RED
+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..89b84aaf 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 framework.utils as utils
 import re
 import os
 
 from time import sleep
-from test_case import TestCase
-from pmd_output import PmdOutput
-from settings import HEADER_SIZE
-from pktgen import PacketGeneratorHelper
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.settings import HEADER_SIZE
+from framework.pktgen import PacketGeneratorHelper
 
 
 class TestLinkFlowctrl(TestCase):
diff --git a/tests/TestSuite_link_status_interrupt.py b/tests/TestSuite_link_status_interrupt.py
index 2e8c282e..c9aa35bd 100644
--- a/tests/TestSuite_link_status_interrupt.py
+++ b/tests/TestSuite_link_status_interrupt.py
@@ -35,12 +35,12 @@ DPDK Test suite.
 Test link status.
 """
 
-import utils
+import framework.utils as utils
 import string
 import time
 import re
-from test_case import TestCase
-from packet import Packet
+from framework.test_case import TestCase
+from framework.packet import Packet
 
 
 class TestLinkStatusInterrupt(TestCase):
diff --git a/tests/TestSuite_linux_modules.py b/tests/TestSuite_linux_modules.py
index a5a1542a..8bc864e6 100644
--- a/tests/TestSuite_linux_modules.py
+++ b/tests/TestSuite_linux_modules.py
@@ -37,8 +37,8 @@ Linux Kernel Modules example.
 import os
 import time
 
-from pmd_output import PmdOutput
-from test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.test_case import TestCase
 
 from framework import settings
 
diff --git a/tests/TestSuite_loadbalancer.py b/tests/TestSuite_loadbalancer.py
index 84e534c9..5cb44466 100644
--- a/tests/TestSuite_loadbalancer.py
+++ b/tests/TestSuite_loadbalancer.py
@@ -36,10 +36,10 @@ Test Load Balancer.
 
 """
 
-import dts
-from packet import Packet
-from test_case import TestCase
-import utils
+import framework.dts as dts
+from framework.packet import Packet
+from framework.test_case import TestCase
+import framework.utils as utils
 import time
 
 
diff --git a/tests/TestSuite_loopback_multi_paths_port_restart.py b/tests/TestSuite_loopback_multi_paths_port_restart.py
index 972a8b25..556d449e 100644
--- a/tests/TestSuite_loopback_multi_paths_port_restart.py
+++ b/tests/TestSuite_loopback_multi_paths_port_restart.py
@@ -37,11 +37,11 @@ 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 framework.utils as utils
 import time
 import re
-from pmd_output import PmdOutput
-from test_case import TestCase
+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..d76b63e6 100644
--- a/tests/TestSuite_loopback_multi_queues.py
+++ b/tests/TestSuite_loopback_multi_queues.py
@@ -36,11 +36,11 @@ Includes Mergeable, Normal, Vector_RX, Inorder mergeable,
 Inorder no-mergeable, Virtio 1.1 mergeable, Virtio 1.1 no-mergeable Path.
 """
 
-import utils
+import framework.utils as utils
 import time
 import re
-from pmd_output import PmdOutput
-from test_case import TestCase
+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..8531f647 100644
--- a/tests/TestSuite_loopback_virtio_user_server_mode.py
+++ b/tests/TestSuite_loopback_virtio_user_server_mode.py
@@ -35,11 +35,11 @@
 DPDK Test suite.
 Test loopback virtio-user server mode
 """
-import utils
+import framework.utils as utils
 import time
 import re
-from pmd_output import PmdOutput
-from test_case import TestCase
+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..7742ad58 100644
--- a/tests/TestSuite_mac_filter.py
+++ b/tests/TestSuite_mac_filter.py
@@ -34,11 +34,11 @@ DPDK Test suite.
 Test the support of Allowlist Features by Poll Mode Drivers
 """
 
-import utils
+import framework.utils as utils
 import time
-from test_case import TestCase
-from pmd_output import PmdOutput
-from packet import Packet
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.packet import Packet
 import operator
 
 class TestMacFilter(TestCase):
diff --git a/tests/TestSuite_macsec_for_ixgbe.py b/tests/TestSuite_macsec_for_ixgbe.py
index 4b010d08..a9f793ae 100644
--- a/tests/TestSuite_macsec_for_ixgbe.py
+++ b/tests/TestSuite_macsec_for_ixgbe.py
@@ -33,10 +33,10 @@ 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.test_case import TestCase
+from framework.dut import Dut
+from framework.pktgen import PacketGeneratorHelper
+from framework.packet import Packet
 
 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..3da9dfba 100644
--- a/tests/TestSuite_malicious_driver_event_indication.py
+++ b/tests/TestSuite_malicious_driver_event_indication.py
@@ -38,12 +38,12 @@ import re
 import time
 import traceback
 from contextlib import contextmanager
-from pmd_output import PmdOutput
+from framework.pmd_output import PmdOutput
 
 
-from exception import VerifyFailure
-from test_case import TestCase
-import utils
+from framework.exception import VerifyFailure
+from framework.test_case import TestCase
+import framework.utils as utils
 
 
 class TestSuiteMaliciousDrvEventIndication(TestCase):
diff --git a/tests/TestSuite_mdd.py b/tests/TestSuite_mdd.py
index 8aad1a72..cd07ae81 100644
--- a/tests/TestSuite_mdd.py
+++ b/tests/TestSuite_mdd.py
@@ -37,10 +37,10 @@ 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.virt_common import VM
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
 
 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..b80054dc 100644
--- a/tests/TestSuite_metering_and_policing.py
+++ b/tests/TestSuite_metering_and_policing.py
@@ -34,15 +34,15 @@ Test metering_and_policing.
 """
 
 import os
-import utils
+import framework.utils as utils
 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
+from framework.test_case import TestCase
+from framework.plotting import Plotting
+from framework.settings import HEADER_SIZE
+from framework.dut import Dut
+from framework.pmd_output import PmdOutput
 
 
 class TestMeteringAndPolicing(TestCase):
diff --git a/tests/TestSuite_metrics.py b/tests/TestSuite_metrics.py
index d1b7fe9c..fd5013e5 100644
--- a/tests/TestSuite_metrics.py
+++ b/tests/TestSuite_metrics.py
@@ -41,13 +41,13 @@ 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.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.exception import VerifyFailure
+from framework.settings import HEADER_SIZE
+from framework.packet import Packet
+from framework.pktgen import TRANSMIT_CONT
+from framework.config import SuiteConf
 
 
 class TestMetrics(TestCase):
diff --git a/tests/TestSuite_mtu_update.py b/tests/TestSuite_mtu_update.py
index f1da8660..bf25d81e 100644
--- a/tests/TestSuite_mtu_update.py
+++ b/tests/TestSuite_mtu_update.py
@@ -39,20 +39,20 @@ import subprocess
 from time import sleep
 from typing import List, Tuple
 
-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
 
-from pktgen_base import TRANSMIT_S_BURST
+from framework.pktgen_base import TRANSMIT_S_BURST
 
-import utils
+import framework.utils as utils
 import re
 import time
-from test_case import TestCase
-from pktgen import TRANSMIT_CONT
+from framework.test_case import TestCase
+from framework.pktgen import TRANSMIT_CONT
 
-from packet import Packet
-from settings import HEADER_SIZE
+from framework.packet import Packet
+from framework.settings import HEADER_SIZE
 
 ETHER_HEADER_LEN = 18
 VLAN=4
diff --git a/tests/TestSuite_multicast.py b/tests/TestSuite_multicast.py
index a163a151..6d6a7ed0 100644
--- a/tests/TestSuite_multicast.py
+++ b/tests/TestSuite_multicast.py
@@ -36,8 +36,8 @@ multicast test script.
 """
 
 import time
-from test_case import TestCase
-import utils
+from framework.test_case import TestCase
+import framework.utils as utils
 
 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..58c8abd9 100644
--- a/tests/TestSuite_multiple_pthread.py
+++ b/tests/TestSuite_multiple_pthread.py
@@ -34,9 +34,9 @@ import os
 import re
 import random
 import string
-import utils
-from test_case import TestCase
-from packet import Packet
+import framework.utils as utils
+from framework.test_case import TestCase
+from framework.packet import Packet
 
 
 class TestMultiplePthread(TestCase):
diff --git a/tests/TestSuite_multiprocess.py b/tests/TestSuite_multiprocess.py
index 743ca1f3..a5985178 100644
--- a/tests/TestSuite_multiprocess.py
+++ b/tests/TestSuite_multiprocess.py
@@ -34,13 +34,13 @@ DPDK Test suite.
 Multi-process Test.
 """
 
-import utils
+import framework.utils as utils
 import time
 import os
 
 executions = []
-from test_case import TestCase
-from pktgen import PacketGeneratorHelper
+from framework.test_case import TestCase
+from framework.pktgen import PacketGeneratorHelper
 
 
 class TestMultiprocess(TestCase):
diff --git a/tests/TestSuite_netmap_compat.py b/tests/TestSuite_netmap_compat.py
index 31fa684c..787098d1 100644
--- a/tests/TestSuite_netmap_compat.py
+++ b/tests/TestSuite_netmap_compat.py
@@ -35,11 +35,11 @@ DPDK Test suite.
 Test Netmap_compat.
 """
 
-import utils
+import framework.utils as utils
 import string
 import time
 import re
-from test_case import TestCase
+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..45adf06a 100644
--- a/tests/TestSuite_nic_single_core_perf.py
+++ b/tests/TestSuite_nic_single_core_perf.py
@@ -32,18 +32,18 @@
 DPDK Test suite.
 """
 
-import utils
+import framework.utils as 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 framework.test_case import TestCase
+from framework.exception import VerifyFailure
+from framework.settings import HEADER_SIZE, UPDATE_EXPECTED, load_global_setting
+from framework.pmd_output import PmdOutput
 from copy import deepcopy
 from numpy import mean
-import rst
-from pktgen import PacketGeneratorHelper
+import framework.rst as rst
+from framework.pktgen import PacketGeneratorHelper
 
 
 class TestNicSingleCorePerf(TestCase):
diff --git a/tests/TestSuite_ntb.py b/tests/TestSuite_ntb.py
index e5013132..fe037057 100644
--- a/tests/TestSuite_ntb.py
+++ b/tests/TestSuite_ntb.py
@@ -32,11 +32,11 @@
 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.test_case import TestCase
+from nics.net_device import GetNicObj
+from framework.settings import HEADER_SIZE
+from framework.packet import Packet
+from framework.pktgen import PacketGeneratorHelper
 
 class TestNtb(TestCase):
 
diff --git a/tests/TestSuite_nvgre.py b/tests/TestSuite_nvgre.py
index 1b1a50db..7b3a04bb 100644
--- a/tests/TestSuite_nvgre.py
+++ b/tests/TestSuite_nvgre.py
@@ -36,13 +36,13 @@ Test NVGRE features in DPDK.
 
 """
 
-import utils
+import framework.utils as utils
 import string
 import re
 import time
 import os
-from pmd_output import PmdOutput
-from packet import IncreaseIP, IncreaseIPv6
+from framework.pmd_output import PmdOutput
+from framework.packet import IncreaseIP, IncreaseIPv6
 from random import randint
 
 from socket import AF_INET6
@@ -55,8 +55,8 @@ from scapy.sendrecv import sniff
 from scapy.config import conf
 from scapy.route import *
 
-from test_case import TestCase
-from settings import HEADER_SIZE
+from framework.test_case import TestCase
+from framework.settings import HEADER_SIZE
 
 #
 #
diff --git a/tests/TestSuite_packet_capture.py b/tests/TestSuite_packet_capture.py
index 4b980558..b41e7594 100644
--- a/tests/TestSuite_packet_capture.py
+++ b/tests/TestSuite_packet_capture.py
@@ -46,10 +46,10 @@ 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 framework.test_case import TestCase
+from framework.exception import VerifyFailure
+from framework.pmd_output import PmdOutput
+from framework.packet import Packet
 
 
 # These source code copy from packet.py module before sniff_packets/load_sniff_packets
diff --git a/tests/TestSuite_packet_ordering.py b/tests/TestSuite_packet_ordering.py
index 807a3c0d..7cb2ad8e 100644
--- a/tests/TestSuite_packet_ordering.py
+++ b/tests/TestSuite_packet_ordering.py
@@ -36,9 +36,9 @@ 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.test_case import TestCase
+from framework.packet import Packet
 
 
 class TestPacketOrdering(TestCase):
diff --git a/tests/TestSuite_perf_virtio_user_loopback.py b/tests/TestSuite_perf_virtio_user_loopback.py
index 4408786c..8e7df7e9 100644
--- a/tests/TestSuite_perf_virtio_user_loopback.py
+++ b/tests/TestSuite_perf_virtio_user_loopback.py
@@ -37,16 +37,16 @@ Inorder non-mergeable, packed ring mergeable, non-mergeable, inorder mergeable,
 inorder non-mergeable Path.
 """
 
-import utils
+import framework.utils as utils
 import time
 import re
 import json
-import rst
+import framework.rst as rst
 import os
-from pmd_output import PmdOutput
+from framework.pmd_output import PmdOutput
 from copy import deepcopy
-from test_case import TestCase
-from settings import UPDATE_EXPECTED, load_global_setting
+from framework.test_case import TestCase
+from framework.settings import UPDATE_EXPECTED, load_global_setting
 
 
 class TestPerfVirtioUserLoopback(TestCase):
diff --git a/tests/TestSuite_perf_virtio_user_pvp.py b/tests/TestSuite_perf_virtio_user_pvp.py
index 344dba5a..3789f244 100644
--- a/tests/TestSuite_perf_virtio_user_pvp.py
+++ b/tests/TestSuite_perf_virtio_user_pvp.py
@@ -32,15 +32,15 @@
 """
 DPDK Test suite.
 """
-import utils
+import framework.utils as utils
 import json
-import rst
+import framework.rst as 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 framework.test_case import TestCase
+from framework.packet import Packet
+from framework.settings import UPDATE_EXPECTED, load_global_setting
 from copy import deepcopy
 
 
diff --git a/tests/TestSuite_perf_vm2vm_virtio_net_perf.py b/tests/TestSuite_perf_vm2vm_virtio_net_perf.py
index ac0e38a2..672bbe39 100644
--- a/tests/TestSuite_perf_vm2vm_virtio_net_perf.py
+++ b/tests/TestSuite_perf_vm2vm_virtio_net_perf.py
@@ -40,15 +40,15 @@ please use qemu version greater 4.1.94 which support packed feathur to test this
 """
 import re
 import os
-import rst
+import framework.rst as rst
 import json
 import time
 import string
 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
+from framework.virt_common import VM
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.settings import UPDATE_EXPECTED, load_global_setting
 from copy import deepcopy
 
 
diff --git a/tests/TestSuite_performance_thread.py b/tests/TestSuite_performance_thread.py
index 3ff20150..9e138d08 100644
--- a/tests/TestSuite_performance_thread.py
+++ b/tests/TestSuite_performance_thread.py
@@ -35,10 +35,10 @@ 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.test_case import TestCase
+from framework.settings import HEADER_SIZE
+from framework.pktgen import PacketGeneratorHelper
 
 
 class TestPerformanceThread(TestCase):
diff --git a/tests/TestSuite_pf_smoke.py b/tests/TestSuite_pf_smoke.py
index 63eb2c7e..e4dffdaf 100644
--- a/tests/TestSuite_pf_smoke.py
+++ b/tests/TestSuite_pf_smoke.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.
 
-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 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
 
 
 class TestPfSmoke(TestCase):
diff --git a/tests/TestSuite_pipeline.py b/tests/TestSuite_pipeline.py
index e00f2e9b..ba7131ec 100644
--- a/tests/TestSuite_pipeline.py
+++ b/tests/TestSuite_pipeline.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 utils
+import framework.utils as utils
 import re
 import time
 import socket
 
-from settings import HEADER_SIZE
-from test_case import TestCase
-from pmd_output import PmdOutput
-from settings import DRIVERS
-from crb import Crb
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.settings import DRIVERS
+from framework.crb import Crb
 
-from virt_dut import VirtDut
-from project_dpdk import DPDKdut
-from dut import Dut
-from packet import Packet
+from framework.virt_dut import VirtDut
+from framework.project_dpdk import DPDKdut
+from framework.dut import Dut
+from framework.packet import Packet
 
 import os
 import random
-from exception import VerifyFailure
+from framework.exception import VerifyFailure
 import scapy.layers.inet
 from scapy.utils import rdpcap
 
diff --git a/tests/TestSuite_pmd.py b/tests/TestSuite_pmd.py
index 48d35831..72f0e473 100644
--- a/tests/TestSuite_pmd.py
+++ b/tests/TestSuite_pmd.py
@@ -34,21 +34,21 @@ DPDK Test suite.
 Test userland 10Gb PMD
 """
 
-import utils
+import framework.utils as utils
 import re
 import time
 import os
 
-from test_case import TestCase
+from framework.test_case import TestCase
 from time import sleep
-from settings import HEADER_SIZE
-from pmd_output import PmdOutput
+from framework.settings import HEADER_SIZE
+from framework.pmd_output import PmdOutput
 
-from settings import FOLDERS
-from system_info import SystemInfo
-import perf_report
+from framework.settings import FOLDERS
+from nics.system_info import SystemInfo
+import nics.perf_report as perf_report
 from datetime import datetime
-from pktgen import PacketGeneratorHelper
+from framework.pktgen import PacketGeneratorHelper
 
 class TestPmd(TestCase):
 
diff --git a/tests/TestSuite_pmd_bonded.py b/tests/TestSuite_pmd_bonded.py
index c5c1a667..253c1a69 100644
--- a/tests/TestSuite_pmd_bonded.py
+++ b/tests/TestSuite_pmd_bonded.py
@@ -43,11 +43,11 @@ import random
 from socket import htons, htonl
 from functools import wraps
 
-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.test_case import TestCase
+from framework.exception import TimeoutException
+from framework.settings import TIMEOUT
+from framework.pmd_output import PmdOutput
 
 SOCKET_0 = 0
 SOCKET_1 = 1
diff --git a/tests/TestSuite_pmd_bonded_8023ad.py b/tests/TestSuite_pmd_bonded_8023ad.py
index 37070421..cdac97ec 100644
--- a/tests/TestSuite_pmd_bonded_8023ad.py
+++ b/tests/TestSuite_pmd_bonded_8023ad.py
@@ -34,12 +34,12 @@ import re
 import traceback
 
 # import dts/framework libs
-from test_case import TestCase
-from exception import VerifyFailure
+from framework.test_case import TestCase
+from framework.exception import VerifyFailure
 
 # import bonding lib(common methods for pmd bonding command)
-import bonding
-from bonding import MODE_LACP, FRAME_SIZE_64
+import tests.bonding as 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..66dc00eb 100644
--- a/tests/TestSuite_pmd_stacked_bonded.py
+++ b/tests/TestSuite_pmd_stacked_bonded.py
@@ -33,13 +33,13 @@ import time
 import traceback
 
 # import dts/framework libs
-import utils
-from test_case import TestCase
-from exception import VerifyFailure
+import framework.utils as utils
+from framework.test_case import TestCase
+from framework.exception import VerifyFailure
 
 # import bonding lib
-import bonding
-from bonding import (
+import tests.bonding as bonding
+from .bonding import (
                 MODE_ROUND_ROBIN,
                 MODE_ACTIVE_BACKUP,
                 MODE_XOR_BALANCE,
diff --git a/tests/TestSuite_pmdpcap.py b/tests/TestSuite_pmdpcap.py
index 0913e9bf..e08dc61c 100644
--- a/tests/TestSuite_pmdpcap.py
+++ b/tests/TestSuite_pmdpcap.py
@@ -31,12 +31,12 @@
 
 '''
 '''
-from test_case import TestCase
+from framework.test_case import TestCase
 
 from time import sleep
 from scapy.layers.inet import Ether, IP
 from scapy.utils import wrpcap
-import utils
+import framework.utils as utils
 
 
 #
diff --git a/tests/TestSuite_pmdrss_hash.py b/tests/TestSuite_pmdrss_hash.py
index 9ea6f9ae..4e9dd459 100644
--- a/tests/TestSuite_pmdrss_hash.py
+++ b/tests/TestSuite_pmdrss_hash.py
@@ -39,7 +39,7 @@ Support 4*10G, 1*40G and 2*40G NICs.
 import time
 import random
 import re
-import utils
+import framework.utils as utils
 
 queue = 16
 reta_entries = []
@@ -60,7 +60,7 @@ 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..230d588b 100644
--- a/tests/TestSuite_pmdrssreta.py
+++ b/tests/TestSuite_pmdrssreta.py
@@ -36,7 +36,7 @@ Test RSS reta (redirection table) update function.
 import time
 import random
 import re
-import utils
+import framework.utils as utils
 import textwrap
 testQueues = [2, 9, 16]
 reta_entries = []
@@ -44,8 +44,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 pmd_output import PmdOutput
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
 
 
 class TestPmdrssreta(TestCase):
diff --git a/tests/TestSuite_port_control.py b/tests/TestSuite_port_control.py
index e8d96f5a..7a87808e 100644
--- a/tests/TestSuite_port_control.py
+++ b/tests/TestSuite_port_control.py
@@ -30,13 +30,13 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 import os
-import utils
+import framework.utils as utils
 import time
 import re
-import packet
-from test_case import TestCase
-from pmd_output import PmdOutput
-from virt_common import VM
+import framework.packet as packet
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+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..51ec9982 100644
--- a/tests/TestSuite_port_representor.py
+++ b/tests/TestSuite_port_representor.py
@@ -39,10 +39,10 @@ independent on the control plane and data plane.
 import time
 import re
 
-from test_case import TestCase
-from dut import Dut
-from packet import Packet
-from pmd_output import PmdOutput
+from framework.test_case import TestCase
+from framework.dut import Dut
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
 
 
 class TestPortRepresentor(TestCase):
diff --git a/tests/TestSuite_power_bidirection_channel.py b/tests/TestSuite_power_bidirection_channel.py
index 1aa02976..6f1a71cb 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.utils import create_mask as dts_create_mask
+from framework.qemu_libvirt import LibvirtKvm
+from framework.exception import VerifyFailure
+from framework.test_case import TestCase
 
 
 class TestPowerBidirectionChannel(TestCase):
diff --git a/tests/TestSuite_power_branch_ratio.py b/tests/TestSuite_power_branch_ratio.py
index a157539a..9b7ed953 100644
--- a/tests/TestSuite_power_branch_ratio.py
+++ b/tests/TestSuite_power_branch_ratio.py
@@ -42,15 +42,15 @@ 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.settings import load_global_setting
+from framework.settings import HOST_BUILD_TYPE_SETTING
+from framework.utils import create_mask as dts_create_mask
+from framework.qemu_libvirt import LibvirtKvm
+from framework.pktgen import TRANSMIT_CONT
+from framework.exception import VerifyFailure
+from framework.settings import HEADER_SIZE
+from framework.packet import Packet
+from framework.test_case import TestCase
 
 
 class TestPowerBranchRatio(TestCase):
diff --git a/tests/TestSuite_power_empty_poll.py b/tests/TestSuite_power_empty_poll.py
index bb69656d..0e44c475 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.utils import create_mask as dts_create_mask
+from framework.exception import VerifyFailure
+from framework.test_case import TestCase
+from framework.settings import HEADER_SIZE, PKTGEN_TREX
+from framework.packet import Packet
+from framework.pktgen import TRANSMIT_CONT
 
 
 class TestPowerEmptyPoll(TestCase):
diff --git a/tests/TestSuite_power_negative.py b/tests/TestSuite_power_negative.py
index f6d41491..e28e7334 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.utils import create_mask as dts_create_mask
+from framework.qemu_libvirt import LibvirtKvm
+from framework.exception import VerifyFailure
+from framework.test_case import TestCase
 
 
 class TestPowerNegative(TestCase):
diff --git a/tests/TestSuite_power_pbf.py b/tests/TestSuite_power_pbf.py
index 083fd5b3..be7fa8a0 100644
--- a/tests/TestSuite_power_pbf.py
+++ b/tests/TestSuite_power_pbf.py
@@ -39,12 +39,12 @@ 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
+# import framework.dts as dts libs
+from framework.settings import load_global_setting
+from framework.settings import HOST_BUILD_TYPE_SETTING
+from framework.test_case import TestCase
+from framework.exception import VerifyFailure
+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..ed3d78ea 100644
--- a/tests/TestSuite_power_pstate.py
+++ b/tests/TestSuite_power_pstate.py
@@ -37,10 +37,10 @@ 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
+# import framework.dts as dts libs
+from framework.test_case import TestCase
+from framework.exception import VerifyFailure
+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..6b94f171 100644
--- a/tests/TestSuite_power_telemetry.py
+++ b/tests/TestSuite_power_telemetry.py
@@ -42,15 +42,15 @@ 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.settings import load_global_setting
+from framework.settings import HOST_BUILD_TYPE_SETTING
+from framework.utils import create_mask as dts_create_mask
+from framework.settings import HEADER_SIZE
+from framework.test_case import TestCase
+from framework.pktgen import TRANSMIT_CONT
+from framework.exception import VerifyFailure
+
+from framework.packet import Packet
 
 
 class TestPowerTelemetry(TestCase):
diff --git a/tests/TestSuite_ptpclient.py b/tests/TestSuite_ptpclient.py
index 858d5f46..dd0daafd 100644
--- a/tests/TestSuite_ptpclient.py
+++ b/tests/TestSuite_ptpclient.py
@@ -34,10 +34,10 @@ DPDK Test suite.
 Test support of IEEE1588 Precise Time Protocol.
 """
 
-import utils
+import framework.utils as utils
 import re
 import time
-from test_case import TestCase
+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..a5e04774 100644
--- a/tests/TestSuite_ptype_mapping.py
+++ b/tests/TestSuite_ptype_mapping.py
@@ -30,11 +30,11 @@
 # 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 framework.utils as utils
+from framework.test_case import TestCase
+from framework.exception import VerifyFailure
+from framework.pmd_output import PmdOutput
+from framework.packet import Packet
 import time
 import re
 
diff --git a/tests/TestSuite_pvp_diff_qemu_version.py b/tests/TestSuite_pvp_diff_qemu_version.py
index bdf3f67c..e00151e9 100644
--- a/tests/TestSuite_pvp_diff_qemu_version.py
+++ b/tests/TestSuite_pvp_diff_qemu_version.py
@@ -40,12 +40,12 @@ qemu =
 """
 import re
 import time
-import utils
+import framework.utils as 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
+from framework.test_case import TestCase
+from framework.settings import HEADER_SIZE
+from framework.virt_common import VM
+from framework.pktgen import PacketGeneratorHelper
 
 
 class TestVhostPVPDiffQemuVersion(TestCase):
diff --git a/tests/TestSuite_pvp_multi_paths_performance.py b/tests/TestSuite_pvp_multi_paths_performance.py
index 11db11ee..8ef9b085 100644
--- a/tests/TestSuite_pvp_multi_paths_performance.py
+++ b/tests/TestSuite_pvp_multi_paths_performance.py
@@ -34,15 +34,15 @@ DPDK Test suite.
 Test PVP performance using virtio_user on 8 tx/rx path.
 """
 import json
-import rst
+import framework.rst as 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
+import framework.utils as utils
+from framework.test_case import TestCase
+from framework.packet import Packet
+from framework.pktgen import PacketGeneratorHelper
+from framework.settings import UPDATE_EXPECTED, load_global_setting
 from copy import deepcopy
-from pmd_output import PmdOutput
+from framework.pmd_output import PmdOutput
 
 
 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..bc32e793 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,15 @@ Test PVP vhost single core performance using virtio_user on 8 tx/rx path.
 """
 
 import json
-import rst
+import framework.rst as 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
+import framework.utils as utils
+from framework.test_case import TestCase
+from framework.packet import Packet
+from framework.pktgen import PacketGeneratorHelper
+from framework.settings import UPDATE_EXPECTED, load_global_setting
 from copy import deepcopy
-from pmd_output import PmdOutput
+from framework.pmd_output import PmdOutput
 
 
 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..620bdcc3 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,15 @@ Test PVP virtio single core performance using virtio_user on 8 tx/rx path.
 """
 
 import json
-import rst
+import framework.rst as 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
+import framework.utils as utils
+from framework.test_case import TestCase
+from framework.packet import Packet
+from framework.pktgen import PacketGeneratorHelper
+from framework.settings import UPDATE_EXPECTED, load_global_setting
 from copy import deepcopy
-from pmd_output import PmdOutput
+from framework.pmd_output import PmdOutput
 
 
 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..b4306eea 100644
--- a/tests/TestSuite_pvp_qemu_multi_paths_port_restart.py
+++ b/tests/TestSuite_pvp_qemu_multi_paths_port_restart.py
@@ -38,13 +38,13 @@ includes Mergeable, Normal, Vector_RX.
 Cover virtio 1.0 and virtio 0.95.Also cover
 port restart test with each path
 """
-import utils
+import framework.utils as utils
 import time
 import re
-from virt_common import VM
-from test_case import TestCase
-from packet import Packet
-from pktgen import PacketGeneratorHelper
+from framework.virt_common import VM
+from framework.test_case import TestCase
+from framework.packet import Packet
+from framework.pktgen import PacketGeneratorHelper
 
 
 class TestPVPQemuMultiPathPortRestart(TestCase):
diff --git a/tests/TestSuite_pvp_share_lib.py b/tests/TestSuite_pvp_share_lib.py
index 6746ff89..1d24a032 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.test_case import TestCase
+from framework.settings import HEADER_SIZE
+from framework.pktgen import PacketGeneratorHelper
 
 
 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..b1843749 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,13 @@
 DPDK Test suite.
 """
 
-import utils
+import framework.utils as utils
 import time
 import re
-from test_case import TestCase
-from settings import HEADER_SIZE
-from pktgen import PacketGeneratorHelper
-from pmd_output import PmdOutput
+from framework.test_case import TestCase
+from framework.settings import HEADER_SIZE
+from framework.pktgen import PacketGeneratorHelper
+from framework.pmd_output import PmdOutput
 
 
 class TestPVPVhostUserBuiltInNetDriver(TestCase):
diff --git a/tests/TestSuite_pvp_vhost_user_reconnect.py b/tests/TestSuite_pvp_vhost_user_reconnect.py
index 4be19c5a..fd880bd3 100644
--- a/tests/TestSuite_pvp_vhost_user_reconnect.py
+++ b/tests/TestSuite_pvp_vhost_user_reconnect.py
@@ -37,12 +37,12 @@ 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 framework.utils as utils
 import time
-from test_case import TestCase
-from virt_common import VM
-from packet import Packet
-from pktgen import PacketGeneratorHelper
+from framework.test_case import TestCase
+from framework.virt_common import VM
+from framework.packet import Packet
+from framework.pktgen import PacketGeneratorHelper
 
 
 class TestPVPVhostUserReconnect(TestCase):
diff --git a/tests/TestSuite_pvp_virtio_bonding.py b/tests/TestSuite_pvp_virtio_bonding.py
index e6d0e61a..d5b67769 100644
--- a/tests/TestSuite_pvp_virtio_bonding.py
+++ b/tests/TestSuite_pvp_virtio_bonding.py
@@ -36,12 +36,12 @@ 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.test_case import TestCase
+from framework.virt_common import VM
+from framework.pmd_output import PmdOutput
+from framework.packet import Packet
+from framework.pktgen import PacketGeneratorHelper
 
 
 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..4174fe80 100644
--- a/tests/TestSuite_pvp_virtio_user_2M_hugepages.py
+++ b/tests/TestSuite_pvp_virtio_user_2M_hugepages.py
@@ -34,11 +34,11 @@ DPDK Test suite.
 vhost/virtio-user pvp with 2M hugepage.
 """
 
-import utils
+import framework.utils as utils
 import time
-from test_case import TestCase
-from settings import HEADER_SIZE
-from pktgen import PacketGeneratorHelper
+from framework.test_case import TestCase
+from framework.settings import HEADER_SIZE
+from framework.pktgen import PacketGeneratorHelper
 
 
 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..4681a48a 100644
--- a/tests/TestSuite_pvp_virtio_user_4k_pages.py
+++ b/tests/TestSuite_pvp_virtio_user_4k_pages.py
@@ -34,11 +34,11 @@ DPDK Test suite.
 vhost/virtio-user pvp with 4K pages.
 """
 
-import utils
+import framework.utils as utils
 import time
-from test_case import TestCase
-from packet import Packet
-from pktgen import PacketGeneratorHelper
+from framework.test_case import TestCase
+from framework.packet import Packet
+from framework.pktgen import PacketGeneratorHelper
 
 
 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..36783a76 100644
--- a/tests/TestSuite_pvp_virtio_user_multi_queues_port_restart.py
+++ b/tests/TestSuite_pvp_virtio_user_multi_queues_port_restart.py
@@ -41,10 +41,10 @@ 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
+from framework.test_case import TestCase
+from framework.packet import Packet
+from framework.pktgen import PacketGeneratorHelper
+from framework.pmd_output import PmdOutput
 
 class TestPVPVirtioUserMultiQueuesPortRestart(TestCase):
 
diff --git a/tests/TestSuite_qinq_filter.py b/tests/TestSuite_qinq_filter.py
index e19fe0f3..c841372a 100644
--- a/tests/TestSuite_qinq_filter.py
+++ b/tests/TestSuite_qinq_filter.py
@@ -37,10 +37,10 @@ Test the support of VLAN Offload Features by Poll Mode Drivers.
 
 """
 
-from test_case import TestCase
-import utils
+from framework.test_case import TestCase
+import framework.utils as utils
 import time
-from pmd_output import PmdOutput
+from framework.pmd_output import PmdOutput
 
 class TestQinqFilter(TestCase):
 
diff --git a/tests/TestSuite_qos_api.py b/tests/TestSuite_qos_api.py
index da2c544a..10035b78 100644
--- a/tests/TestSuite_qos_api.py
+++ b/tests/TestSuite_qos_api.py
@@ -34,14 +34,14 @@ DPDK Test suite.
 Test QOS API in DPDK.
 """
 
-import utils
+import framework.utils as utils
 import string
 import re
 import time
 import os
-from pktgen import PacketGeneratorHelper
-from test_case import TestCase
-from pmd_output import PmdOutput
+from framework.pktgen import PacketGeneratorHelper
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
 
 
 class TestQosApi(TestCase):
diff --git a/tests/TestSuite_qos_meter.py b/tests/TestSuite_qos_meter.py
index fa193126..2374989e 100644
--- a/tests/TestSuite_qos_meter.py
+++ b/tests/TestSuite_qos_meter.py
@@ -35,11 +35,11 @@ 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.test_case import TestCase
+from framework.settings import HEADER_SIZE
+from framework.pktgen import TRANSMIT_CONT
+from framework.pmd_output import PmdOutput
+from framework.packet import Packet
 
 
 class TestQosMeter(TestCase):
diff --git a/tests/TestSuite_queue_region.py b/tests/TestSuite_queue_region.py
index 29adaf41..bee17434 100644
--- a/tests/TestSuite_queue_region.py
+++ b/tests/TestSuite_queue_region.py
@@ -36,18 +36,18 @@ Test the support of VLAN Offload Features by Poll Mode Drivers.
 
 """
 
-import utils
+import framework.utils as 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 framework.test_case import TestCase
+from framework.settings import HEADER_SIZE
+from framework.pmd_output import PmdOutput
+from framework.settings import DRIVERS
 
-from project_dpdk import DPDKdut
-from dut import Dut
-from packet import Packet
+from framework.project_dpdk import DPDKdut
+from framework.dut import Dut
+from framework.packet import Packet
 
 
 class TestQueue_region(TestCase):
diff --git a/tests/TestSuite_queue_start_stop.py b/tests/TestSuite_queue_start_stop.py
index 75718c8c..32d58fdc 100644
--- a/tests/TestSuite_queue_start_stop.py
+++ b/tests/TestSuite_queue_start_stop.py
@@ -41,10 +41,10 @@ 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
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.settings import FOLDERS
+from framework.packet import Packet, strip_pktload
 
 #
 #
diff --git a/tests/TestSuite_rss_key_update.py b/tests/TestSuite_rss_key_update.py
index f74641cb..35675037 100644
--- a/tests/TestSuite_rss_key_update.py
+++ b/tests/TestSuite_rss_key_update.py
@@ -40,10 +40,10 @@ Test the support of RSS Key Update by Poll Mode Drivers.
 import time
 import re
 import random
-import utils
+import framework.utils as utils
 
-from test_case import TestCase
-from pmd_output import PmdOutput
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
 
 queue = 16
 reta_entries = []
diff --git a/tests/TestSuite_rss_to_rte_flow.py b/tests/TestSuite_rss_to_rte_flow.py
index 20deda0c..5edf4247 100644
--- a/tests/TestSuite_rss_to_rte_flow.py
+++ b/tests/TestSuite_rss_to_rte_flow.py
@@ -38,10 +38,10 @@ Test moving RSS to rte_flow.
 
 import time
 import re
-import packet
+import framework.packet as packet
 
-from test_case import TestCase
-from pmd_output import PmdOutput
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
 
 
 class TestRSS_to_Rteflow(TestCase):
diff --git a/tests/TestSuite_rte_flow.py b/tests/TestSuite_rte_flow.py
index 0cc9830f..f4141976 100644
--- a/tests/TestSuite_rte_flow.py
+++ b/tests/TestSuite_rte_flow.py
@@ -38,11 +38,11 @@ import time
 import ipaddress
 from typing import Callable
 
-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
 
-from test_case import TestCase
+from framework.test_case import TestCase
 
 from framework.flow import generator
 
diff --git a/tests/TestSuite_rteflow_priority.py b/tests/TestSuite_rteflow_priority.py
index 353dc8f9..d65d82e3 100644
--- a/tests/TestSuite_rteflow_priority.py
+++ b/tests/TestSuite_rteflow_priority.py
@@ -41,11 +41,11 @@ import string
 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 framework.utils as utils
+from framework.etgen import IxiaPacketGenerator
+from framework.test_case import TestCase
+from framework.settings import HEADER_SIZE
+from framework.pmd_output import PmdOutput
 import sys
 import imp
 imp.reload(sys)
diff --git a/tests/TestSuite_runtime_vf_queue_number.py b/tests/TestSuite_runtime_vf_queue_number.py
index 1d7d536c..21b6bdd7 100644
--- a/tests/TestSuite_runtime_vf_queue_number.py
+++ b/tests/TestSuite_runtime_vf_queue_number.py
@@ -36,10 +36,10 @@ 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
+from framework.qemu_kvm import QEMUKvm
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.packet import Packet
 
 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..a13ef30e 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.pmd_output import PmdOutput
+from framework.test_case import TestCase
+from framework.virt_common import VM
+from framework.packet import Packet
 
 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..31aa20ac 100644
--- a/tests/TestSuite_runtime_vf_queue_number_maxinum.py
+++ b/tests/TestSuite_runtime_vf_queue_number_maxinum.py
@@ -37,8 +37,8 @@ DPDK Test suite.
 import time
 import re
 import math
-from test_case import TestCase
-from pmd_output import PmdOutput
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
 
 
 class TestRuntimeVfQnMaxinum(TestCase):
diff --git a/tests/TestSuite_rxtx_callbacks.py b/tests/TestSuite_rxtx_callbacks.py
index f7d343eb..54075946 100644
--- a/tests/TestSuite_rxtx_callbacks.py
+++ b/tests/TestSuite_rxtx_callbacks.py
@@ -34,10 +34,10 @@
 DPDK Test suite.
 Test Rxtx_Callbacks.
 """
-import utils
+import framework.utils as utils
 import string
 import time
-from test_case import TestCase
+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..a57a9cea 100644
--- a/tests/TestSuite_rxtx_offload.py
+++ b/tests/TestSuite_rxtx_offload.py
@@ -36,18 +36,18 @@ New RX/TX offload APIs.
 
 """
 
-import utils
+import framework.utils as 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 framework.test_case import TestCase
+from framework.settings import HEADER_SIZE
+from framework.pmd_output import PmdOutput
+from framework.settings import DRIVERS
 
-from project_dpdk import DPDKdut
-from dut import Dut
-from packet import Packet
+from framework.project_dpdk import DPDKdut
+from framework.dut import Dut
+from framework.packet import Packet
 
 ETHER_STANDARD_MTU = 1518
 ETHER_JUMBO_FRAME_MTU = 9000
diff --git a/tests/TestSuite_scatter.py b/tests/TestSuite_scatter.py
index 2049f357..80a0f3ef 100644
--- a/tests/TestSuite_scatter.py
+++ b/tests/TestSuite_scatter.py
@@ -33,9 +33,9 @@
 DPDK Test suite.
 Test Scattered Packets.
 """
-from test_case import TestCase
-from pmd_output import PmdOutput
-from packet import Packet, strip_pktload
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.packet import Packet, strip_pktload
 import time
 #
 #
diff --git a/tests/TestSuite_short_live.py b/tests/TestSuite_short_live.py
index 5ebf0b4d..c3b1fdc4 100644
--- a/tests/TestSuite_short_live.py
+++ b/tests/TestSuite_short_live.py
@@ -41,9 +41,9 @@ 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
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.settings import FOLDERS
 
 #
 #
diff --git a/tests/TestSuite_shutdown_api.py b/tests/TestSuite_shutdown_api.py
index 3810b53a..1d5a0873 100644
--- a/tests/TestSuite_shutdown_api.py
+++ b/tests/TestSuite_shutdown_api.py
@@ -36,19 +36,19 @@ Test Shutdown API Feature
 
 """
 
-import utils
+import framework.utils as 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
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.settings import HEADER_SIZE, PROTOCOL_PACKET_SIZE
+from framework.exception import VerifyFailure
+from framework.qemu_kvm import QEMUKvm
+from framework.settings import get_nic_name
 from random import randint
-from settings import DRIVERS
+from framework.settings import DRIVERS
 #
 #
 # Test class.
diff --git a/tests/TestSuite_skeleton.py b/tests/TestSuite_skeleton.py
index c2563dc3..816cfcfe 100644
--- a/tests/TestSuite_skeleton.py
+++ b/tests/TestSuite_skeleton.py
@@ -34,10 +34,10 @@
 DPDK Test suite.
 Test Skeleton.
 """
-import utils
+import framework.utils as utils
 import string
 import time
-from test_case import TestCase
+from framework.test_case import TestCase
 
 
 
diff --git a/tests/TestSuite_softnic.py b/tests/TestSuite_softnic.py
index e4934ffe..d29d2218 100644
--- a/tests/TestSuite_softnic.py
+++ b/tests/TestSuite_softnic.py
@@ -34,15 +34,15 @@ DPDK Test suite.
 Test softnic API in DPDK.
 """
 
-import utils
+import framework.utils as utils
 import string
 import re
 import time
-from settings import HEADER_SIZE
+from framework.settings import HEADER_SIZE
 import os
-from pktgen import PacketGeneratorHelper
-from test_case import TestCase
-from pmd_output import PmdOutput
+from framework.pktgen import PacketGeneratorHelper
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
 
 
 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..c43087d4 100644
--- a/tests/TestSuite_sriov_kvm.py
+++ b/tests/TestSuite_sriov_kvm.py
@@ -42,11 +42,11 @@ import pdb
 import time
 import random
 
-from virt_common import VM
-from test_case import TestCase
+from framework.virt_common import VM
+from framework.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
 
 FRAME_SIZE_64 = 64
 VM_CORES_MASK = 'all'
diff --git a/tests/TestSuite_stats_checks.py b/tests/TestSuite_stats_checks.py
index 5dc21b6d..b405f0d1 100644
--- a/tests/TestSuite_stats_checks.py
+++ b/tests/TestSuite_stats_checks.py
@@ -40,11 +40,11 @@ import random
 import struct
 import socket
 import re
-import utils
-from pmd_output import PmdOutput
-import packet
+import framework.utils as utils
+from framework.pmd_output import PmdOutput
+import framework.packet as packet
 
-from test_case import TestCase
+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..b87e5d58 100644
--- a/tests/TestSuite_telemetry.py
+++ b/tests/TestSuite_telemetry.py
@@ -36,9 +36,9 @@ import re
 import textwrap
 from pprint import pformat
 
-# import dts libs
-from test_case import TestCase
-from pmd_output import PmdOutput
+# import framework.dts as dts libs
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
 
 
 class TestTelemetry(TestCase):
diff --git a/tests/TestSuite_testpmd_perf.py b/tests/TestSuite_testpmd_perf.py
index db2eb3c7..477464bf 100644
--- a/tests/TestSuite_testpmd_perf.py
+++ b/tests/TestSuite_testpmd_perf.py
@@ -34,8 +34,8 @@ 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 PerfTestBase, BIN_TYPE, MATCH_MODE, IP_TYPE
 
 
 class TestPmdPerf(TestCase, PerfTestBase):
diff --git a/tests/TestSuite_timer.py b/tests/TestSuite_timer.py
index 77758823..73d4f217 100644
--- a/tests/TestSuite_timer.py
+++ b/tests/TestSuite_timer.py
@@ -34,12 +34,12 @@ DPDK Test suite.
 Test Timer.
 """
 
-import utils
+import framework.utils as utils
 import re
 import time
 
 
-from test_case import TestCase
+from framework.test_case import TestCase
 
 
 class TestTimer(TestCase):
diff --git a/tests/TestSuite_tso.py b/tests/TestSuite_tso.py
index 1b5cda67..891833d0 100644
--- a/tests/TestSuite_tso.py
+++ b/tests/TestSuite_tso.py
@@ -37,14 +37,14 @@ Tests for TSO.
 
 """
 import os
-import utils
+import framework.utils as 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
+from framework.test_case import TestCase
+from framework.settings import HEADER_SIZE
+from framework.pktgen import PacketGeneratorHelper
+from framework.packet import Packet
 
 DEFAULT_MUT = 1500
 TSO_MTU = 9000
diff --git a/tests/TestSuite_tx_preparation.py b/tests/TestSuite_tx_preparation.py
index 070290e0..66eec90e 100644
--- a/tests/TestSuite_tx_preparation.py
+++ b/tests/TestSuite_tx_preparation.py
@@ -40,14 +40,14 @@ Test tx preparation feature
 
 import os
 import time
-import dut
+import framework.dut as dut
 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
+from framework.config import PortConf
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.settings import FOLDERS
+from framework.packet import Packet
 import random
 #
 #
diff --git a/tests/TestSuite_uni_pkt.py b/tests/TestSuite_uni_pkt.py
index 9a3200aa..ed503b29 100644
--- a/tests/TestSuite_uni_pkt.py
+++ b/tests/TestSuite_uni_pkt.py
@@ -43,12 +43,12 @@ 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 framework.utils as utils
+from framework.test_case import TestCase
+from framework.exception import VerifyFailure
+from framework.packet import Packet
 import time
-from pmd_output import PmdOutput
+from framework.pmd_output import PmdOutput
 
 
 class TestUniPacket(TestCase):
diff --git a/tests/TestSuite_unit_tests_cmdline.py b/tests/TestSuite_unit_tests_cmdline.py
index ac49c1bf..13ecc587 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
+from framework.test_case import TestCase
+import framework.utils as utils
 
 #
 #
diff --git a/tests/TestSuite_unit_tests_crc.py b/tests/TestSuite_unit_tests_crc.py
index 9bc5e62f..66a6ee43 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
+from framework.test_case import TestCase
+import framework.utils as utils
 
 #
 #
diff --git a/tests/TestSuite_unit_tests_cryptodev_func.py b/tests/TestSuite_unit_tests_cryptodev_func.py
index e51cca42..502e7969 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 framework.utils as utils
+from framework.test_case import TestCase
 
-import cryptodev_common as cc
+import tests.cryptodev_common as cc
 
 
 class UnitTestsCryptodev(TestCase):
diff --git a/tests/TestSuite_unit_tests_dump.py b/tests/TestSuite_unit_tests_dump.py
index 38b5fc48..22018bb4 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
+from framework.test_case import TestCase
+import framework.utils as utils
 
 #
 #
diff --git a/tests/TestSuite_unit_tests_eal.py b/tests/TestSuite_unit_tests_eal.py
index e5703f1d..706f7c0e 100644
--- a/tests/TestSuite_unit_tests_eal.py
+++ b/tests/TestSuite_unit_tests_eal.py
@@ -36,10 +36,10 @@ EAL autotest.
 
 """
 
-import utils
+import framework.utils as utils
 
 
-from test_case import TestCase
+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..ca880f58 100644
--- a/tests/TestSuite_unit_tests_event_timer.py
+++ b/tests/TestSuite_unit_tests_event_timer.py
@@ -34,9 +34,9 @@ DPDK Test suite.
 Test Event Timer Adapter Unit test
 """
 
-import utils
+import framework.utils as utils
 
-from test_case import TestCase
+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..fce7baa3 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
+from framework.test_case import TestCase
+import framework.utils as utils
 
 #
 #
diff --git a/tests/TestSuite_unit_tests_loopback.py b/tests/TestSuite_unit_tests_loopback.py
index a0467378..86eff71c 100644
--- a/tests/TestSuite_unit_tests_loopback.py
+++ b/tests/TestSuite_unit_tests_loopback.py
@@ -35,10 +35,10 @@ DPDK Test suite.
 This TestSuite runs the unit tests included in DPDK for X710/XL710/XXV710 loopback mode.
 """
 
-import utils
+import framework.utils as utils
 import re
 import time
-from test_case import TestCase
+from framework.test_case import TestCase
 
 #
 #
diff --git a/tests/TestSuite_unit_tests_lpm.py b/tests/TestSuite_unit_tests_lpm.py
index dd4d5346..8c2f6ae6 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
+from framework.test_case import TestCase
+import framework.utils as utils
 
 #
 #
diff --git a/tests/TestSuite_unit_tests_mbuf.py b/tests/TestSuite_unit_tests_mbuf.py
index 05b633ce..c5a85b7e 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
+from framework.test_case import TestCase
+import framework.utils as utils
 
 #
 #
diff --git a/tests/TestSuite_unit_tests_mempool.py b/tests/TestSuite_unit_tests_mempool.py
index 4907fd42..92afb492 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
+from framework.test_case import TestCase
+import framework.utils as utils
 
 #
 #
diff --git a/tests/TestSuite_unit_tests_pmd_perf.py b/tests/TestSuite_unit_tests_pmd_perf.py
index 4546169d..f8fb0f1c 100644
--- a/tests/TestSuite_unit_tests_pmd_perf.py
+++ b/tests/TestSuite_unit_tests_pmd_perf.py
@@ -36,7 +36,7 @@ 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..66c05e00 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
+from framework.test_case import TestCase
+import framework.utils as utils
 
 #
 #
diff --git a/tests/TestSuite_unit_tests_qos.py b/tests/TestSuite_unit_tests_qos.py
index 8ccaea17..e3a6e216 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
+from framework.test_case import TestCase
+import framework.utils as utils
 
 #
 #
diff --git a/tests/TestSuite_unit_tests_ring.py b/tests/TestSuite_unit_tests_ring.py
index 8c7e0624..2e46ddc8 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
+from framework.test_case import TestCase
+import framework.utils as utils
 
 #
 #
diff --git a/tests/TestSuite_unit_tests_ringpmd.py b/tests/TestSuite_unit_tests_ringpmd.py
index 7050a448..e55ff7af 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
+from framework.test_case import TestCase
+import framework.utils as utils
 
 #
 #
diff --git a/tests/TestSuite_unit_tests_timer.py b/tests/TestSuite_unit_tests_timer.py
index fef84089..8869eacd 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
+from framework.test_case import TestCase
+import framework.utils as utils
 
 #
 #
diff --git a/tests/TestSuite_userspace_ethtool.py b/tests/TestSuite_userspace_ethtool.py
index fd65d718..b42ff71a 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 framework.utils as utils
 import time
 import re
-from test_case import TestCase
-from packet import Packet
+from framework.test_case import TestCase
+from framework.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
+from framework.etgen import IxiaPacketGenerator
+from framework.settings import HEADER_SIZE
+from framework.settings import SCAPY2IXIA
+from framework.utils import RED
+from framework.exception import VerifyFailure
 
 
 class TestUserspaceEthtool(TestCase, IxiaPacketGenerator):
diff --git a/tests/TestSuite_vdev_primary_secondary.py b/tests/TestSuite_vdev_primary_secondary.py
index 50d5b597..841afc58 100644
--- a/tests/TestSuite_vdev_primary_secondary.py
+++ b/tests/TestSuite_vdev_primary_secondary.py
@@ -43,9 +43,9 @@ 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 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..c72721dd 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.virt_dut import VirtDut
+from framework.project_dpdk import DPDKdut
+from framework.dut import Dut
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.settings import HEADER_SIZE
+from framework.packet import Packet
+from framework.utils import RED
 
 
 class TestVEBSwitching(TestCase):
diff --git a/tests/TestSuite_vf_daemon.py b/tests/TestSuite_vf_daemon.py
index a08ae7b5..ed2c392b 100644
--- a/tests/TestSuite_vf_daemon.py
+++ b/tests/TestSuite_vf_daemon.py
@@ -31,14 +31,14 @@
 
 import time
 import sys
-import utils 
+import framework.utils as utils 
 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
+from framework.qemu_kvm import QEMUKvm
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.packet import Packet
+from framework.settings import get_nic_name
 import random
 
 VM_CORES_MASK = 'all'
diff --git a/tests/TestSuite_vf_interrupt_pmd.py b/tests/TestSuite_vf_interrupt_pmd.py
index 8d68b022..9a4e6235 100644
--- a/tests/TestSuite_vf_interrupt_pmd.py
+++ b/tests/TestSuite_vf_interrupt_pmd.py
@@ -35,13 +35,13 @@ DPDK Test suite.
 Test vf_interrupt_pmd.
 """
 
-import utils
+import framework.utils as utils
 import time
 import re
 import pdb
-from virt_common import VM
-from test_case import TestCase
-from packet import Packet
+from framework.virt_common import VM
+from framework.test_case import TestCase
+from framework.packet import Packet
 
 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..faa53929 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.virt_common import VM
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.settings import HEADER_SIZE
+from framework.packet import Packet
+from framework.utils import RED
 
 VM_CORES_MASK = 'all'
 
diff --git a/tests/TestSuite_vf_kernel.py b/tests/TestSuite_vf_kernel.py
index a4e1e52a..9656f027 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 framework.utils as utils
 import time
 import datetime
 import re
 import random
 import threading
-from test_case import TestCase
-from qemu_kvm import QEMUKvm
-from pmd_output import PmdOutput
-from packet import Packet
+from framework.test_case import TestCase
+from framework.qemu_kvm import QEMUKvm
+from framework.pmd_output import PmdOutput
+from framework.packet import Packet
 import random
-from utils import GREEN, RED
+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..b2e816eb 100644
--- a/tests/TestSuite_vf_l3fwd.py
+++ b/tests/TestSuite_vf_l3fwd.py
@@ -32,11 +32,11 @@
 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 framework.utils as utils
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.settings import HEADER_SIZE
+from framework.pktgen import PacketGeneratorHelper
 
 
 class TestVfL3fwd(TestCase):
diff --git a/tests/TestSuite_vf_l3fwd_em_kernelpf.py b/tests/TestSuite_vf_l3fwd_em_kernelpf.py
index 05cda1d1..4468210e 100644
--- a/tests/TestSuite_vf_l3fwd_em_kernelpf.py
+++ b/tests/TestSuite_vf_l3fwd_em_kernelpf.py
@@ -31,8 +31,8 @@
 
 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 PerfTestBase, IP_TYPE, MATCH_MODE, SUITE_TYPE, VF_L3FWD_NIC_SUPPORT
 
 
 class TestVfL3fwdEmKernelPf(TestCase, PerfTestBase):
diff --git a/tests/TestSuite_vf_l3fwd_kernelpf.py b/tests/TestSuite_vf_l3fwd_kernelpf.py
index d5ed897a..6ed04dcc 100644
--- a/tests/TestSuite_vf_l3fwd_kernelpf.py
+++ b/tests/TestSuite_vf_l3fwd_kernelpf.py
@@ -31,8 +31,8 @@
 
 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 PerfTestBase, IP_TYPE, MATCH_MODE, SUITE_TYPE, VF_L3FWD_NIC_SUPPORT
 
 
 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..ccb232c9 100644
--- a/tests/TestSuite_vf_l3fwd_lpm_ipv4_kernelpf.py
+++ b/tests/TestSuite_vf_l3fwd_lpm_ipv4_kernelpf.py
@@ -31,8 +31,8 @@
 
 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 PerfTestBase, IP_TYPE, MATCH_MODE, SUITE_TYPE, VF_L3FWD_NIC_SUPPORT
 
 
 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..2688f5f4 100644
--- a/tests/TestSuite_vf_l3fwd_lpm_ipv4_rfc2544_kernelpf.py
+++ b/tests/TestSuite_vf_l3fwd_lpm_ipv4_rfc2544_kernelpf.py
@@ -31,8 +31,8 @@
 
 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 PerfTestBase, IP_TYPE, MATCH_MODE, SUITE_TYPE, VF_L3FWD_NIC_SUPPORT
 
 
 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..9f99a63b 100644
--- a/tests/TestSuite_vf_l3fwd_lpm_ipv6_kernelpf.py
+++ b/tests/TestSuite_vf_l3fwd_lpm_ipv6_kernelpf.py
@@ -31,8 +31,8 @@
 
 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 PerfTestBase, IP_TYPE, MATCH_MODE, SUITE_TYPE, VF_L3FWD_NIC_SUPPORT
 
 
 class TestVfL3fwdLpmIpv6KernelPf(TestCase, PerfTestBase):
diff --git a/tests/TestSuite_vf_macfilter.py b/tests/TestSuite_vf_macfilter.py
index b3035603..49ea9c86 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.virt_common import VM
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
 
 VM_CORES_MASK = 'all'
 
diff --git a/tests/TestSuite_vf_offload.py b/tests/TestSuite_vf_offload.py
index 4a16134b..1431414a 100644
--- a/tests/TestSuite_vf_offload.py
+++ b/tests/TestSuite_vf_offload.py
@@ -33,14 +33,14 @@ import re
 import time
 import string
 
-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
+import framework.utils as utils
+from framework.virt_common import VM
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.utils import RED, GREEN
+from nics.net_device import NetDevice
+from framework.crb import Crb
+from framework.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..e3522c0d 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.virt_common import VM
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.packet import Packet
 
 VM_CORES_MASK = 'all'
 
diff --git a/tests/TestSuite_vf_port_start_stop.py b/tests/TestSuite_vf_port_start_stop.py
index de67a67c..8adb699e 100644
--- a/tests/TestSuite_vf_port_start_stop.py
+++ b/tests/TestSuite_vf_port_start_stop.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.virt_common import VM
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.packet import Packet
 VM_CORES_MASK = 'all'
 
 class TestVfPortStartStop(TestCase):
diff --git a/tests/TestSuite_vf_rss.py b/tests/TestSuite_vf_rss.py
index 4e48163b..7db9fd20 100644
--- a/tests/TestSuite_vf_rss.py
+++ b/tests/TestSuite_vf_rss.py
@@ -42,9 +42,9 @@ 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 pmd_output import PmdOutput
-from virt_common import VM
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+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..a1d1e0ce 100644
--- a/tests/TestSuite_vf_single_core_perf.py
+++ b/tests/TestSuite_vf_single_core_perf.py
@@ -32,15 +32,15 @@
 DPDK Test suite.
 """
 
-import utils
+import framework.utils as 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 framework.test_case import TestCase
+from framework.settings import HEADER_SIZE, UPDATE_EXPECTED, load_global_setting
+from framework.pmd_output import PmdOutput
 from copy import deepcopy
-import rst
-from pktgen import PacketGeneratorHelper
+import framework.rst as rst
+from framework.pktgen import PacketGeneratorHelper
 
 
 class TestVfSingleCorePerf(TestCase):
diff --git a/tests/TestSuite_vf_smoke.py b/tests/TestSuite_vf_smoke.py
index ac627aa3..7d0713e1 100644
--- a/tests/TestSuite_vf_smoke.py
+++ b/tests/TestSuite_vf_smoke.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.
 
-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 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
 
 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..d06630b0 100644
--- a/tests/TestSuite_vf_to_vf_nic_bridge.py
+++ b/tests/TestSuite_vf_to_vf_nic_bridge.py
@@ -34,13 +34,13 @@ Test vf to vf nic bridge
 """
 
 import re
-import utils
+import framework.utils as utils
 import time
 import pdb
 
-from test_case import TestCase
-from virt_common import VM
-from pmd_output import PmdOutput
+from framework.test_case import TestCase
+from framework.virt_common import VM
+from framework.pmd_output import PmdOutput
 
 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..3d417033 100644
--- a/tests/TestSuite_vf_vlan.py
+++ b/tests/TestSuite_vf_vlan.py
@@ -32,11 +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 settings import get_nic_name
+from framework.virt_common import VM
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.packet import Packet
+from framework.settings import get_nic_name
 import random
 
 VM_CORES_MASK = 'all'
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..a0abe6b0 100644
--- a/tests/TestSuite_vhost_cbdma.py
+++ b/tests/TestSuite_vhost_cbdma.py
@@ -42,16 +42,16 @@ 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 framework.rst as rst, 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 framework.test_case import TestCase
+from framework.settings import HEADER_SIZE
+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 copy import deepcopy
 
 
diff --git a/tests/TestSuite_vhost_event_idx_interrupt.py b/tests/TestSuite_vhost_event_idx_interrupt.py
index 6179dd1c..d0939d01 100644
--- a/tests/TestSuite_vhost_event_idx_interrupt.py
+++ b/tests/TestSuite_vhost_event_idx_interrupt.py
@@ -34,11 +34,11 @@ DPDK Test suite.
 Vhost event idx interrupt need test with l3fwd-power sample
 """
 
-import utils
+import framework.utils as utils
 import time
 import re
-from virt_common import VM
-from test_case import TestCase
+from framework.virt_common import VM
+from framework.test_case import TestCase
 
 
 class TestVhostEventIdxInterrupt(TestCase):
diff --git a/tests/TestSuite_vhost_multi_queue_qemu.py b/tests/TestSuite_vhost_multi_queue_qemu.py
index 01d5826b..72294fa7 100644
--- a/tests/TestSuite_vhost_multi_queue_qemu.py
+++ b/tests/TestSuite_vhost_multi_queue_qemu.py
@@ -36,13 +36,13 @@ 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.test_case import TestCase
+from framework.settings import HEADER_SIZE
+from framework.virt_common import VM
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
+from framework.pktgen import PacketGeneratorHelper
 
 
 class TestVhostMultiQueueQemu(TestCase):
diff --git a/tests/TestSuite_vhost_pmd_xstats.py b/tests/TestSuite_vhost_pmd_xstats.py
index 016348d1..8934d438 100644
--- a/tests/TestSuite_vhost_pmd_xstats.py
+++ b/tests/TestSuite_vhost_pmd_xstats.py
@@ -36,14 +36,14 @@ vhost pmd xstats test suite.
 """
 import re
 import time
-import utils
+import framework.utils as 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
+from framework.test_case import TestCase
+from framework.settings import HEADER_SIZE
+from framework.qemu_kvm import QEMUKvm
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
 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..0ed6f12d 100644
--- a/tests/TestSuite_vhost_user_interrupt.py
+++ b/tests/TestSuite_vhost_user_interrupt.py
@@ -34,10 +34,10 @@ DPDK Test suite.
 Vhost enqueue interrupt need test with l3fwd-power sample
 """
 
-import utils
+import framework.utils as utils
 import time
 import re
-from test_case import TestCase
+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..7b9f175b 100644
--- a/tests/TestSuite_vhost_user_live_migration.py
+++ b/tests/TestSuite_vhost_user_live_migration.py
@@ -31,11 +31,11 @@
 
 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.virt_common import VM
+from framework.test_case import TestCase
+from framework.config import UserConf
+from framework.exception import VirtDutInitException
 
 
 class TestVhostUserLiveMigration(TestCase):
diff --git a/tests/TestSuite_vhost_virtio_pmd_interrupt.py b/tests/TestSuite_vhost_virtio_pmd_interrupt.py
index 675a15ee..64bcddd5 100644
--- a/tests/TestSuite_vhost_virtio_pmd_interrupt.py
+++ b/tests/TestSuite_vhost_virtio_pmd_interrupt.py
@@ -34,13 +34,13 @@ DPDK Test suite.
 vhost virtio pmd interrupt need test with l3fwd-power sample
 """
 
-import utils
+import framework.utils as utils
 import time
 import re
-from virt_common import VM
-from test_case import TestCase
-from packet import Packet
-from pktgen import PacketGeneratorHelper
+from framework.virt_common import VM
+from framework.test_case import TestCase
+from framework.packet import Packet
+from framework.pktgen import PacketGeneratorHelper
 
 
 class TestVhostVirtioPmdInterrupt(TestCase):
diff --git a/tests/TestSuite_vhost_virtio_user_interrupt.py b/tests/TestSuite_vhost_virtio_user_interrupt.py
index 1c4a5a98..e0136de2 100644
--- a/tests/TestSuite_vhost_virtio_user_interrupt.py
+++ b/tests/TestSuite_vhost_virtio_user_interrupt.py
@@ -36,8 +36,8 @@ 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..18cbc4a4 100644
--- a/tests/TestSuite_virtio_event_idx_interrupt.py
+++ b/tests/TestSuite_virtio_event_idx_interrupt.py
@@ -34,13 +34,13 @@ DPDK Test suite.
 Virtio idx interrupt need test with l3fwd-power sample
 """
 
-import utils
+import framework.utils as utils
 import time
 import _thread
 import re
-from virt_common import VM
-from test_case import TestCase
-from pktgen import PacketGeneratorHelper
+from framework.virt_common import VM
+from framework.test_case import TestCase
+from framework.pktgen import PacketGeneratorHelper
 
 
 class TestVirtioIdxInterrupt(TestCase):
diff --git a/tests/TestSuite_virtio_ipsec_cryptodev_func.py b/tests/TestSuite_virtio_ipsec_cryptodev_func.py
index ec610dde..a2ce9cdb 100644
--- a/tests/TestSuite_virtio_ipsec_cryptodev_func.py
+++ b/tests/TestSuite_virtio_ipsec_cryptodev_func.py
@@ -33,14 +33,14 @@ DPDK Test suite
 Test DPDK vhost + virtio scenarios
 """
 import os
-import utils
+import framework.utils as 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
+from framework.test_case import TestCase
+from framework.qemu_kvm import QEMUKvm
+import tests.cryptodev_common as cc
+from framework.packet import Packet
 
 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..6719fdc5 100644
--- a/tests/TestSuite_virtio_perf_cryptodev_func.py
+++ b/tests/TestSuite_virtio_perf_cryptodev_func.py
@@ -33,11 +33,11 @@ DPDK Test suite
 Test DPDK vhost + virtio scenarios
 """
 import os
-import utils
+import framework.utils as utils
 import subprocess
-from test_case import TestCase
-from qemu_kvm import QEMUKvm
-import cryptodev_common as cc
+from framework.test_case import TestCase
+from framework.qemu_kvm import QEMUKvm
+import tests.cryptodev_common as cc
 
 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..b3dc098a 100644
--- a/tests/TestSuite_virtio_pvp_regression.py
+++ b/tests/TestSuite_virtio_pvp_regression.py
@@ -43,11 +43,11 @@ 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.test_case import TestCase
+from framework.settings import HEADER_SIZE
+from framework.virt_common import VM
+from framework.pktgen import PacketGeneratorHelper
 
 
 class TestVirtioPVPRegression(TestCase):
diff --git a/tests/TestSuite_virtio_smoke.py b/tests/TestSuite_virtio_smoke.py
index b7391b77..eec785f9 100644
--- a/tests/TestSuite_virtio_smoke.py
+++ b/tests/TestSuite_virtio_smoke.py
@@ -34,8 +34,8 @@ DPDK Test suite.
 """
 
 import re
-from test_case import TestCase
-from pmd_output import PmdOutput
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
 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..088872cc 100644
--- a/tests/TestSuite_virtio_unit_cryptodev_func.py
+++ b/tests/TestSuite_virtio_unit_cryptodev_func.py
@@ -35,11 +35,11 @@ Test DPDK vhost + virtio scenarios
 """
 
 import os
-import utils
+import framework.utils as utils
 import subprocess
-from test_case import TestCase
-from qemu_kvm import QEMUKvm
-import cryptodev_common as cc
+from framework.test_case import TestCase
+from framework.qemu_kvm import QEMUKvm
+import tests.cryptodev_common as cc
 
 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..e35a0764 100644
--- a/tests/TestSuite_virtio_user_as_exceptional_path.py
+++ b/tests/TestSuite_virtio_user_as_exceptional_path.py
@@ -36,11 +36,11 @@ 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
+from framework.test_case import TestCase
+from framework.settings import HEADER_SIZE
+import tests.vhost_peer_conf as peer
+from framework.pktgen import PacketGeneratorHelper
 
 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..43f4f44f 100644
--- a/tests/TestSuite_virtio_user_for_container_networking.py
+++ b/tests/TestSuite_virtio_user_for_container_networking.py
@@ -34,11 +34,11 @@ DPDK Test suite.
 Virtio user for container networking
 """
 
-import utils
+import framework.utils as utils
 import time
-from test_case import TestCase
-from settings import HEADER_SIZE
-from pktgen import PacketGeneratorHelper
+from framework.test_case import TestCase
+from framework.settings import HEADER_SIZE
+from framework.pktgen import PacketGeneratorHelper
 
 
 class TestVirtioUserForContainer(TestCase):
diff --git a/tests/TestSuite_vlan.py b/tests/TestSuite_vlan.py
index ec4cca7b..736d7b84 100644
--- a/tests/TestSuite_vlan.py
+++ b/tests/TestSuite_vlan.py
@@ -37,13 +37,13 @@ Test the support of VLAN Offload Features by Poll Mode Drivers.
 
 """
 
-import utils
+import framework.utils as utils
 import time
 
 
-from test_case import TestCase
-from pmd_output import PmdOutput
-from packet import Packet
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.packet import Packet
 
 
 class TestVlan(TestCase):
diff --git a/tests/TestSuite_vlan_ethertype_config.py b/tests/TestSuite_vlan_ethertype_config.py
index 514bdd1f..f5f69ddd 100644
--- a/tests/TestSuite_vlan_ethertype_config.py
+++ b/tests/TestSuite_vlan_ethertype_config.py
@@ -37,17 +37,17 @@ Test the support of VLAN Offload Features by Poll Mode Drivers.
 
 """
 
-import dts
+import framework.dts as dts
 import time
-import utils
+import framework.utils as utils
 
-from test_case import TestCase
-from pmd_output import PmdOutput
+from framework.test_case import TestCase
+from framework.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 framework.settings import DPDK_RXMODE_SETTING
+from framework.settings import load_global_setting
 
 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..b11dacae 100644
--- a/tests/TestSuite_vm2vm_virtio_net_perf.py
+++ b/tests/TestSuite_vm2vm_virtio_net_perf.py
@@ -42,10 +42,10 @@ 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 framework.utils as utils
+from framework.virt_common import VM
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
 
 
 class TestVM2VMVirtioNetPerf(TestCase):
diff --git a/tests/TestSuite_vm2vm_virtio_pmd.py b/tests/TestSuite_vm2vm_virtio_pmd.py
index 44f17a36..6ff7fe30 100644
--- a/tests/TestSuite_vm2vm_virtio_pmd.py
+++ b/tests/TestSuite_vm2vm_virtio_pmd.py
@@ -40,11 +40,11 @@ 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.virt_common import VM
+from framework.test_case import TestCase
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
 
 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..d6ab38c4 100644
--- a/tests/TestSuite_vm2vm_virtio_user.py
+++ b/tests/TestSuite_vm2vm_virtio_user.py
@@ -40,10 +40,10 @@ 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.test_case import TestCase
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
 
 
 class TestVM2VMVirtioUser(TestCase):
diff --git a/tests/TestSuite_vm_hotplug.py b/tests/TestSuite_vm_hotplug.py
index f403d40e..ddee4188 100644
--- a/tests/TestSuite_vm_hotplug.py
+++ b/tests/TestSuite_vm_hotplug.py
@@ -39,9 +39,9 @@ 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.qemu_kvm import QEMUKvm
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
 
 VM_CORES_MASK = 'all'
 
diff --git a/tests/TestSuite_vm_power_manager.py b/tests/TestSuite_vm_power_manager.py
index fca122bb..479d1267 100644
--- a/tests/TestSuite_vm_power_manager.py
+++ b/tests/TestSuite_vm_power_manager.py
@@ -35,11 +35,11 @@ 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.test_case import TestCase
+from framework.etgen import IxiaPacketGenerator
+from framework.settings import HEADER_SIZE
+from framework.qemu_libvirt import LibvirtKvm
 
 
 class TestVmPowerManager(TestCase, IxiaPacketGenerator):
diff --git a/tests/TestSuite_vm_pw_mgmt_policy.py b/tests/TestSuite_vm_pw_mgmt_policy.py
index f074f6d7..7eac19db 100644
--- a/tests/TestSuite_vm_pw_mgmt_policy.py
+++ b/tests/TestSuite_vm_pw_mgmt_policy.py
@@ -44,13 +44,13 @@ from datetime import datetime, timedelta
 from copy import deepcopy
 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.utils import create_mask as dts_create_mask
+from framework.test_case import TestCase
+from framework.pmd_output import PmdOutput
+from framework.qemu_libvirt import LibvirtKvm
+from framework.pktgen import TRANSMIT_CONT
+from framework.exception import VerifyFailure
+from framework.packet import Packet
 
 
 class TestVmPwMgmtPolicy(TestCase):
diff --git a/tests/TestSuite_vmdq.py b/tests/TestSuite_vmdq.py
index 3f2ccde2..1ccd88b2 100644
--- a/tests/TestSuite_vmdq.py
+++ b/tests/TestSuite_vmdq.py
@@ -35,13 +35,13 @@ DPDK Test suite.
 Tests for vmdq.
 
 """
-import utils
+import framework.utils as utils
 import os
 import re
-from test_case import TestCase
+from framework.test_case import TestCase
 from time import sleep
-from settings import HEADER_SIZE
-from pktgen import PacketGeneratorHelper
+from framework.settings import HEADER_SIZE
+from framework.pktgen import PacketGeneratorHelper
 
 
 class TestVmdq(TestCase):
diff --git a/tests/TestSuite_vmdq_dcb.py b/tests/TestSuite_vmdq_dcb.py
index 5f0da0fb..4dbecff8 100644
--- a/tests/TestSuite_vmdq_dcb.py
+++ b/tests/TestSuite_vmdq_dcb.py
@@ -36,13 +36,13 @@ DPDK Test suite.
 Test  example vmdq_dcb.
 
 """
-import utils
+import framework.utils as utils
 import os
 import re
 import random
-from test_case import TestCase
-from settings import HEADER_SIZE
-from pktgen import PacketGeneratorHelper
+from framework.test_case import TestCase
+from framework.settings import HEADER_SIZE
+from framework.pktgen import PacketGeneratorHelper
 
 
 class TestVmdqDcb(TestCase):
diff --git a/tests/TestSuite_vswitch_sample_cbdma.py b/tests/TestSuite_vswitch_sample_cbdma.py
index 08422ea3..bc301139 100644
--- a/tests/TestSuite_vswitch_sample_cbdma.py
+++ b/tests/TestSuite_vswitch_sample_cbdma.py
@@ -33,16 +33,16 @@
 DPDK Test suite.
 """
 
-import utils
+import framework.utils as 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
+from framework.test_case import TestCase
+from framework.packet import Packet
+from framework.pktgen import PacketGeneratorHelper
+from framework.pmd_output import PmdOutput
+from framework.virt_common import VM
+from framework.settings import HEADER_SIZE
 import random
 import string
 
diff --git a/tests/TestSuite_vxlan.py b/tests/TestSuite_vxlan.py
index fdb6616d..4a7520e2 100644
--- a/tests/TestSuite_vxlan.py
+++ b/tests/TestSuite_vxlan.py
@@ -36,13 +36,13 @@ Test VXLAN behaviour in DPDK.
 
 """
 
-import utils
+import framework.utils as utils
 import string
 import re
 import time
 import os
-from pmd_output import PmdOutput
-from packet import IncreaseIP, IncreaseIPv6
+from framework.pmd_output import PmdOutput
+from framework.packet import IncreaseIP, IncreaseIPv6
 from random import randint
 
 from scapy.utils import wrpcap, rdpcap
@@ -55,10 +55,10 @@ from scapy.sendrecv import sniff
 from scapy.config import conf
 from scapy.route import *
 
-from test_case import TestCase
-from settings import HEADER_SIZE, FOLDERS
-from etgen import IxiaPacketGenerator
-import packet
+from framework.test_case import TestCase
+from framework.settings import HEADER_SIZE, FOLDERS
+from framework.etgen import IxiaPacketGenerator
+import framework.packet as packet
 
 #
 #
diff --git a/tests/TestSuite_vxlan_gpe_support_in_i40e.py b/tests/TestSuite_vxlan_gpe_support_in_i40e.py
index b5022540..a17b790a 100644
--- a/tests/TestSuite_vxlan_gpe_support_in_i40e.py
+++ b/tests/TestSuite_vxlan_gpe_support_in_i40e.py
@@ -36,17 +36,17 @@ Test VXLAN-GPE behaviour in DPDK.
 
 """
 
-import utils
+import framework.utils as utils
 import os
 import re
-from pmd_output import PmdOutput
+from framework.pmd_output import PmdOutput
 from scapy.utils import wrpcap, rdpcap
 from scapy.layers.inet import Ether, IP, UDP
 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 framework.test_case import TestCase
+from framework.settings import FOLDERS
 
 #
 #
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..1df1feda 100644
--- a/tests/bonding.py
+++ b/tests/bonding.py
@@ -36,14 +36,14 @@ import struct
 import socket
 from socket import htonl
 
-from packet import Packet, TMP_PATH
+from framework.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.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..c585af5d 100644
--- a/tests/compress_common.py
+++ b/tests/compress_common.py
@@ -32,8 +32,8 @@
 
 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..f2ff3c3c 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 nics.net_device import GetNicObj
+from framework.config import SuiteConf
 
 conf = SuiteConf('cryptodev_sample')
 
diff --git a/tests/flexible_common.py b/tests/flexible_common.py
index 9df62caa..19a4a358 100644
--- a/tests/flexible_common.py
+++ b/tests/flexible_common.py
@@ -30,8 +30,8 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 import time
-from packet import Packet
-from pmd_output import PmdOutput
+from framework.packet import Packet
+from framework.pmd_output import PmdOutput
 import re
 
 
diff --git a/tests/perf_test_base.py b/tests/perf_test_base.py
index 02a73eec..ee09915e 100644
--- a/tests/perf_test_base.py
+++ b/tests/perf_test_base.py
@@ -36,7 +36,7 @@ import os
 import re
 import time
 import traceback
-import texttable
+import framework.texttable as texttable
 import json
 import numpy as np
 from enum import Enum, unique
@@ -44,12 +44,12 @@ from pprint import pformat
 from itertools import product
 from copy import deepcopy
 
-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
+from framework.config import SuiteConf
+from framework.packet import Packet
+from framework.pktgen import TRANSMIT_CONT, PKTGEN_TREX, PKTGEN_IXIA, PKTGEN_IXIA_NETWORK
+from framework.utils import convert_int2ip, convert_ip2int
+from framework.exception import VerifyFailure
+import framework.utils as utils
 
 
 VF_L3FWD_NIC_SUPPORT = frozenset((
diff --git a/tests/rte_flow_common.py b/tests/rte_flow_common.py
index 591aa5a1..348750bf 100644
--- a/tests/rte_flow_common.py
+++ b/tests/rte_flow_common.py
@@ -32,8 +32,8 @@
 import json
 import time
 import re
-from utils import GREEN, RED
-from packet import Packet
+from framework.utils import GREEN, RED
+from framework.packet import Packet
 
 CVL_TXQ_RXQ_NUMBER = 16
 
diff --git a/tests/smoke_base.py b/tests/smoke_base.py
index 0d7046b0..f992f068 100644
--- a/tests/smoke_base.py
+++ b/tests/smoke_base.py
@@ -31,7 +31,7 @@
 
 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..d4633875 100755
--- a/tools/dump_case.py
+++ b/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):
diff --git a/tools/setup.py b/tools/setup.py
index c0852f21..516d5031 100755
--- a/tools/setup.py
+++ b/tools/setup.py
@@ -22,10 +22,10 @@ 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 .parse_opt import Option
+from framework.settings import NICS
+from framework.utils import GREEN, RED
 
 global def_opt
 global dut_ip
-- 
2.20.1


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [dts] [PATCH v1] python: standard project structure
  2021-08-24 11:34 [dts] [PATCH v1] python: standard project structure Juraj Linkeš
@ 2021-08-24 13:46 ` Owen Hilyard
  2021-08-27  9:19   ` Juraj Linkeš
  2021-08-27 13:03 ` [dts] [PATCH v2] " Juraj Linkeš
  1 sibling, 1 reply; 12+ messages in thread
From: Owen Hilyard @ 2021-08-24 13:46 UTC (permalink / raw)
  To: Juraj Linkeš; +Cc: Tu, Lijuan, dts

[-- Attachment #1: Type: text/plain, Size: 2375 bytes --]

>
> (and consequently remove the redundant dts shell script).


I don't think we should be making a breaking change to the external
interface right now. It may be worth it to discuss adding a deprecation
warning to the script, but we should give time for anyone who is using DTS
to using python directly. This includes the Community CI Lab, since this
change would break our current approach to updating DTS, which is to have a
"canary" system updated and running for a bit to find potential issues
before everything else gets updated.

1. Should we do the explicit import paths?


It may be easier to force absolute import paths since I know some older
automated tooling might now handle relative imports correctly. They also
make refactoring much easier if we ever need to move files around again.


> 2. If so, do we want to enforce it (for new patches)? How (is there a tool
> that check that or just manually in review)?


I think we should just to keep everything consistent throughout the
codebase. I don't know if there is a tool, but it should be easy to look at
the top of files in a patch and check for relative imports.


> 3. Some paths might not have been moved to the explicit format, as I
> may have missed them.
> 4. I did not test the patch as I don't have access to an environment
> in which I could do so. Is there a way to test it locally (i.e. without
> any hw dependencies)?


The easiest way would probably be to put something like this in main to
test:

from framework import *
from framework.flow import *
from framework.ixia_network import *
from tests import *
from nics import *

This should import every single file in the project, which will cause every
file to evaluate its own imports. As long as nothing imports main, that
should work.

5. Do we want to sort imports?


I think that we should ask that imports are logically grouped, but not
prescribe any particular method unless we start to have issues.


> 6. If so, how? Do we want to do it in this patch?


It might make sense to do a single pass now using isort (
https://github.com/PyCQA/isort). We can discuss adding that as a tool
later, but unless there's an easy way to add it as a commit hook, it might
make sense to do it once and leave it be. DTS has a lot of other stuff to
work on, and I think that this is something we can discuss once we've fixed
some of the bigger issues.

[-- Attachment #2: Type: text/html, Size: 3694 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [dts] [PATCH v1] python: standard project structure
  2021-08-24 13:46 ` Owen Hilyard
@ 2021-08-27  9:19   ` Juraj Linkeš
  0 siblings, 0 replies; 12+ messages in thread
From: Juraj Linkeš @ 2021-08-27  9:19 UTC (permalink / raw)
  To: Owen Hilyard; +Cc: Tu, Lijuan, dts

[-- Attachment #1: Type: text/plain, Size: 3099 bytes --]



From: Owen Hilyard <ohilyard@iol.unh.edu>
Sent: Tuesday, August 24, 2021 3:47 PM
To: Juraj Linkeš <juraj.linkes@pantheon.tech>
Cc: Tu, Lijuan <lijuan.tu@intel.com>; dts@dpdk.org
Subject: Re: [PATCH v1] python: standard project structure

(and consequently remove the redundant dts shell script).

I don't think we should be making a breaking change to the external interface right now. It may be worth it to discuss adding a deprecation warning to the script, but we should give time for anyone who is using DTS to using python directly. This includes the Community CI Lab, since this change would break our current approach to updating DTS, which is to have a "canary" system updated and running for a bit to find potential issues before everything else gets updated.

Good point, changing the API should definitely not be done in this patch. I'll revert this.

1. Should we do the explicit import paths?

It may be easier to force absolute import paths since I know some older automated tooling might now handle relative imports correctly. They also make refactoring much easier if we ever need to move files around again.

2. If so, do we want to enforce it (for new patches)? How (is there a tool that check that or just manually in review)?

I think we should just to keep everything consistent throughout the codebase. I don't know if there is a tool, but it should be easy to look at the top of files in a patch and check for relative imports.

This is what I was also thinking - there's value in using them and manual reviews should be sufficient.

3. Some paths might not have been moved to the explicit format, as I may have missed them.
4. I did not test the patch as I don't have access to an environment in which I could do so. Is there a way to test it locally (i.e. without any hw dependencies)?

The easiest way would probably be to put something like this in main to test:

from framework import *
from framework.flow import *
from framework.ixia_network import *
from tests import *
from nics import *

This should import every single file in the project, which will cause every file to evaluate its own imports. As long as nothing imports main, that should work.

Ok, I'll try this.

5. Do we want to sort imports?

I think that we should ask that imports are logically grouped, but not prescribe any particular method unless we start to have issues.

6. If so, how? Do we want to do it in this patch?

It might make sense to do a single pass now using isort (https://github.com/PyCQA/isort). We can discuss adding that as a tool later, but unless there's an easy way to add it as a commit hook, it might make sense to do it once and leave it be. DTS has a lot of other stuff to work on, and I think that this is something we can discuss once we've fixed some of the bigger issues.

I'll do the sort now then.
For now, we could add this to the "reviewed by DTS workgroup" requirements (along with the relative imports) and just check it manually during review. In the future, we could just add a check to a syntax checking job.

[-- Attachment #2: Type: text/html, Size: 9838 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [dts] [PATCH v2] python: standard project structure
  2021-08-24 11:34 [dts] [PATCH v1] python: standard project structure Juraj Linkeš
  2021-08-24 13:46 ` Owen Hilyard
@ 2021-08-27 13:03 ` Juraj Linkeš
  2021-09-06  3:01   ` Tu, Lijuan
  2021-09-10 13:41   ` [dts] [PATCH v3] " Juraj Linkeš
  1 sibling, 2 replies; 12+ messages in thread
From: Juraj Linkeš @ 2021-08-27 13:03 UTC (permalink / raw)
  To: lijuan.tu, ohilyard; +Cc: dts, Juraj Linkeš

DTS does not use the standard project structure and has therefore 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>
---
v2:
* Reintroduced the dts shell cript.
* Tested the imports by trying to import everything and fixed what I
* found.
* Sorted the imports using isort with the black profile.
---
 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                              | 67 ++++++++++---------
 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                           | 30 +++------
 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                        | 37 ++++++----
 framework/test_result.py                      |  2 +-
 framework/tester.py                           | 37 ++++++----
 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                            | 12 ++--
 tools/parse_opt.py                            |  2 +-
 tools/setup.py                                | 16 +++--
 336 files changed, 2352 insertions(+), 1852 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

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..8f7bed39 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
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..d221dd71 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 dep.scapy_modules.Dot1BR import Dot1BR
+
 # load extension layers
 exec_file = os.path.realpath(__file__)
 DTS_PATH = exec_file.replace('/framework/packet.py', '')
@@ -44,43 +48,29 @@ 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
+from .utils import convert_int2ip, convert_ip2int
 
 scapy_modules_required = {'gtp': ['GTP_U_Header', 'GTPPDUSessionContainer'],
                           'lldp': ['LLDPDU', 'LLDPDUManagementAddress'],
-                          'Dot1BR': ['Dot1BR'],
                           'pfcp': ['PFCP'],
                           'nsh': ['NSH'],
                           'igmp': ['IGMP'],
                           '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(f'scapy.contrib.{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 scapy.contrib.{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..6381477d 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):
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..5ad202da 100644
--- a/framework/tester.py
+++ b/framework/tester.py
@@ -33,23 +33,32 @@
 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
+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):
 
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..aa487e85 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):
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
-- 
2.20.1


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [dts] [PATCH v2] python: standard project structure
  2021-08-27 13:03 ` [dts] [PATCH v2] " Juraj Linkeš
@ 2021-09-06  3:01   ` Tu, Lijuan
  2021-09-09 11:05     ` Juraj Linkeš
  2021-09-10 13:41   ` [dts] [PATCH v3] " Juraj Linkeš
  1 sibling, 1 reply; 12+ messages in thread
From: Tu, Lijuan @ 2021-09-06  3:01 UTC (permalink / raw)
  To: Juraj Linkeš, ohilyard; +Cc: dts

> -----Original Message-----
> From: Juraj Linkeš <juraj.linkes@pantheon.tech>
> Sent: 2021年8月27日 21:04
> To: Tu, Lijuan <lijuan.tu@intel.com>; ohilyard@iol.unh.edu
> Cc: dts@dpdk.org; Juraj Linkeš <juraj.linkes@pantheon.tech>
> Subject: [PATCH v2] python: standard project structure
> 
> DTS does not use the standard project structure and has therefore 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>
> ---
> v2:
> * Reintroduced the dts shell cript.
> * Tested the imports by trying to import everything and fixed what I
> * found.
> * Sorted the imports using isort with the black profile.
> ---

* the import of Dot1BR  is broken.
	Dot1BR  is aimed to import in scapy application in Tester. 
	The patch just import it in the script, but not in the scapy. 
	So that when sending packet by scapy, it can't recognize Dot1BR  packet.

* Suite directory is still imported, which should by remove.
   - File: framework/dts.py  line: 534
	# add python module search path
    	sys.path.append(suite_dir)

* Missed some dynamic import in the function:
   - File: framework/dts.py
	line: 250 
		project_module = __import__(PROJECT_MODULE_PREFIX + project_name)
	line: 454
		suite_module = __import__('TestSuite_' + suite_name)
   - File: framework/test_case.py		line: 380
	debugger.AliveModule = __import__('TestSuite_' + self.suite_name)
   - File:	framework/tester.py	line: 740, 846, 855
	module = __import__("packet")
   - File: framework/flow/flow_pattern_item.py 	line: 92
	from flow import Flow
		
	




^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [dts] [PATCH v2] python: standard project structure
  2021-09-06  3:01   ` Tu, Lijuan
@ 2021-09-09 11:05     ` Juraj Linkeš
  2021-09-10 12:31       ` Juraj Linkeš
  0 siblings, 1 reply; 12+ messages in thread
From: Juraj Linkeš @ 2021-09-09 11:05 UTC (permalink / raw)
  To: Tu, Lijuan, ohilyard; +Cc: dts



> -----Original Message-----
> From: Tu, Lijuan <lijuan.tu@intel.com>
> Sent: Monday, September 6, 2021 5:01 AM
> To: Juraj Linkeš <juraj.linkes@pantheon.tech>; ohilyard@iol.unh.edu
> Cc: dts@dpdk.org
> Subject: RE: [PATCH v2] python: standard project structure
> 
> > -----Original Message-----
> > From: Juraj Linkeš <juraj.linkes@pantheon.tech>
> > Sent: 2021年8月27日 21:04
> > To: Tu, Lijuan <lijuan.tu@intel.com>; ohilyard@iol.unh.edu
> > Cc: dts@dpdk.org; Juraj Linkeš <juraj.linkes@pantheon.tech>
> > Subject: [PATCH v2] python: standard project structure
> >
> > DTS does not use the standard project structure and has therefore 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>
> > ---
> > v2:
> > * Reintroduced the dts shell cript.
> > * Tested the imports by trying to import everything and fixed what I
> > * found.
> > * Sorted the imports using isort with the black profile.
> > ---
> 
> * the import of Dot1BR  is broken.

I don't understand how this works exactly. Are there two distinct tools that are trying to use dep/scapy_modules/Dot1BR.py?

> 	Dot1BR  is aimed to import in scapy application in Tester.

Is this something that runs outside of DTS? Doesn't DTS import Scapy libs and send packets using those libs? What exactly is the scapy application and how it's supposed to used dep/scapy_modules/Dot1BR.py?

> 	The patch just import it in the script, but not in the scapy.

What script are you talking about here? Maybe diagram would be helpful - what runs where and what is supposed to import what.

> 	So that when sending packet by scapy, it can't recognize Dot1BR
> packet.
> 
> * Suite directory is still imported, which should by remove.
>    - File: framework/dts.py  line: 534
> 	# add python module search path
>     	sys.path.append(suite_dir)
> 

I'll remove this, but that will make the  "--suite-dir" argument obsolete. We should think about how to deprecate it - if we decide to do that, it should be in another patch though. I'd guess it would a very low priority.

> * Missed some dynamic import in the function:
>    - File: framework/dts.py
> 	line: 250
> 		project_module = __import__(PROJECT_MODULE_PREFIX +
> project_name)
> 	line: 454
> 		suite_module = __import__('TestSuite_' + suite_name)
>    - File: framework/test_case.py		line: 380
> 	debugger.AliveModule = __import__('TestSuite_' + self.suite_name)
>    - File:	framework/tester.py	line: 740, 846, 855
> 	module = __import__("packet")
>    - File: framework/flow/flow_pattern_item.py 	line: 92
> 	from flow import Flow
> 

I also found some other instances of __import__ being called (in tester.py and dump_case.py), I'll fix all of them.

We may want to replace __import__() with importlib.import_module(), as the docs say that direct use of __import__() is discouraged (in favor of importlib.import_module()). This would also be a low priority item I think.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [dts] [PATCH v2] python: standard project structure
  2021-09-09 11:05     ` Juraj Linkeš
@ 2021-09-10 12:31       ` Juraj Linkeš
  0 siblings, 0 replies; 12+ messages in thread
From: Juraj Linkeš @ 2021-09-10 12:31 UTC (permalink / raw)
  To: Juraj Linkeš, Tu, Lijuan, ohilyard; +Cc: dts



> -----Original Message-----
> From: dts <dts-bounces@dpdk.org> On Behalf Of Juraj Linkeš
> Sent: Thursday, September 9, 2021 1:05 PM
> To: Tu, Lijuan <lijuan.tu@intel.com>; ohilyard@iol.unh.edu
> Cc: dts@dpdk.org
> Subject: Re: [dts] [PATCH v2] python: standard project structure
> 
> 
> 
> > -----Original Message-----
> > From: Tu, Lijuan <lijuan.tu@intel.com>
> > Sent: Monday, September 6, 2021 5:01 AM
> > To: Juraj Linkeš <juraj.linkes@pantheon.tech>; ohilyard@iol.unh.edu
> > Cc: dts@dpdk.org
> > Subject: RE: [PATCH v2] python: standard project structure
> >
> > > -----Original Message-----
> > > From: Juraj Linkeš <juraj.linkes@pantheon.tech>
> > > Sent: 2021年8月27日 21:04
> > > To: Tu, Lijuan <lijuan.tu@intel.com>; ohilyard@iol.unh.edu
> > > Cc: dts@dpdk.org; Juraj Linkeš <juraj.linkes@pantheon.tech>
> > > Subject: [PATCH v2] python: standard project structure
> > >
> > > DTS does not use the standard project structure and has therefore
> > > 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>
> > > ---
> > > v2:
> > > * Reintroduced the dts shell cript.
> > > * Tested the imports by trying to import everything and fixed what I
> > > * found.
> > > * Sorted the imports using isort with the black profile.
> > > ---
> >
> > * the import of Dot1BR  is broken.
> 
> I don't understand how this works exactly. Are there two distinct tools that are
> trying to use dep/scapy_modules/Dot1BR.py?
> 
> > 	Dot1BR  is aimed to import in scapy application in Tester.
> 
> Is this something that runs outside of DTS? Doesn't DTS import Scapy libs and
> send packets using those libs? What exactly is the scapy application and how it's
> supposed to used dep/scapy_modules/Dot1BR.py?
> 
> > 	The patch just import it in the script, but not in the scapy.
> 
> What script are you talking about here? Maybe diagram would be helpful - what
> runs where and what is supposed to import what.
> 

I think I figured out what the problem is - we need SCAPY_IMP_CMD to include dep.scapy_modules.Dot1BR since this is used to interactively import the libraries using expect.

The interactive use of interpreter is dubious and I'd like to see some other approach (such as just running a script) instead. But that's another topic so I'll put back Dot1BR to the list of interactively imported modules and just make some changes that will make, in my opinion, the code a bit more readable.

> > 	So that when sending packet by scapy, it can't recognize Dot1BR
> > packet.
> >
> > * Suite directory is still imported, which should by remove.
> >    - File: framework/dts.py  line: 534
> > 	# add python module search path
> >     	sys.path.append(suite_dir)
> >
> 
> I'll remove this, but that will make the  "--suite-dir" argument obsolete. We
> should think about how to deprecate it - if we decide to do that, it should be in
> another patch though. I'd guess it would a very low priority.
> 
> > * Missed some dynamic import in the function:
> >    - File: framework/dts.py
> > 	line: 250
> > 		project_module = __import__(PROJECT_MODULE_PREFIX +
> > project_name)
> > 	line: 454
> > 		suite_module = __import__('TestSuite_' + suite_name)
> >    - File: framework/test_case.py		line: 380
> > 	debugger.AliveModule = __import__('TestSuite_' + self.suite_name)
> >    - File:	framework/tester.py	line: 740, 846, 855
> > 	module = __import__("packet")
> >    - File: framework/flow/flow_pattern_item.py 	line: 92
> > 	from flow import Flow
> >
> 
> I also found some other instances of __import__ being called (in tester.py and
> dump_case.py), I'll fix all of them.
> 
> We may want to replace __import__() with importlib.import_module(), as the
> docs say that direct use of __import__() is discouraged (in favor of
> importlib.import_module()). This would also be a low priority item I think.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [dts] [PATCH v3] python: standard project structure
  2021-08-27 13:03 ` [dts] [PATCH v2] " Juraj Linkeš
  2021-09-06  3:01   ` Tu, Lijuan
@ 2021-09-10 13:41   ` Juraj Linkeš
  2021-09-16  2:33     ` Tu, Lijuan
  2021-10-07 11:26     ` [dts] [PATCH v4] " Juraj Linkeš
  1 sibling, 2 replies; 12+ messages in thread
From: Juraj Linkeš @ 2021-09-10 13:41 UTC (permalink / raw)
  To: lijuan.tu, ohilyard; +Cc: dts, Juraj Linkeš

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

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