dts 大体框架

framework
定义类
定义方法
tests
framework调用所需要的函数 ./dpdk/usertools/cpu_layout.py
/sys/devices/system/cpu
环境内核:0 1 2 3 4 5 6 7
ffff:1111 1111 1111 1111
ff3e:1111 1111 0011 1110

dts.py

    01.dts_parse_param(config, section):
02.dts_parse_config(config, section):
03.dts_parse_commands(commands):
04.dts_run_commands(crb, dts_commands):
05.get_project_obj(project_name, super_class, crbInst, serializer, dut_id):
06.dts_log_testsuite(duts, tester, suite_obj, log_handler, test_classname):
07.dts_log_execution(duts, tester, log_handler):
08.dts_crbs_init(crbInsts, skip_setup, read_cache, project, base_dir, serializer, virttype):
09.dts_crbs_exit(duts, tester):
10.dts_run_prerequisties(duts, tester, pkgName, patch, dts_commands, serializer):
11.dts_run_target(duts, tester, targets, test_suites):
12.dts_run_suite(duts, tester, test_suites, target):
13.run_all(config_file, pkgName, git, patch, skip_setup, '''Main process of DTS, it will run all test suites in the config file.'''
read_cache, project, suite_dir, test_cases,
base_dir, output_dir, verbose, virttype, debug,
debugcase, re_run, commands):
14.show_speedup_options_messages(read_cache, skip_setup):
15.save_all_results():
16.quit_execution(duts, tester):

Main.py

"""
A test framework for testing DPDK.
"""
01.def git_build_package(gitLabel, pkgName, depot="dep"):
dts.run_all(args.config_file, args.snapshot, args.git, #args = parser.parse_args()
args.patch, args.skip_setup, args.read_cache,
args.project, args.suite_dir, args.test_cases,
args.dir, args.output, args.verbose,args.virttype,
args.debug, args.debugcase, args.re_run, args.commands)

Crb.py

class Crb(object):
01.send_expect(self, cmds, expected, timeout=TIMEOUT,alt_session=False, verify=False):
02.create_session(self, name=""):
03.destroy_session(self, session=None):
04.reconnect_session(self, alt_session=False):
05.send_command(self, cmds, timeout=TIMEOUT, alt_session=False):
06.get_session_output(self, timeout=TIMEOUT):
07.set_test_types(self, func_tests, perf_tests):
08.get_total_huge_pages(self):
09.mount_huge_pages(self):
10.strip_hugepage_path(self):
11.set_huge_pages(self, huge_pages, numa=-1):
12.set_speedup_options(self, read_cache, skip_setup):
13.set_directory(self, base_dir):
14.admin_ports(self, port, status):
15.admin_ports_freebsd(self, port, status):
16.admin_ports_linux(self, eth, status):
17.pci_devices_information(self):
18.pci_devices_information_uncached(self):
19.pci_devices_information_uncached_linux(self):
20.pci_devices_information_uncached_freebsd(self):
21.get_pci_dev_driver(self, domain_id, bus_id, devfun_id):
22.get_pci_dev_driver_linux(self, domain_id, bus_id, devfun_id):
23.get_pci_dev_driver_freebsd(self, domain_id, bus_id, devfun_id):
24.get_pci_dev_id(self, domain_id, bus_id, devfun_id):
25.get_pci_dev_id_linux(self, domain_id, bus_id, devfun_id):
26.get_device_numa(self, domain_id, bus_id, devfun_id):
27.get_device_numa_linux(self, domain_id, bus_id, devfun_id):
28.get_ipv6_addr(self, intf):
29.get_ipv6_addr_linux(self, intf):
30.get_ipv6_addr_freebsd(self, intf):
31.disable_ipv6(self, intf):
32.enable_ipv6(self, intf):
33.create_file(self, contents, fileName):
34.kill_all(self, alt_session=True):
35.close(self):
36.get_os_type(self):
37.check_os_type(self):
38.init_core_list(self):
39.init_core_list_uncached(self):
40.init_core_list_uncached_freebsd(self):
41.init_core_list_uncached_linux(self):
42.get_all_cores(self):
43.remove_hyper_core(self, core_list, key=None):
44.init_reserved_core(self):
45.remove_reserved_cores(self, core_list, args):
46.get_reserved_core(self, config, socket):
47.get_core_list(self, config, socket=-1):
48.get_lcore_id(self, config):
49.get_port_info(self, pci):
50.get_port_pci(self, port_id):
51.enable_promisc(self, intf):

