OS方法 - KPTest框架开放资料

Skip to content

# OS方法

1. is_success
> 描述：

    1
    2
    3

    方法功能：

    命令格式：

> 参数：

    1
    2
    3
    4
    5
    6
    7
    8

    cmd_str     (str) : 命令字符串
    kwargs      (dict): 其他选配参数
    {
    "msg"       (str) : 命令执行失败时的提示信息
    "key"       (str) : 即使命令执行成功，但关键字key不在回显中，也认为失败
    "wait_time" (int) : 命令执行后的等待时间，单位为秒
    "timeout"   (int) : 命令执行的超时时间
    }

> 返回值：

    1
    2

    result      (bool): 操作是否成功
    outcome     (str) : 命令的返回信息

> 异常：

    1

> 举例：

    1

2. send_combination_keys
> 描述：

    1
    2
    3

    方法功能：

    命令格式：

> 参数：

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10

    cmdstr      (str) : 组合键命令
    ctrl + a:   光标跳到行首
    ctrl + c:   杀死当前进程
    ctrl + l:   清屏
    ctrl + s:   暂时冻结当前shell的输入
    ctrl + q:   解冻
    ctrl + ]:   退出虚拟机console
    waitstr     (str) :  预期返回字符
    input_list  (list):  二次输入字符
    timeout     (int) :命令执行超时时间，（默认超时时间600s）

> 返回值：

    1

    stdout      (str) : 命令的标准输出字符串

> 异常：

    1

    None

> 举例：

    1
    2

    host为OS或者bmc对象，已提前获取到
    self.host.send_combination_keys(keys)

3. get_checksum
> 描述：

    1
    2
    3

    方法功能：获取指定文件的checksum值, 比如常用的md5sum

    命令格式：md5sum /home/test.txt

> 参数：

    1
    2

    path        (str): 需要获取checksum的文件路径
    method      (str): 检查文件的方法，默认为md5，可用方法有['md5', 'sha1', 'sha256', 'sha384', 'sha512', 'ck']

> 返回值：

    1

    checksum    (str): 指定文件的checksum值

> 异常：

    1
    2

    FileNotFoundException(f"file path {path} does not exist.")
    InvalidParamException(f"{method} was not found in {check_methods.keys()}")

> 举例：

    1

    md5sum = self.host.get_checksum("/etc/resolv.conf", "md5")

4. path_exists
> 描述：

    1
    2
    3

    方法功能：校验路径状态并在允许的情况下进行自动创建

    命令格式：test -d /home/test/  | test -e /home/test

> 参数：

    1
    2
    3

    path                (str) : 原始路径
    create_if_missing   (bool): 如果缺失是否创建该路径，默认为False
    is_directory        (bool): 判断的路径是否为目录, 默认为True

> 返回值：

    1

    exists              (bool): 最终的路径是否存在

> 异常：

    1

    None

> 举例：

    1

    self.host.path_exists(source)

5. is_directory
> 描述：

    1
    2
    3

    方法功能：判断路径是否为目录

    命令格式：file -b CI

> 参数：

    1

    path      (str) : 需要判断的路径或目录名称

> 返回值：

    1

    result    (bool): 是否为目录

> 异常：

    1

    None

> 举例：

    1

    result = self.host.is_directory(path)

6. chmod
> 描述：

    1
    2
    3

    方法功能：改变文件或目录的文件权限

    命令格式：chmod a+x /home/test

> 参数：

    1
    2
    3

    file_path   (str) : 需要修改的目的文件或目录路径
    mode        (str) : 文件权限字符串，如777
    sudo        (bool): 是否添加sudo标识

> 返回值：

    1

    result      (bool): 是否改变成功

> 异常：

    1

    None

> 举例：

    1

    result = self.host.chmod(r'/home/test', '777')

7. does_path_exist
> 描述：

    1
    2
    3

    方法功能：判断路径是否存在

    命令格式：sh -c ls /home/test

> 参数：

    1

    path     (str): 文件或目录路径.

> 返回值：

    1

    result (bool): 存在返回True，否则返回False

> 异常：

    1

    InvalidParamException: 未指定参数或文件路径.

> 举例：

    1

8. is_aarch64
> 描述：

    1
    2
    3

    方法功能：判断是否是ARM系统

    命令格式：uname -m

> 参数：

    1

    self    (obj) : 本host对象

> 返回值：

    1

    result  (bool): 是否为aarch64架构

> 异常：

    1

    None

> 举例：

    1

    arm = self.host.is_aarch64()

9. get_domain_name
> 描述：

    1
    2
    3

    方法功能：获取西疼死域名

    命令格式：domainname

> 参数：

    1

    self    (obj) : 本host对象

> 返回值：

    1

    domain_name  (str): 系统域名

> 异常：

    1

    KPTestException(f'获取系统域名失败：{stderr}')

> 举例：

    1

    arm = self.host.is_aarch64()

10. set_domain_name
> 描述：

    1
    2
    3

    方法功能：设置域名

    命令格式：domainname local_zone

> 参数：

    1

    domain_name   (str) : 新的域名

> 返回值：

    1

    result        (bool): 是否设置成功

> 异常：

    1

    LinuxCommandException(f"设置域名失败：{stderr}")

> 举例：

    1

    result = self.host.set_domain_name('local_zone')

11. hostnamectl
> 描述：

    1
    2
    3

    方法功能：使用hostnamectl命令设置或读取主机信息

    命令格式：hostnamectl set-hostname my_host

> 参数：

    1
    2

    option   (str) : 参数名称，可选项为[status, host, icon, chassis, deployment, location]
    value    (str) : 参数值，当参数为status时忽略该值

> 返回值：

    1

    result   (dict): 当前主机信息

> 异常：

    1
    2
    3

    InvalidParamException(f'参数{option}非法，可选参数为{options.keys()}')
    InvalidParamException(f'参数{option}的值不能为空')
    KPTestException(f'执行命令{cmd_str}失败：{stderr}')

> 举例：

    1

    result = self.host.hostnamectl('host', 'my_host')

12. get_host_name
> 描述：

    1
    2
    3

    方法功能：获取Unix操作系统信息

    命令格式：cat /etc/os-release

