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. 【ubuntu】出现device not managed连接不上网络

    ubuntu安装好后显示“device not managed” 1. 编辑/etc/NetworkManager/NetworkManager.conf: sudo gedit /etc/Netwo ...

  2. 修复kindEditor点击加粗, 内容焦点跳动的问题

    大概1560~1569行 pos : function() { var self = this, node = self[0], x = 0, y = 0; if (node) { if (node. ...

  3. 拿到返回值,Callable示例

  4. jQuery遍历节点

    html代码 <div> <p>武汉长乐教育</p> <span>在哪才能真正学习会PHP技术?</span> <a href=&qu ...

  5. sharepoint2007就地升级2010系列(二)环境概述及升级前准备

    环境介绍:1台2GB的虚机 现在是windows server 2008 sp2 X64 +SQL 2005+SQL2005 sp3+sharepoint2007+sharepoint2007SP2 ...

  6. 让你的sharepoint2013具有EMS快递查询的功能

    <iframe name="kuaidi100" src="http://www.kuaidi100.com/frame/app/index2.html" ...

  7. 轻松完成excel读写操作- 基于POI的框架BingExcel的使用(1)

    Bingexcel User Guide 使用maven进行项目开发目前项目的maven仓库是在github上,浏览地址为 https://github.com/bingyulei007/mvn-re ...

  8. 运行python文件报SyntaxError:Non-ASCII character '\xe7'

    以下是报错内容: 在文件页头加上: #coding=uft-8 ~解决了~ 记录一下(捂脸)

  9. mybatis由JDBC的演化过程分析

    我们知道,mybatis是对JDBC的封装,那么他是如何演变过来的呢? 摘自传智传媒Java培训资料 关于mybatis的演化原理,我们先看看我们最熟悉也是最基础的通过JDBC查询数据库数据,一般需要 ...

  10. vue checkbox 双向绑定及初始化渲染

    双向绑定可以绑定到同一个数组 <input type="checkbox" id="jack" value="Jack" v-mode ...