Dut.py

"""
A connection to the CRB under test.
This class sends commands to the CRB and validates the responses. It is
implemented using either ssh for linuxapp or the terminal server for
baremetal.
All operations are in fact delegated to an instance of either CRBLinuxApp
or CRBBareMetal.
"""
00.__init__(self, crb, serializer, dut_id)
01.init_host_session(self, vm_name)
02.new_session(self, suite="")
03.close_session(self, session)
04.set_nic_type(self, nic_type)
05.set_toolchain(self, target)
06.mount_procfs(self)
07.ount_procfs_linux(self)
08.mount_procfs_freebsd(self)
09.get_ip_address(self)
10.get_password(self)
11.get_username(self)
12.dut_prerequisites(self)
13.restore_interfaces(self)
14.restore_interfaces_freebsd(self)
15.stop_ports(self)
16.restore_interfaces_linux(self)
17.setup_memory(self, hugepages=-1)
18.setup_memory_linux(self, hugepages=-1)
19.setup_memory_freebsd(self, hugepages=-1)
20.taskset(self, core)
21.is_ssh_session_port(self, pci_bus)
22.get_dpdk_bind_script(self)
23.bind_interfaces_linux(self, driver='igb_uio', nics_to_bind=None)
24.unbind_interfaces_linux(self, nics_to_bind=None)
25.get_ports(self, nic_type='any', perf=None, socket=None)
26.get_ports_performance(self, nic_type='any', perf=None, socket=None,
force_same_socket=True,
force_different_nic=True)
27.get_peer_pci(self, port_num)
28.get_mac_address(self, port_num)
29.get_ipv6_address(self, port_num)
30.get_numa_id(self, port_num)
31.lcore_table_print(self, horizontal=False)
32.get_memory_channels(self)
33.check_ports_available(self, pci_bus, pci_id)
34.rescan_ports(self)
35.rescan_ports_uncached(self)
36.rescan_ports_uncached_linux(self)
37.rescan_ports_uncached_freebsd(self)
38.load_serializer_ports(self)
39.save_serializer_ports(self)
40.scan_ports(self)
41.scan_ports_cached(self)
42.scan_ports_cached_linux(self)
43.scan_ports_uncached(self)
44.scan_ports_uncached_linux(self)
45.scan_ports_uncached_freebsd(self)
46.setup_virtenv(self, virttype)
47.generate_sriov_vfs_by_port(self, port_id, vf_num, driver='default')
48.destroy_sriov_vfs_by_port(self, port_id)
49.destroy_all_sriov_vfs(self)
50.destroy_all_sriov_vfs(self)
51.get_vm_core_list(self)
52.load_portconf(self)
53.map_available_ports(self)
54.map_available_ports_uncached(self)
55.disable_tester_ipv6(self)
56.enable_tester_ipv6
57.check_port_occupied
58.get_maximal_vnc_num(self)
59.close(self)
60.virt_exit(self)
61.crb_exit(self)

test_cases.py

"""
A base class for creating DTF test cases.
"""
test_cases.py
01.def __init__(self, duts, tester, target, suitename)
02.def init_log(self)
03._check_and_reconnect(self, crb=None)
04.set_up_all(self)
05.set_up(self)
06.tear_down(self)
07.tear_down_all(self)
08.verify(self, passed, description)
09._get_nic_driver(self, nic_name)
10.set_check_inst(self, check=None)
11.rst_report(self, *args, **kwargs)
12.result_table_create(self, header)
13.result_table_add(self, row)
14.result_table_print(self)
15.result_table_getrows(self)
16._get_functional_cases(self)
17._get_performance_cases(self)
18._has_it_been_requested(self, test_case, test_name_regex)
19.set_requested_cases(self, case_list)
20._get_test_cases(self, test_name_regex)
21.execute_setup_all(self)
22._execute_test_case(self, case_obj)
23.execute_test_cases(self)
24.execute_test_case(self, case_obj)
25.get_result(self)
26.get_case_cfg(self)
27.get_suite_cfg(self)
28.execute_tear_downall(self)
29.enable_history(self, history)
30.dump_history(self)
31.wirespeed(self, nic, frame_size, num_ports)