> 参数：

    1

    domain_flag (bool): 为True则同时返回主机所在域的信息，默认值为False

> 返回值：

    1

    host_name   (str): Unix主机名

> 异常：

    1

> 举例：

    1

    host_name = self.host.get_host_name()

13. set_host_name
> 描述：

    1
    2
    3

    方法功能：永久设置系统名称

    命令格式：hostnamectl set-hostname my_host

> 参数：

    1

    host_name   (str): 要设置的系统名称

> 返回值：

    1

    result      (bool): 是否设置成功

> 异常：

    1

    None

> 举例：

    1

    result = self.host.set_host_name('my_host')

14. get_current_user
> 描述：

    1
    2
    3

    方法功能：使用whoami查看当前用户

    命令格式：whoami

> 参数：

    1

    self        (obj): 本host对象

> 返回值：

    1

    curr_user   (str): 当前用户名

> 异常：

    1

    None

> 举例：

    1

    username = self.host.get_current_user()

15. export
> 描述：

    1
    2
    3

    方法功能：使用export命令设置系统环境变量

    命令格式：export LANG=en_US.UTF-8 将语言环境设置为英文

> 参数：

    1
    2

    key      (str) : 需要设置系统变量名称
    value    (str) : 需要设置的系统变量值

> 返回值：

    1

    result   (bool): 是否设置成功

> 异常：

    1

    None

> 举例：

    1

    username = self.host.export('LANG', 'en_US.UTF-8')

16. which
> 描述：

    1
    2
    3

    方法功能：使用which命令获取工具的路径

    命令格式：which ipmitool

> 参数：

    1

    tool_name       (str): 需要设置系统变量名称

> 返回值：

    1

    tool_path       (str): 工具的可执行文件路径，如果不存在返回空

> 异常：

    1

    None

> 举例：

    1

    tool_path = self.host.which('ipmitool')

17. does_tool_exist
> 描述：

    1
    2
    3

    方法功能：使用which命令判断工具是否存在并返回工具路径

    命令格式：which ipmitool

> 参数：

    1

    tool_name       (str) : 需要设置系统变量名称

> 返回值：

    1
    2

    exist           (bool): 工具是否存在
    tool_path       (str) : 工具的可执行文件路径，如果不存在返回空

> 异常：

    1

    None

> 举例：

    1

    tool_path = self.host.which('ipmitool')

18. exit_interface
> 描述：

    1
    2
    3

    方法功能：使用exit退出当前界面

    命令格式：exit

> 参数：

    1

    self        (obj): 本host对象

> 返回值：

    1

    None

> 异常：

    1

    None

> 举例：

    1

    self.host.exit_interface()

19. delete_ssh_key
> 描述：

    1
    2
    3

    方法功能：

    命令格式：

> 参数：

    1
    2

    target_ip   (str): 需要删除信息的服务器ip，如果ip在~/.ssh/known_hosts中不存在则提示
    hosts_path  (str): 系统的known_hosts文件路径，默认为~/.ssh/known_hosts

> 返回值：

    1

> 异常：

    1

> 举例：

    1

20. scp
> 描述：

    1
    2
    3

    方法功能：

    命令格式：

> 参数：

    1
    2
    3
    4
    5
    6

    local_path      (str): 设备本地路径
    remote_path     (str): 远程设备路径
    method          (str): download、upload 分别表示下载/上传
    remote_device   (dict|Unix): 远程设备信息，device对象或字典格式
    如果为字典格式, 样式如下:{"ip": "xx", "username": "xx", "password": "xx"}
    timeout:        (int): 超时时间,默认为600s

> 返回值：

    1

> 异常：

    1

    LinuxCommandException: 拷贝目录/文件失败.

> 举例：

    1

21. sftp
> 描述：

    1
    2
    3

    方法功能：

    命令格式：

> 参数：

    1
    2
    3
    4
    5
    6

    local_path      (str): 设备本地路径
    remote_path     (str): 远程设备路径
    method          (str): download、upload 分别表示下载/上传
    remote_device   (dict|Unix): 远程设备信息，device对象或字典格式
    如果为字典格式, 样式如下:{"ip": "xx", "username": "xx", "password": "xx"}
    timeout:        (int): 超时时间,默认为10s

> 返回值：

    1

> 异常：

    1

    LinuxCommandException: 拷贝目录/文件失败.

> 举例：

    1

22. reboot
> 描述：

    1
    2
    3

    方法功能：使用reboot命令重启host

    命令格式：reboot

> 参数：

    1
    2
    3
    4

    delay       (int) : 下发重启命令后的延时时间, 默认为5秒
    wait        (bool): 是否等待重启完成，默认为False
    timeout     (int) : 等待重启完成超时时间，默认为600秒
    method      (str) : 重启方式，可用systemctl, init, reboot(默认为reboot)

> 返回值：

    1

    None

> 异常：

    1

    None

> 举例：

    1

    self.host.reboot(wait=True)

23. shutdown
> 描述：

    1
    2
    3

    方法功能：使用shutdown命令关闭系统

    命令格式：shutdown

> 参数：

    1
    2

    delay       (int): 下发关机命令后的延时时间, 默认为10秒
    method      (str): 关机方式，可用systemctl, poweroff, init, shutdown(默认为shutdown)

> 返回值：

    1

    None

> 异常：

    1

    None

> 举例：

    1

    self.host.shutdown(delay=30)

24. get_mdbus_shm
> 描述：

    1
    2
    3

    方法功能：获取BMC平台MDBUS共享内存大小

    命令格式：ls -hl /dev/shm/MDBUS_SHM

> 参数：

    1

    timeout       (int): 命令执行超时时间, 默认为60秒

> 返回值：

    1

    shm_size      (str): BMC平台MDBUS共享内存大小

> 异常：

    1

    None

> 举例：

    1

    self.host.get_mdbus_shm()

25. get_mdbus_used_shm
> 描述：

    1
    2
    3

    方法功能：获取BMC平台MDBUS共享内存实际使用大小

    命令格式：find /proc -maxdepth 2 -name smaps 2>/dev/null |xargs grep -w 'MDBUS_SHM' -A 6 2>/dev/null

