# Auto-POC **Repository Path**: OpenCloudOS/auto-poc ## Basic Information - **Project Name**: Auto-POC - **Description**: Auto-POC 为 OpenCloudOS 团队针对 POC 场景开发的自动化测试工具,主要涵盖了环境自动初始化、完整性测试、国密测试、OS基础功能测试(网络、软件源、磁盘、CPU、内存稳定)等性能微基准测试、磁盘性能FIO、内存性能IOZONE等测试。 - **Primary Language**: Python - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-08-13 - **Last Updated**: 2025-09-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # OpenCloudOS POC 脚本文档 ## 编写思路 该脚本主要用于执行一系列的系统测试任务,包括用户管理、系统配置、YUM 操作、磁盘 I/O 测试、内存稳定性测试、CPU 稳定性测试以及 UnixBench 测试。 Shell 脚本 `build.sh` 用于在其他系统中构建完整的 tar 包: - 下载必要的 RPM 包 - 将 RPM 包与测试脚本、测试工具(UnixBench)和配置文件共同打包 - 脚本提供了一些参数可供修改,如软件包的下载路径、包列表、系统版本和架构等 - 由于构建 tar 包的系统与待测试系统的系统版本和架构很有可能不同,因此需要注意**在必要的时候提供合适的参数** 注意:dnf download 时,即使指定了 `--alldeps` 和 `reposdir` 与不同于当前系统的 releasever,对软件包的处理也会受到当前系统已有软件包的影响,导致软件包找不到等各种意外情况,因此添加 `--installroot=/tmp` 参数,将“安装目录”随意指定一个不含操作系统根文件系统的目录,可以避免这种影响。 Python 脚本 `main.py` 用于在待测试的系统中进行测试,将调用 `poc` 目录下的其他脚本完成具体的测试内容: - `execute_command()` 函数使用 subprocess 模块来执行系统命令 - `install_rpms()` 函数安装 `build.sh` 下载的所有测试所需的工具的软件包 - 针对每一测试大类提供了各种测试函数,如 user_admin_test(), yum_test(), network_config_test() 等 - 测试函数通过 `read_config()` 函数读取 `config.yaml` 配置文件获取参数 - 使用 `log()` 导出所有命令的执行及其输出与报错至 `logs` 目录下的各项文件中,并同时记录在 `logs/full.log` 文件中 - 使用 `get_dns_addresses()`, `get_gateway_address()`, `get_ip_info()` 函数来自动探测 `network_config_test()` 中部分网络参数测试所需要的参数(静态网络参数与 `nmcli con up/down` 的连接名) - `get_dns_addresses()` 解析 `/etc/resolv.conf` 文件 - `get_gateway_address()` 解析 `ip route show` 命令 - `get_ip_info()` 解析 `nmcli` 与 `ip a` 的输出并整合以上两个函数的信息以获得所有所需参数 ## 使用说明 ### 构建 tar 包 请在可以访问 OpenCloud OS 镜像站的机器中构建,构建机的系统需要是 OpenCloud OS 8 及以上版本(需要用到新版 dnf 包管理器)。 Shell 脚本 `build.sh`: 使用以下命令运行脚本: ```shell ./build.sh -p -l "" -r -a ``` - ``: 指定下载路径,默认为 "rpms"。 - ``: 指定要下载的 RPM 包列表,用双引号括起来,以空格分隔。 - ``: 指定系统版本,**默认为当前系统的版本**。 - ``: 指定系统架构,**默认为当前系统的架构**,64 位 arm 请使用 aarch64。 可以使用 --help 选项查看帮助信息: ```shell ./build.sh --help ``` **请注意**:由于构建 tar 包的系统与待测试系统的系统版本和架构很有可能不同,因此需要注意**在必要的时候提供合适的参数**。 如为 OpenCloud OS 8 构建测试 tar 包需要运行命令 `./build.sh -r 8`。 ### 在被测机中测试 准备工作: - 请确保系统中已安装了 Python(详见补充说明)。 - 配置文件为 `config.yaml`,可以通过编辑此文件来配置测试的参数。配置文件需要与 Python 脚本位于相同目录下。 - 每个测试类的 enable 字段控制该类是否开启测试,可设置为 true 或 false - 其余字段根据注释配置 - shutdown 与 reboot 功能涉及系统的关机与重启,重启后不会自动重新运行脚本 执行脚本: 直接运行 `run.sh` 脚本即可,可以通过命令 `./run.sh` 执行,将自动安装所需软件包并执行 poc 脚本。 ## 支持系统 OpenCloudOS X86_64/AArch64 ## 补充说明 ### Python 环境 Python 脚本的运行需要有 Python3 环境的支持。OpenCloud OS 8 中的 dnf 工具也基于 Python 构建,因此实际上系统中已经内置了 Python 运行环境,只是其可执行文件名不是常规的 `python3` 而是 `/usr/libexec/platform-python`,在 OpenCloud OS 8 中,其版本号为 Python 3.6.8,且已经预装了 python3-pyyaml 软件包可用于解析 yaml 格式的配置文件,但脚本中仍预置了 python3-pyyaml 包的下载,以防系统中无 python3-pyyaml 预装的情况。 ### Perl 环境 UnixBench 执行需要用到 Perl,最小安装的 OpenCloud OS 8 没有 Perl,需要安装。 ### gcc 编译环境 iozone 的编译需要使用 gcc,最小安装的 OpenCloud OS 8 没有 gcc,需要安装。 ### 强制访问控制测试 `semanage` 命令来源于软件包 policycoreutils,最小安装的 OpenCloud OS 8 没有,需要安装。 SELinux 模式由原文档中的 enforcing 改成 permissive,并同步修改了文档。 ### 国密算法测试 国密算法在目前(20280.19)OpenCloud OS 8 的镜像中的 openssl 版本中还不支持,但源中最新的 openssl 已支持,因此也需要额外下载 rpm 包升级。不过 openssl 似乎已被前面的软件包依赖,所以已经被下载了,为了避免未来依赖关系出现变化,依然添加 openssl 的下载。 ### 完整性测试 完整性测试需要额外安装软件包 aide。 ### 测试流程参考来源与修改 磁盘测试中分区使用 parted 代替 fdisk,可以使用非交互式的命令进行分区,分区只分一个区,分区前会初始化分区表,将会清除所有数据,请注意使用安全与数据备份。 网络性能测试(包含 Netperf 测试与 iperf 测试)的测试工具需要配置客户端与服务端,不便于在单主机上测试,删去。 根据客户业务需求的不同,部分测试中涉及到的内容可能差异较大,因此暂时删去以下部分测试: - 应用程序整体性能测试 - CentOS迁移测试 - 采购系统兼容性测试 - 业务基础软件兼容性测试 ### 可能存在的问题 #### 网络测试 1. 网络参数的自动探测可能会有未被测试覆盖到的问题。 2. 仅适用于单网卡的情况,多网卡由于 bond 管理的原因可能会配置完成后网络启动失败。 3. **注意配置失败会导致断网!!** #### 依赖软件包 目前解决测试所需软件使用的方案是获取所有需要的依赖包的 RPM: 需要软件包 A,若 A 依赖 B,则同时下载 B 的 RPM 包安装。 可能导致的问题:从源里获取时版本高于镜像中自带的软件包版本,可能会导致依赖低版本 B 的软件包 C 与高版本的 B 冲突,即 C 依赖旧版 B,但新版 B 将被安装,产生冲突。 采用的解决方案是使用 `rpm` 命令配合 `--nodeps` 与 `--force` 参数来忽略依赖冲突与新旧软件包的文件覆盖警告。因为下载 rpm 的软件包可以满足所需软件的依赖关系,因此不影响测试软件的运行。 也考虑过直接将所有 RPM 包解包到 `/`,会导致很多系统安装完成后自带的配置文件被覆盖,暂不考虑这个方案,如果以后要考虑这个方案,需要避免 `/etc` 目录内重要文件被直接覆盖。 ## 测试内容 | 测试编号 | 测试项目 | 测试内容 | | -------- | -------------- | -------------------------- | | 111 | 用户管理 | 添加用户 | | 112 | 用户管理 | 设置密码 | | 113 | 用户管理 | 设置密钥 | | 114 | 用户管理 | 删除用户 | | 211 | 关机 | shutdown | | 8 | 网卡管理 | 查看网卡设备 | | 8 | 网卡管理 | 查看当前网卡连接列表 | | 8 | 网卡管理 | 启动网卡 | | 8 | 网卡管理 | 关闭网卡 | | 411 | 网络配置 | DHCP 连接创建 | | 412 | 网络配置 | DHCP 连接启动 | | 421 | 网络配置 | 静态连接创建 | | 422 | 网络配置 | 静态连接启动 | | 423 | 网络配置 | 查看是否配置成功 | | 424 | 网络配置 | 将该静态连接设置为自动启动 | | 511 | yum 使用 | 检查软件源 | | 521 | yum 使用 | 软件源更新 | | 531 | yum 使用 | 检查软件包 | | 541 | yum 使用 | 软件包安装 | | 542 | yum 使用 | 软件包卸载 | | 611 | 磁盘分区管理 | 查看磁盘分区信息 | | 621 | 磁盘分区管理 | 磁盘分区 | | 622 | 磁盘分区管理 | 磁盘格式化 ext4 | | 623 | 磁盘分区管理 | ext4 分区挂载 | | 624 | 磁盘分区管理 | ext4 分区卸载 | | 622 | 磁盘分区管理 | 磁盘格式化 xfs | | 623 | 磁盘分区管理 | xfs 分区挂载 | | 624 | 磁盘分区管理 | xfs 分区卸载 | | 711 | 磁盘 I/O | fio 顺序读写测试 | | 721 | 磁盘 I/O | fio 随机读写测试 | | 731 | 磁盘 I/O | iozone 带 page cache 测试 | | 741 | 磁盘 I/O | iozone direct io测试 | | 811 | 内存稳定性 | stress | | 911 | CPU 稳定性 | stress | | 1011 | Unixbench | Unixbench 测试 | | 1111 | 国密算法测试 | SM4 测试 | | 1121 | 国密算法测试 | SM3 测试 | | 1131 | 国密算法测试 | SM2 测试 | | 1211 | 系统稳定性测试 | LTP 测试 | | 18 | 自主访问控制 | 用户权限设置 | | 18 | 自主访问控制 | 用户组权限设置 | | 18 | 自主访问控制 | 文件属主设置 | | 1411 | 强制访问控制 | SELinux 支持 | | 1412 | 强制访问控制 | 查看规则 | | 1413 | 强制访问控制 | 添加规则 | | 1414 | 强制访问控制 | 删除规则 | | 1511 | 安全审计 | 添加规则 | | 1512 | 安全审计 | 删除规则 | | 1611 | 用户数据完整性 | 文件完整性检测 | | 1621 | 用户数据完整性 | 文件加密 |