CheckCase.py

"""
Class for check test case running criteria. All information will be loaded
from conf/test_case_*list.json. Current two files are maintained. One is
for check whether test case should skip, another one is for check whether
current environment support test case execution.
"""
CheckCase.py
filter_json_file = './conf/test_case_checklist.json'
support_json_file = './conf/test_case_supportlist.json'
00.__init__(self)
01.check_dut(self, dut)
02._check_os(self, os_type)
03._check_nic(self, nic_type)
04._check_target(self, target)
05._check_host_driver(self, drivers)
06.case_skip(self, case_name)
07.case_support(self, case_name) settings.py
"""
FOLDERS
'Framework': 'framework',
'Testscripts': 'tests',
'Configuration': 'conf',
'Depends': 'dep',
'Output': 'output',
'NicDriver': 'nics', Nics and its identifiers supported by the framework.
'kawela': '8086:10e8',
'kawela_2': '8086:10c9',
'kawela_4': '8086:1526',
'bartonhills': '8086:150e',
'powerville': '8086:1521',
'powerville_vf': '8086:1520', DRIVERS
'kawela': 'igb',
'kawela_2': 'igb',
'kawela_4': 'igb',
'bartonhills': 'igb',
'powerville': 'igb',
'powerville_vf': 'igbvf', List used to translate scapy packets into Ixia TCL commands.
SCAPY2IXIA
'Ether',
'Dot1Q',
'IP', Helpful header sizes.
HEADER_SIZE
'eth': 18,
'ip': 20,
'ipv6': 40, dpdk send protocol packet size.
PROTOCOL_PACKET_SIZE = {
'lldp': [110, 100],
}
Default session timeout.
TIMEOUT = 15 Global macro for dts.
IXIA = "ixia" The log name seperater.
LOG_NAME_SEP = '.' Section name for suite level configuration
SUITE_SECTION_NAME = "suite" DTS global environment variable
DTS_ENV_PAT = r"DTS_*"
PERF_SETTING = "DTS_PERF_ONLY" DTS global error table
DTS_ERR_TBL = {
"GENERIC_ERR": 1,
"DPDK_BUILD_ERR" : 2,
"DUT_SETUP_ERR" : 3, 00.get_nic_name(type)
01.get_nic_driver(pci_id)
02.get_netdev(crb, pci)
03.get_host_ip(address)
04.save_global_setting(key, value)
05.load_global_setting(key)
06.report_error(error)
07.exit_error()
08.accepted_nic(pci_id)

utils.py

"""
Create thread lock dictionary based on DUTs number
"""
utils.py
01.create_parallel_locks(num_duts)
02.parallel_lock(num=1)
03.RED(text)
04.BLUE(text)
05.GREEN(text)
06.pprint(some_dict, serialzer=None)
07.regexp(s, to_match, allString=False)
08.get_obj_funcs(obj, func_name_regex)
09.remove_old_rsa_key(crb, ip)
10.human_read_number(num)
11.get_subclasses(module, clazz)
12.copy_instance_attr(from_inst, to_inst)
13.create_mask(indexes)
14.convert_int2ip(value, ip_type)
15.convert_ip2int(ip_str, ip_type)
16.get_backtrace_object(file_name, obj_name)

dts--framework(一)的更多相关文章

  1. windows类书的学习心得

    原文网址:http://www.blogjava.net/sound/archive/2008/08/21/40499.html 现在的计算机图书发展的可真快,很久没去书店,昨日去了一下,真是感叹万千 ...

  2. Linux PWM framework简介和API描述【转】

    本文转载自:https://blog.csdn.net/mike8825/article/details/51656400 1. 前言 PWM是Pulse Width Modulation(脉冲宽度调 ...

  3. Linux Regulator Framework(2)_regulator driver

    转自蜗窝科技:http://www.wowotech.net/pm_subsystem/regulator_driver.html 说实话,这篇好难懂啊... 1. 前言 本文从regulator d ...

  4. Linux regulator framework(1) - 概述【转】

    转自蜗窝科技:http://www.wowotech.net/pm_subsystem/regulator_framework_overview.html 1. 前言 Regulator,中文名翻译为 ...

  5. Linux Thermal Framework分析及实施

    关键词:Zone.Cooling.Governor.Step Wise.Fair Share.trip等等. Linux Thermal的目的是控制系统运行过程中采样点温度,避免温度过高造成器件损坏, ...

  6. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  7. Entity Framework Core 1.1 升级通告

    原文地址:https://blogs.msdn.microsoft.com/dotnet/2016/11/16/announcing-entity-framework-core-1-1/ 翻译:杨晓东 ...

  8. Entity Framework Core 实现MySQL 的TimeStamp/RowVersion 并发控制

    将通用的序列号生成器库 从SQL Server迁移到Mysql 遇到的一个问题,就是TimeStamp/RowVersion并发控制类型在非Microsoft SQL Server数据库中的实现.SQ ...

  9. 在传统.NET Framework 上运行ASP.NET Core项目

    新的项目我们想用ASP.NET Core来开发,但是苦于我们历史的遗产很多,比如<使用 JavaScriptService 在.NET Core 里实现DES加密算法>,我们要估计等到.N ...

  10. 采用MiniProfiler监控EF与.NET MVC项目(Entity Framework 延伸系列1)

    前言 Entity Framework 延伸系列目录 今天来说说EF与MVC项目的性能检测和监控 首先,先介绍一下今天我们使用的工具吧. MiniProfiler~ 这个东西的介绍如下: MVC Mi ...

随机推荐

  1. CF 540D——Bad Luck Island——————【概率dp】

    Bad Luck Island time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  2. 了解委托(Delegate)

    委托是一种全新面向对象语言特性,运行在.Net平台 基于委托,开发事件驱动程序变得非常简单 使用委托可以大大简化多线程变成的难度 理解委托 int a:   //定义变量 a=100://给变量赋值 ...

  3. C#天气预报程序

    首先要引用这个服务,http://www.webxml.com.cn/Webservices/WeatherWebService.asmx 出现对话框后,把中央气象的服务网址添加到里面 选择高级, 添 ...

  4. 2.C#中的常用快捷键

    快速对齐代码: Ctrl+K+D:  快速对齐代码   (如果代码语法错误,就不能使用) Ctrl+Z:  撤销 Ctrl+S:保存   没事就Ctrl+S一下,防止因为电脑断电,代码全部丢失 Ctr ...

  5. web项目无法被Eclipse的Tomcat识别的解决办法

    Eclipse 导入外部项目无法识别为web项目并且无法在部署到tomcat下 1.进入项目目录,找到 .project 文件: 2.找到 <natures> 代码段,在里面加入如下标签内 ...

  6. 关于node不需要重启即可刷新页面

    之前写node程序每次修改后台代码都需要重新node xxx.js重启该文件,但是发现有一个supervisor的模块可以解决这个问题,需要npm install -g supervisor一下,然后 ...

  7. JavaScript精简代码 非一般的写法(转载)

    摘要:最近在编写一个前端模块功能,编写了大量的代码,其中一般图片特效展示是参考别人的代码来写的,发现有些代码似乎看得明白又好像不确定是不是哪个意思,所以在网上问了一下程序员们,原来是JS代码简写. 转 ...

  8. 关于基于Linphone的视频通话Android端开发过程中遇到的问题

    关于基于Linphone的视频通话Android端开发过程中遇到的问题 运用开源项目Linphone的SDK进行开发,由于是小组进行开发,我主要负责的是界面部分. 由于当时是初学Android开发,对 ...

  9. [原创]Debian9 从零编译配置Redis4.0

    序言 Redis 一.准备工作 1.1 更新系统安装包列表 没啥,就他喵想用个最新的. # apt update 1.2 创建需要使用的目录 创建目录source和web,分别用来放源码和编译后的文件 ...

  10. VtigerCRM-6.4.0-zh_CN (OpenLogic CentOS 7.2)

    平台: CentOS 类型: 虚拟机镜像 软件包: vtigercrm6.4.0 commercial crm mysql open source php vtiger 简体中文版 服务优惠价: 按服 ...