> 参数：

    1

    timeout     (int): 命令执行超时时间, 默认为60秒

> 返回值：

    1

    used_size   (str): BMC平台MDBUS共享内存实际使用大小

> 异常：

    1

    None

> 举例：

    1

    self.host.get_mdbus_used_shm()

26. get_std_name
> 描述：

    1
    2
    3

    方法功能：

    命令格式：

> 参数：

    1

> 返回值：

    1

> 异常：

    1

> 举例：

    1

27. get_kernel_version
> 描述：

    1
    2
    3

    方法功能：通过uname -r命令获取操作系统的内核版本信息

    命令格式：uname -r

> 参数：

    1

    self        (obj): 本host对象

> 返回值：

    1

    k_ver       (str): 内核版本信息，如5.4.0-125-generic

> 异常：

    1

    None

> 举例：

    1

    kernel_ver = self.host.get_kernel_version()

28. get_gpu_tool
> 描述：

    1
    2
    3

    方法功能：

    命令格式：

> 参数：

    1

> 返回值：

    1

> 异常：

    1

> 举例：

    1

29. get_raid_tool
> 描述：

    1
    2
    3

    方法功能：

    命令格式：

> 参数：

    1

> 返回值：

    1

> 异常：

    1

> 举例：

    1

30. get_raid_tool_version
> 描述：

    1
    2
    3

    方法功能：

    命令格式：

> 参数：

    1

> 返回值：

    1

> 异常：

    1

> 举例：

    1

31. get_disk_list_except_sys
> 描述：

    1
    2
    3

    方法功能：

    命令格式：

> 参数：

    1

> 返回值：

    1

> 异常：

    1

> 举例：

    1

32. get_disks
> 描述：

    1
    2
    3

    方法功能：

    命令格式：

> 参数：

    1

> 返回值：

    1

> 异常：

    1

> 举例：

    1

33. start_service
> 描述：

    1
    2
    3

    方法功能：打开指定Linux操作系统服务

    命令格式：systemctl start network.service

> 参数：

    1
    2

    name        (str): 服务名称.
    method      (str): 执行服务的方法, 取值范围为: service, init, systemctl，默认取值service

> 返回值：

    1

    None

> 异常：

    1

    LinuxCommandException: 命令执行失败.

> 举例：

    1
    2

    host.start_service("smb")
    host.start_service("opensmd",method="init")

34. stop_service
> 描述：

    1
    2
    3

    方法功能：停止指定Linux操作系统服务

    命令格式：systemctl stop network.service

> 参数：

    1
    2

    name        (str): 服务名称.
    method      (str): 执行服务的方法, 取值范围为: service, init, systemctl，默认取值service

> 返回值：

    1

    None

> 异常：

    1

    LinuxCommandException: 命令执行失败.

> 举例：

    1

    hostObj.stop_service("smb")

35. disable_service
> 描述：

    1
    2
    3

    方法功能：禁止服务开机启动

    命令格式：systemctl disable network.service

> 参数：

    1
    2

    name        (str): 服务名称.
    method      (str): 执行服务的方法, 取值范围为: service, init, systemctl，默认取值service

> 返回值：

    1

    None

> 异常：

    1

    LinuxCommandException: 命令执行失败.

> 举例：

    1

    hostObj.disable_service("smb")

36. enable_service
> 描述：

    1
    2
    3

    方法功能：使系统服务开机启动

    命令格式：systemctl enable network.service

> 参数：

    1
    2

    name        (str): 服务名称
    method      (str): 执行服务的方法, 取值范围为: service, init, systemctl，默认取值service

> 返回值：

    1

    None

> 异常：

    1

    LinuxCommandException: 命令执行失败.

> 举例：

    1

    hostObj.enable_service("smb")

37. get_service_status
> 描述：

    1
    2
    3

    方法功能：获取指定Linux操作系统的服务状态

    命令格式：systemctl status network.service

> 参数：

    1
    2

    name        (str): 服务名称.
    method      (str): 执行服务的方法, 取值范围为: service, init, systemctl，默认取值service

> 返回值：

    1

    status      (str): 服务状态信息， 返回值为"running"或"stopped".

> 异常：

    1

    LinuxCommandException: 命令执行失败.

> 举例：

    1

    host.get_service_status("smb")

38. restart_service
> 描述：

    1
    2
    3

    方法功能：重启指定Linux操作系统服务

    命令格式：systemctl restart network.service

> 参数：

    1
    2

    name        (str): 服务名称.
    method      (str): 执行服务的方法, 取值范围为: service, init, systemctl，默认取值service

> 返回值：

    1

    None

> 异常：

    1

    LinuxCommandException: 命令执行失败.

> 举例：

    1
    2

    host.restart_service("smb")
    host.restart_service("openibd","init")

39. get_process_id
> 描述：

    1
    2
    3

    方法功能：获取指定进程名称的进程ID

    命令格式：ps -C sshd -o pid

> 参数：

    1

    process_name    (str) : 进程名称

> 返回值：

    1

    ret_arr         (list): 指定进程名称的所有进程id

> 异常：

    1

    LinuxCommandException: 命令执行失败

> 举例：

    1

    all_pid = host.get_process_id("sshd")

40. get_process_list
> 描述：

    1
    2
    3

    方法功能：获取主机所有进程的信息

    命令格式：ps -Awwo nice,pid,ppid,comm,args

> 参数：

    1

    self            (obj) : 本hot对象

> 返回值：

    1
    2
    3
    4
    5
    6
    7
    8

    process_info    (dict): 进程信息字典, 键值对说面如下:
    {
    pid         (str) : 进程ID
    ppid        (str) : 父进程ID
    name        (str) : 进程名称
    priority    (str) : 进程优先级
    cmdline     (str) : 进程的CMD和参数
    }

> 异常：

    1

    None

> 举例：

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16

    self.host.get_process_list()
    Output:
    {
    '1': {
    'cmdline': '/sbin/init',
    'name': 'systemd',
    'pid': '1',
    'ppid': '0',
    'priority': '0'},
    '10': {
    'cmdline': '[ksoftirqd/0]',
    'name': 'ksoftirqd/0',
    'pid': '10',
    'ppid': '2',
    'priority': '0'},
    }

41. get_network_info
> 描述：

    1
    2
    3

    方法功能：获取主机的网络信息

    命令格式：ifconfig

> 参数：

    1

    self             (obj) : 本host对象

> 返回值：

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15

    network_info     (dict): 当前主机的网络信息, 键值对说明如下：
    {
    'hostname'   (str) : 主机名称.
    'dns_domain' (str) : dns名称.
    'gateway'    (str) : 网关名称.
    'interface'  (str) : {
    'eth0': {
    'netmask'       (str): 子网掩码.
    'ipv4_address   (str): ipv4地址.
    'ipv6_address'  (str): ipv6地址.
    },
    ...
    },
    ...
    }

> 异常：

    1

    None.

> 举例：

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22

    network_info = self.host.get_network_info()
    network_info = {
    'gateway': 'xx.xx.xx.xx',
    'hostname': 'linux',
    'interface': {
    'eth4': {
    'ipv4_address': 'xx.xx.xx.xx',
    'ipv6_address': 'fe80::222:a1ff:fe0d:22d6/64',
    'netmask': 'xx.xx.xx.xx'
    },
    'eth5': {
    'ipv4_address': 'xx.xx.xx.xx',
    'ipv6_address': 'fe80::222:a1ff:fe0d:22d7/64',
    'netmask': 'xx.xx.xx.xx'
    },
    'lo': {
    'ipv4_address': 'xx.xx.xx.xx',
    'ipv6_address': '::1/128',
    'netmask': 'xx.xx.xx.xx'
    }
    }
    }

42. get_domain_info
> 描述：

    1
    2
    3

    方法功能：获取主机的DNS信息

    命令格式：dnsdomainname

> 参数：

    1

    self        (obj): 本host对象

> 返回值：

    1

    domain      (str): 当前主机的dns信息

> 异常：

    1

    None

> 举例：

    1

    dns = self.host.get_domain_info()

43. ping_address
> 描述：

    1
    2
    3

    方法功能：使用ping命令探测特定ip地址

    命令格式：ping xx.xx.xx.xx

> 参数：

    1
    2
    3

    ip_address  (str) : 需要ping的目的ip地址
    count       (int) : 需要重试的次数，默认为1次
    size        (int) : 数据包的大小, 默认为56Byte

> 返回值：

    1

    result      (bool): 工具的可执行文件路径，如果不存在返回空

> 异常：

    1

    None

> 举例：

    1

    result = self.host.ping_address('xx.xx.xx.xx')

44. kill_process
> 描述：

    1
    2
    3

    方法功能：使用kill命令杀掉进程

    命令格式：ping 192.168.100.101kill进程

> 参数：

    1
    2

    process_id      (str) : 进程ID，与名称参数二选一, 该参数优先生效
    process_name    (str) : 进程名称

> 返回值：

    1

    process_id      (list): 被杀掉进程的pid列表

> 异常：

    1

    LinuxCommandException(f"kill进程id{process_id}失败:/r/n{stderr}")

> 举例：

    1

    self.host.kill_process('123456')

45. set_env_var
> 描述：

    1
    2
    3

    方法功能：设置系统环境变量

    命令格式：echo export proxy=my_proxy >> /etc/profile && source /etc/profile

> 参数：

    1
    2
    3
    4

    name            (str) : 要修改的变量名
    value           (str) : 要修改的变量值
    profile_path    (str) : 触发修改成功的配置文件
    is_path         (bool): 系统变量是否为路径变量, 默认为True

> 返回值：

    1

    None

> 异常：

    1

    None

> 举例：

    1

    self.host.set_env_var('proxy', 'my_proxy', r'/etc/profile')

46. get_datetime
> 描述：

    1
    2
    3

    方法功能：获取host日期和时间

    命令格式：date -u "+%Y-%m-%d %H:%M:%S"

> 参数：

    1
    2

    self        (obj) : 本host对象
    utc         (bool) :  命令是否携带-u参数

> 返回值：

    1
    2
    3
    4
    5
    6
    7
    8
    9

    date_time   (dict): 当前系统日期和时间, 包含如下信息:
    {
    year    (str) : 当前时间的年份, 如: 1990, 2012
    month   (str) : 当前时间的月份，如: 01, 12
    day     (str) : 当前时间的日前，如: 01, 20
    hour    (str) : 当前时间的小时，如: 01, 23
    minute  (str) : 当前时间的分钟，如: 00, 02, 59
    second  (str) : 当前时间的秒数，如: 00, 02, 59
    }

> 异常：

    1
    2

    LinuxCommandException(f"获取系统日期时间失败: {stderr}")
    KPTestException(f"日期时间{stdout}格式不正确，需要适配")

> 举例：

    1

    date_time = self.host.get_datetime()

47. switch_directory
> 描述：

    1
    2
    3

    方法功能：进入某个目录

    命令格式：cd /home

> 参数：

    1

    dir_path      (str) : 需要判断的路径或目录名称

> 返回值：

    1

    None

> 异常：

    1

    KPTestException('进入目录{dir_path}失败!')

> 举例：

    1

    self.host.switch_directory(path)

48. source_shell
> 描述：

    1
    2
    3

    方法功能：保留、更改当前shell中的环境变量

    命令格式：source /etc/profile

> 参数：

    1

    dir_path     (str): 文件或目录路径.

> 返回值：

    1

    None

> 异常：

    1

    None

> 举例：

    1

    self.host.source_shell(dir_path=r"/etc/profile")

49. execute_shell
> 描述：

    1
    2
    3

    方法功能：执行shell脚本

    命令格式：./install.sh upgrade

> 参数：

    1
    2
    3
    4

    shell_path:     (str) : shell脚本路径
    shell_name:     (str) : shell脚本名称
    param:          (str) : shell脚本执行时需要的参数
    timeout:        (int) : 执行超时时间，默认为1800秒

> 返回值：

    1
    2

    success         (bool): 是否执行成功
    info            (str) : shell脚本的执行结果

> 异常：

    1

    None

> 举例：

    1

    self.host.execute_shell(shell_path=r"./", shell_name="install.sh", param="upgrade")

50. top_get_cpu_used
> 描述：

    1
    2
    3

    方法功能：top命令获取CPU占用率

    命令格式：top -b -d 5 -n 5 | grep 'iperf' | awk '{s+=$2} END {if(NR>0) print s/NR}'

> 参数：

    1
    2

    timeout         (int): 超时时间，默认为120秒
    process_name    (str): 进程名称,如果有具体进程名称则查询进程CPU，如果没有进程名称则查询总体CPU

> 返回值：

    1

    cpu_rate        (str): 进程CPU占用平均值, 比如40，意思是占用率为40%

> 异常：

    1

    LinuxCommandException(f"执行命令{cmd}失败：{stderr}")

> 举例：

    1

    self.host.top_get_cpu_used("iperf")

51. top_get_mem_used
> 描述：

    1
    2
    3

    方法功能：top命令获取内存占用率

    命令格式：free | grep Mem | awk '{print $3}'

> 参数：

    1
    2

    process_name   (str): 进程名称,如果有具体进程名称则查询进程内存，如果没有进程名称则查询总体内存
    timeout        (int): 超时时间

> 返回值：

    1

    rate           (str): 进程内存占用平均值, 如40

> 异常：

    1

    KPTestException(f'执行命令{cmd}获取内存占用率失败')

> 举例：

    1

    self.host.top_get_mem_used("iperf")

52. get_sys_message
> 描述：

    1
    2
    3

    方法功能：获取系统日志，dmesg或者log_file_path，可通过options过滤有用信息

    命令格式：dmesg > /var/log/new_dmesg.log

> 参数：

    1
    2
    3

    log_file_path   (str) : 需要查看的日志文件路径，如不传入，则使用dmesg命令查看日志
    clear           (bool): 是否需要清除日志  dmesg -c，清除时会自动进行日志备份
    options         (str) : 可选参数模式，如：dmesg -c |grep Error，填写：| grep Error

> 返回值：

    1

    dmesg           (list) : dmesg信息列表

> 异常：

    1
    2
    3
    4

    None
    Example:
    log_info = self.get_sys_message(clear=True, options="|grep PCIE|grep -E Error")
    log_info = self.get_sys_message(log_file_path="/var/log/message", options="|grep PCIE|grep -E Error")

> 举例：

    1

53. get_sys_logs
> 描述：

    1
    2
    3

    方法功能：收集系统所有日志信息并打包成tar文件

    命令格式：

> 参数：

    1

    dest_path           (str): 收集日志存放的目标文件夹

> 返回值：

    1

    logs_tar            (str): 收集到的系统日志压缩包路径，如dest_path.tar.gz

> 异常：

    1

    None

> 举例：

    1

    self.host.get_sys_logs(r"/home/test/")

54. get_sys_disk
> 描述：

    1
    2
    3

    方法功能：获取os盘盘符

    命令格式：df -h | grep boot | grep -v mapper | uniq

> 参数：

    1

    self        (obj): 本host对象

> 返回值：

    1

    main_disk   (str): 系统盘的盘符

> 异常：

    1

    None

> 举例：

    1

    self.host.scp_local_file(r"/home/test", r"/home/", "upload")

55. is_mounted
> 描述：

    1
    2
    3

    方法功能：验证指定挂载点是否已被挂载

    命令格式：mountpoint -q /home/test/

> 参数：

    1
    2
    3
    4

    target      (str) : 需要检查的挂载点路径
    **kwargs:
    strict  (bool): 是否严格模式，检查实际挂载设备状态（默认False）
    sudo    (bool): 是否需要sudo权限验证（默认False）

> 返回值：

    1
    2

    result      (bool): 是否已挂载
    info        (str) : 执行结果信息

> 异常：

    1

    None

> 举例：

    1

    success, info = self.host.is_mounted(r'/home/test/')

56. mount
> 描述：

    1
    2
    3

    方法功能：增强版安全挂载函数

    命令格式：mount /home/test.iso /mnt/

> 参数：

    1
    2
    3
    4
    5
    6
    7
    8
    9

    source          (str) : 源设备/文件路径
    target          (str) : 挂载点路径（自动创建）
    **kwargs        (dict): 额外参数字典，包含以下参数
    fs_type         (str) : 文件系统类型（默认auto）
    options         (str) : 挂载选项（默认包含安全策略）
    readonly        (bool): 是否只读挂载（默认False）
    strict_check    (bool): 严格挂载点校验（默认False）
    sudo            (bool): 使用特权操作（默认False）
    timeout         (int) : 操作超时时间（秒，默认30）

> 返回值：

    1
    2

    result          (bool): 是否已挂载
    info            (str) : 执行结果信息

> 异常：

    1
    2

    InvalidParamException(f"Mount failed: Invalid source path {source}")
    InvalidParamException(f"Mount failed: Invalid target path {target}")

> 举例：

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17

    # 常规磁盘挂载（自动添加安全选项）
    status, msg = obj.mount("/dev/sdb1", "/mnt/data")
    # 特权挂载网络存储
    status, msg = obj.mount(
    "nas:/shared",
    "/mnt/nas",
    fs_type="nfs",
    options="vers=4.2",
    sudo=True,
    timeout=60
    )
    # 检查高危参数触发阻断
    status, msg = obj.mount("/dev/cdrom", "/mnt/cd", options="suid")
    # 输出：False, "Dangerous mount options rejected"
    # 严格模式拒绝虚拟挂载
    status, msg = obj.mount("/proc", "/mnt/fake", strict_check=True)
    # 验证失败并自动清理

57. umount
> 描述：

    1
    2
    3

    方法功能：增强版安全卸载函数

    命令格式：umount /mnt/

> 参数：

    1
    2
    3
    4
    5
    6
    7
    8

    target              (str) : 需要卸载的挂载点路径
    delete_mount_file   (bool): 是否删除挂载的文件，默认为False
    **kwargs            (dict): 额外卸载参数，包含
    force           (bool): 强制卸载（当设备繁忙时，默认False）
    lazy            (bool): 延迟卸载（分离文件系统立即卸载，默认False）
    sudo            (bool): 使用特权操作（默认False）
    timeout         (int) : 操作超时（秒，默认30秒）
    verify          (bool): 卸载后执行状态校验（默认True）

> 返回值：

    1
    2

    result              (bool): 是否已卸载
    info                (str) : 执行结果信息

> 异常：

    1

    InvalidParamException(f"Mount failed: Invalid umount target {target}")

> 举例：

    1
    2
    3
    4
    5
    6
    7

    # 常规卸载
    status, msg = self.host.umount("/mnt/data")
    # 强制卸载NAS存储
    status, msg = self.host.umount("/mnt/nas", force=True, sudo=True)
    # 批量清理
    paths = ["/mnt/temp", "/media/usb"]
    results = {p: self.host.umount(p) for p in paths}

58. try_umount
> 描述：

    1
    2
    3

    方法功能：带有多重尝试卸载机制的umount函数

    命令格式：umount /mnt/

> 参数：

    1
    2
    3
    4
    5
    6
    7
    8

    target      (str) : 需要卸载的挂载点路径
    max_retry   (str) : 最大重试次数，默认3次
    **kwargs    (dict): 额外卸载参数，包含
    force   (bool): 强制卸载（当设备繁忙时，默认False）
    lazy    (bool): 延迟卸载（分离文件系统立即卸载，默认False）
    sudo    (bool): 使用特权操作（默认False）
    timeout (int) : 操作超时（秒，默认30秒）
    verify  (bool): 卸载后执行状态校验（默认True）

> 返回值：

    1

    result      (bool): 是否已卸载

> 异常：

    1

    None

> 举例：

    1

    status = self.host.try_umount("/mnt/data")

59. force_clean_mount
> 描述：

    1
    2
    3

    方法功能：强制清理残留挂载点

    命令格式：umount /mnt/

> 参数：

    1

    target      (str) : 需要卸载的挂载点路径

> 返回值：

    1

    result      (bool): 是否已卸载

> 异常：

    1

    LinuxCommandException(f"查询路径{target}的残留进程失败: {info}")

> 举例：

    1

    status = self.host.force_clean_mount("/mnt/data")

60. set_init_level
> 描述：

    1
    2
    3

    方法功能：切换系统level

    命令格式：init 1

> 参数：

    1
    2

    timeout (int):  命令超时时间
    level   (str):  目标系统运行level

> 返回值：

    1

    None

> 异常：

    1
    2
    3
    4
    5

    KPTestException("未知OS运行级别: %s" % level)
    KPTestException('切换至目标系统运行级别失败
    %s' % (level, result.get('stderr')))
    Returns:
    None

> 举例：

    1

    self.os_host.set_init_level("5")

61. wait_init_level
> 描述：

    1
    2
    3

    方法功能：等待一定时间内切换模式

    命令格式：

> 参数：

    1
    2
    3

    timeout     (int):  命令超时时间
    ck_times    (int):  检查次数
    t_level     (str):  目标系统运行级别

> 返回值：

    1

    None

> 异常：

    1
    2
    3

    KPTestException("切换系统运行级别命令超时")
    Returns:
    None

> 举例：

    1

    self.wait_init_level(t_level="5")

62. get_init_level
> 描述：

    1
    2
    3

    方法功能：获取系统运行级别

    命令格式：runlevel

> 参数：

    1

> 返回值：

    1

    result  (str):  当前系统运行级别

> 异常：

    1
    2
    3

    KPTestException(f"获取系统运行级别失败: {result}")
    Returns:
    result  (str):  当前系统运行级别

> 举例：

    1

    result = self.get_init_level()

63. get_current_level
> 描述：

    1
    2
    3

    方法功能：获取系统当前的运行级别

    命令格式：who -r

> 参数：

    1

    None

> 返回值：

    1

    result  (str):  当前系统运行级别

> 异常：

    1

    KPTestException("执行{}命令失败！".format(cmd))

> 举例：

    1

    self.os_host.get_current_level()

64. hex_install
> 描述：

    1
    2
    3

    方法功能：二进制工具安装，支持.bin(需要安装)/excute(加权限直接执行)/.tar.gz/.zip格式解压安装

    命令格式：

> 参数：

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10

    tool_name       (str) :  工具名，命令具体执行时使用的命令
    - 可执行文件类型时需要与文件名保持一致
    - 压缩包类型时，tool_name需要与压缩包内一层目录名相同
    tool_path       (str) :  工具在系统上的路径，相对或者绝对路径都可以
    install_path    (str) :  目标默认安装目录
    which           (bool): 安装完毕后是否执行which命令
    action          (str) :  只支持install
    env_name        (str) : 安装后需要添加的环境变量
    profile_path    (str) : 系统环境变量位置
    kwargs          (dict): 安装工具携带的可变参数

> 返回值：

    1

    None

> 异常：

    1

    InvalidParamException(f'文件路径{tool_path}不存在')

> 举例：

    1

    self.host.scp_local_file(r"/home/test", r"/home/", "upload")

65. install_pkg
> 描述：

    1
    2
    3

    方法功能：

    命令格式：

> 参数：

    1

> 返回值：

    1

> 异常：

    1

> 举例：

    1

66. remove_pkg
> 描述：

    1
    2
    3

    方法功能：

    命令格式：

> 参数：

    1

> 返回值：

    1

> 异常：

    1

> 举例：

    1

67. list_pkg
> 描述：

    1
    2
    3

    方法功能：

    命令格式：

> 参数：

    1

> 返回值：

    1

> 异常：

    1

> 举例：

    1

68. scp_local_file
> 描述：

    1
    2
    3

    方法功能：从远程被测设备上传或下载文件到执行机本地

    命令格式：scp -r /home/test root@xx.xx.xx.xx:/home/

> 参数：

    1
    2
    3

    local_path      (str) : 执行机路径，支持文件或者文件夹
    remote_path     (str) : 测试主机路径，支持文件或者文件夹
    method:         (str) : 可选["download", "upload"], upload是从执行机本地传输文件到测试主机

> 返回值：

    1

    result          (bool): 是否执行成功

> 异常：

    1

    KPTestException(f"方法{method}不支持，必须是['download', 'upload']中的一个")

> 举例：

    1

    self.host.scp_local_file(r"/home/test", r"/home/", "upload")

69. transport_file
> 描述：

    1
    2
    3

    方法功能：传输文件到目的路径

    命令格式：scp -r /home/test root@xx.xx.xx.xx:/home/

> 参数：

    1
    2
    3
    4

    method       (str)      : 从服务上下载文件还是上传文件到服务上, 可选["download", "upload"]
    source_path  (str)      : 源文件地址，服务上的路径
    target_path  (str)      : 目标文件地址，与服务进行交互的对象上的路径
    target_host  (dict|Unix): 与服务进行交互的对象, None或者空对象表示目标为本地执行机

> 返回值：

    1

    None

> 异常：

    1

    KPTestException(f"方法{method}不支持，必须是['download', 'upload']中的一个")

> 举例：

    1

    self.host.transport_file(r"/home/test", r"/home/", target_host)

70. create_directory
> 描述：

    1
    2
    3

    方法功能：创建目录

    命令格式：mkdir -p /home/test

> 参数：

    1
    2

    dir_path    (str):  创建目录
    sudo        (bool): sudo超级权限

> 返回值：

    1

    result      (bool): 是否删除成功

> 异常：

    1

    None

> 举例：

    1

    self.host.create_directory(r"/home/test")

71. delete_directory
> 描述：

    1
    2
    3

    方法功能：删除指定的目录

    命令格式：rm -rf /home/test

> 参数：

    1
    2

    dir_path    (str) : 指定的需要删除的文件或目录路径
    sudo        (bool): 是否添加sudo标识

> 返回值：

    1

    result      (bool): 是否删除成功

> 异常：

    1

    None

> 举例：

    1

    self.host.delete_directory(r"/home/test")

72. copy_directory
> 描述：

    1
    2
    3

    方法功能：强制cp拷贝文件或目录

    命令格式：cp -r /mnt/. /home/iso/

> 参数：

    1
    2
    3

    dir_path        (str) : 拷贝的源文件或目录路径
    destination     (str) : 拷贝的目的文件或目录路径
    sudo            (bool): 是否添加sudo标识

> 返回值：

    1

    result          (bool): 是否拷贝成功

> 异常：

    1

    None

> 举例：

    1

    result = self.host.copy_directory(r'/home/test', r'/opt/auto/')

73. get_path
> 描述：

    1
    2
    3

    方法功能：获取当前工作目录路径

    命令格式：pwd

> 参数：

    1

    self        (obj): 本host对象

> 返回值：

    1

    curr_path   (str): 当前工作目录路径

> 异常：

    1

    None

> 举例：

    1

    curr_path = self.host.get_current_path()

74. list_file
> 描述：

    1
    2
    3

    方法功能：获取文件夹下的文件名称

    命令格式：ls -al ./

> 参数：

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12

    path       (str) : 需要查看的文件夹的路径
    kwargs     (dict): 其他可选参数，具体如下：
    time_sort       (bool): (optional)文件是否按时间升序排序，默认为False
    reverse         (bool): (optional)逆序排序，默认为False
    grep            (str) : 允许添加额外grep参数
    awk             (bool): 是否添加|awk '{print $9}'
    sudo            (bool): 是否在命令前加sudo，默认为False
    long_list       (bool): -l参数，默认为True
    all             (bool): -a参数，是否打印隐藏文件，默认为False
    one_item        (bool): -1参数，one_file_per_line, 是否一行只打印一个文件，默认为False
    literal         (bool): -N参数，是否打印原始的文件名，默认为False
    quote_path      (bool):  是否转义传入路径，默认为False

> 返回值：

    1

    result     (list): 返回命令行列表, 如果没有则返回空列表

> 异常：

    1

    None

> 举例：

    1
    2

    params = {'grep': 'ip', 'awk': True}
    self.host.list_file(path=file_path, **params)

75. delete_file
> 描述：

    1
    2
    3

    方法功能：删除指定的文件

    命令格式：rm -rf /home/test

> 参数：

    1
    2
    3

    file_path    (str) : 指定的需要删除的文件或目录路径
    sudo         (bool): 是否添加sudo标识
    is_escape    (bool): 是否对路径进行转义，默认为False

> 返回值：

    1

    result       (bool): 是否删除成功

> 异常：

    1

    None

> 举例：

    1

    self.host.delete_file(r"/home/test")

76. create_file
> 描述：

    1
    2
    3

    方法功能：创建空白文件

    命令格式：sh -c echo > /home/test

> 参数：

    1

    file_path    (str) : 指定的需要创建的空文件路径

> 返回值：

    1

    None

> 异常：

    1

    None

> 举例：

    1

    self.host.create_file(r"/home/test")

77. write_to_file
> 描述：

    1
    2
    3

    方法功能：向文件中写内容

    命令格式：echo "abc" >> /home/new_test

> 参数：

    1
    2
    3
    4

    file_path       (str) : 文件路径，包含文件名，若存在特殊字符需要加转义字符
    line            (str) : 向文件写的类容
    append          (bool): (可选参数)是否向文件中追加，默认True
    break_line      (bool): 是否添加换行

> 返回值：

    1

    None

> 异常：

    1

    LinuxCommandException: 写入文件失败

> 举例：

    1

    result = self.host.write_to_file(r'/home/test', 'abc')

78. rename_file
> 描述：

    1
    2
    3

    方法功能：重命名文件

    命令格式：cp /home/test /home/new_test

> 参数：

    1
    2
    3
    4

    file_path       (str) : 工作目录路径
    old_name        (str) : 原来的名字
    new_name        (str) : 新文件名
    sudo            (bool): 是否添加sudo标识

> 返回值：

    1

    result          (bool): 是否拷贝成功

> 异常：

    1

    None

> 举例：

    1

    result = self.host.rename_file(r'/home/test', r'/home/new_test')

79. copy_file
> 描述：

    1
    2
    3

    方法功能：强制cp拷贝文件到目标目录

    命令格式：cp -r /mnt/. /home/iso/

> 参数：

    1
    2
    3

    file_path       (str) : 拷贝的源文件或目录路径
    destination     (str) : 拷贝的目的文件或目录路径
    sudo            (bool): 是否添加sudo标识

> 返回值：

    1

    result          (bool): 是否拷贝成功

> 异常：

    1

    None

> 举例：

    1

    result = self.host.copy_file(r'/home/test', r'/opt/auto/')

80. cut_file
> 描述：

    1
    2
    3

    方法功能：mv文件或者文件夹

    命令格式：mv /mnt/test /home/iso/

> 参数：

    1
    2
    3

    file_path       (str) : 拷贝的源文件或目录路径
    destination     (str) : 拷贝的目的文件或目录路径
    sudo            (bool): 是否添加sudo标识

> 返回值：

    1

    result          (bool): 是否拷贝成功

> 异常：

    1

    None

> 举例：

    1

    result = self.host.cut_file(r'/mnt/test', r'/home/iso/')

81. unzip_file
> 描述：

    1
    2
    3

    方法功能：把文件夹压缩成zip格式到file_path

    命令格式：zip -r test.zip /home/test/

> 参数：

    1
    2
    3
    4
    5

    file_path     (str): 需要查找指定的路径或者文件
    exdir       (str): extract files into exdir
    force      (bool): 不必先询问用户，unzip执行后覆盖原有文件
    strip      (bool): 是否去掉压缩文件中目录
    quote_path      (bool): 是否转义传入路径，默认为False

> 返回值：

    1

> 异常：

    1

> 举例：

    1

82. zip_file
> 描述：

    1
    2
    3

    方法功能：把文件夹压缩成zip格式到file_path

    命令格式：zip -r test.zip /home/test/

> 参数：

    1
    2
    3

    file_path   (str) : 目标压缩文件，如：xxx.zip
    dir_path    (str) : 被压缩的文件夹
    sudo        (bool): 是否需要管理员权限

> 返回值：

    1

    result      (str) : zip命令的返回结果

> 异常：

    1

    None

> 举例：

    1

    res = self.host.zip_file(file_path, dir_path)

83. tar_file
> 描述：

    1
    2
    3

    方法功能：tar.gz格式文件压缩和解压缩，压缩时只支持单目录

    命令格式：tar -zxvf test.tar.gz

> 参数：

    1
    2
    3
    4
    5

    file_path   (str) : 待解压或压缩目标文件路径
    method      (str) : 解压参数，默认-zxvf
    directory   (str) : 待压缩目录或者解压至目标目录
    extract     (bool): 解压缩操作
    create      (bool): 压缩操作

> 返回值：

    1

    result      (str) : tar命令的返回结果

> 异常：

    1

    None

> 举例：

    1

    content = self.host.tar_file(file_path)

84. read_file
> 描述：

    1
    2
    3

    方法功能：查看文件内容

    命令格式：cat install.log | grep 'ip' | awk {print $1}

> 参数：

    1
    2
    3
    4
    5

    file_path   (str) : 文件路径
    grep        (str) : 是否需要经过grep过滤处理
    awk         (str) : 是否需要经过awk处理
    jq          (str) : json处理参数
    sudo        (bool): sudo超级权限

> 返回值：

    1

    result      (list): 返回cat命令行结果的解析列表

> 异常：

    1

    None

> 举例：

    1

    content = self.host.read_file(file_path)

85. tail_file
> 描述：

    1
    2
    3

    方法功能：tail命令，查看文件的最新n行内容

    命令格式：tail -n 10 install.log

> 参数：

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10

    file_path       (str) : 文件路径
    line            (str) : 查询文件最新的N行内容
    kwargs          (dict): 其他可选参数，具体如下：
    {
    grep        (str) : 是否需要经过grep过滤处理
    awk         (str) : 是否需要经过awk处理
    jq          (str) : json处理
    echo        (bool): 是否将结果保存到文件
    sudo        (bool): sudo超级权限
    }

> 返回值：

    1

    result          (list): 返回tail命令执行的结果的列表信息

> 异常：

    1

> 举例：

    1

86. find_file
> 描述：

    1
    2
    3

    方法功能：find命令查找指定目录下的文件

    命令格式：find . -name file.txt

> 参数：

    1
    2
    3
    4
    5

    dir_path        (str) : 查找的文件夹路径
    name            (str) : 需要查找的目标名称
    regex           (str) : regex模式对应的字符串
    sudo            (bool): sudo超级权限
    content_depth   (str): 目录深度

> 返回值：

    1

    result      (list): 满足要求的系统文件的绝对路径

> 异常：

    1

    None

> 举例：

    1

    result = self.host.find_file(params)

87. sed_file
> 描述：

    1
    2
    3

    方法功能：修改linux中任意文件, 需要传入sed正则表达式

    命令格式：sed -i '''s%^#security_driver = "selinux"%security_driver = "none"%g''' /etc/libvirt/qemu.conf

> 参数：

    1
    2
    3

    file_path   (str) : 被修改的文件路径
    sed_cmd     (str) : sed原始命令
    sudo        (bool): 是否需要加入sudo

> 返回值：

    1

    result      (bool): True if success else False

> 异常：

    1

    None

> 举例：

    1

    success = self.host.sed_file(file_path, sed_cmd)

88. md5sum
> 描述：

    1
    2
    3

    方法功能：获取指定文件的md5值

    命令格式：md5sum install.log

> 参数：

    1

    path    (str): 需要获取md5的文件路径

> 返回值：

    1

    md5sum  (str): 指定文件的md5值

> 异常：

    1

    None

> 举例：

    1

    md5sum = host.md5sum("/etc/resolv.conf")

89. sha256sum
> 描述：

    1
    2
    3

    方法功能：获取指定文件的sha256值

    命令格式：sha256sum install.log

> 参数：

    1

    path    (str): 需要获取sha256的文件路径

> 返回值：

    1

    sha256  (str): 指定文件的sha256值

> 异常：

    1

    None

> 举例：

    1

    md5sum = host.sha256sum("/etc/resolv.conf")

90. get_file_total_num
> 描述：

    1
    2
    3

    方法功能：获取文件内容总行数

    命令格式：cat install.log | wc -l

> 参数：

    1

    filename    (str): 文件名称或文件路径

> 返回值：

    1

    counter     (int): 文件行数, 如果存在错误则返回-1

> 异常：

    1

    None

> 举例：

    1

    counter = host.get_file_total_num("/etc/resolv.conf")