openEuler/QoS-Deployment-Test:从零开始编写自定义测试用例的完整指南
openEuler/QoS-Deployment-Test从零开始编写自定义测试用例的完整指南【免费下载链接】QoS-Deployment-TestDocker-based openEuler Online-Offline Co-scheduling Test Suite.项目地址: https://gitcode.com/openeuler/QoS-Deployment-Test前往项目官网免费下载https://ar.openeuler.org/ar/openEuler在线/离线混部QoS资源隔离能力验证测试套件是一个强大的Docker-based测试框架专门用于验证openEuler内核的CPU、内存、网络和IO四维QoS资源隔离机制。对于想要扩展测试场景或创建自定义测试用例的用户来说掌握如何编写测试用例是至关重要的技能。本文将为您提供从零开始编写自定义测试用例的完整教程帮助您快速上手这个专业的测试框架。为什么需要自定义测试用例在实际的生产环境中业务场景千变万化标准测试用例可能无法完全覆盖您的特定需求。通过编写自定义测试用例您可以模拟特定的业务负载模式测试自定义的资源隔离策略验证特定硬件配置下的性能表现评估不同QoS参数组合的效果创建回归测试以确保系统稳定性测试框架架构解析在开始编写自定义测试用例之前让我们先了解QoS-Deployment-Test项目的整体架构├── start.sh # 主入口脚本 ├── common/common.sh # 公共函数库 ├── config/ # 配置文件目录 ├── deployment/ # Docker部署脚本 ├── init/ # 测试初始化与清理脚本 ├── benchmark/ # 基准测试执行脚本 └── output/ # 测试结果输出目录这个结构清晰的目录组织使得添加新测试用例变得非常简单。每个测试类型CPU、MEM、NET、IO都有自己独立的目录结构遵循相同的设计模式。编写自定义测试用例的5个步骤步骤1创建测试配置首先在config/目录下创建您的测试配置文件。例如如果您要创建一个名为DISK的磁盘性能测试可以创建config/disk.conf# DISK QoS Co-deployment Test — Benchmark Parameters # # 离线磁盘I/O负载参数 OFFLINE_DISK_UTIL70 OFFLINE_IO_PATTERNrandwrite # 在线业务参数 ONLINE_DISK_THREADS4 ONLINE_IO_SIZE4k # 测试持续时间秒 TEST_DURATION300配置文件采用简单的KEYVALUE格式确保没有空格围绕等号。所有参数都会在运行时被加载到环境中。步骤2创建初始化脚本在init/目录下创建对应的初始化脚本。以init/disk/disk_init.sh为例#!/bin/bash disk_init() { local log_file$1 local online_container$2 local offline_container$3 log_info 开始磁盘测试初始化 $log_file # 在线业务初始化 log_info 配置在线业务容器磁盘QoS $log_file docker exec $online_container mkdir -p /test/online # 离线业务初始化 log_info 配置离线业务容器磁盘QoS $log_file docker exec $offline_container mkdir -p /test/offline log_info 磁盘测试初始化完成 $log_file } disk_clean() { local log_file$1 local online_container$2 local offline_container$3 log_info 清理磁盘测试环境 $log_file # 清理在线容器 docker exec $online_container rm -rf /test/online # 清理离线容器 docker exec $offline_container rm -rf /test/offline log_info 磁盘测试环境清理完成 $log_file }初始化脚本主要负责测试环境的准备和清理工作包括创建测试目录、配置QoS参数等。步骤3创建基准测试脚本在benchmark/目录下创建您的基准测试执行脚本。以benchmark/disk/disk_run.sh为例#!/bin/bash disk_run_online() { local log_file$1 local result_file$2 local online_container$3 log_info 开始在线磁盘性能测试 $log_file # 执行在线业务磁盘测试 docker exec $online_container \ fio --nameonline-test \ --directory/test/online \ --size1G \ --rwrandread \ --bs4k \ --numjobs${ONLINE_DISK_THREADS} \ --runtime${TEST_DURATION} \ --output-formatjson \ --output$result_file.online.json log_info 在线磁盘测试完成结果保存到 $result_file $log_file } disk_run_offline() { local log_file$1 local offline_container$2 log_info 开始离线磁盘负载生成 $log_file # 启动离线负载 docker exec -d $offline_container \ fio --nameoffline-load \ --directory/test/offline \ --size2G \ --rw${OFFLINE_IO_PATTERN} \ --bs4k \ --numjobs8 \ --runtime${TEST_DURATION} \ --ioenginelibaio \ --rate${OFFLINE_DISK_UTIL}% } disk_run() { cur_dir$1 run_dir$2 disk_conf$3 log_file$4 output_result$5 online_container$6 offline_container$7 # 加载公共函数和配置 source $cur_dir/common/common.sh source $disk_conf # 执行测试 disk_run_offline $log_file $offline_container sleep 5 # 等待离线负载稳定 disk_run_online $log_file $output_result $online_container }基准测试脚本是测试用例的核心负责执行实际的性能测试和负载生成。步骤4创建QoS配置脚本QoS配置脚本用于设置和清理资源隔离策略。创建benchmark/disk/disk_co-deployment_config.sh#!/bin/bash disk_co_deployment_config() { local log_file$1 local online_container$2 local offline_container$3 log_info 配置磁盘QoS资源隔离 $log_file # 为在线业务设置高优先级磁盘QoS docker exec $online_container \ echo high /sys/fs/cgroup/blkio/blkio.qos_level # 为离线业务设置低优先级磁盘QoS docker exec $offline_container \ echo low /sys/fs/cgroup/blkio/blkio.qos_level log_info 磁盘QoS配置完成 $log_file } disk_co_deployment_unconfig() { local log_file$1 local online_container$2 local offline_container$3 log_info 清理磁盘QoS配置 $log_file # 恢复默认QoS设置 docker exec $online_container \ echo normal /sys/fs/cgroup/blkio/blkio.qos_level docker exec $offline_container \ echo normal /sys/fs/cgroup/blkio/blkio.qos_level log_info 磁盘QoS清理完成 $log_file }步骤5集成到主测试框架最后需要在主入口脚本start.sh中添加对新测试类型的支持。找到测试类型处理部分添加您的DISK测试# 在start.sh中找到测试类型处理逻辑 case $TEST_TYPE in CPU) test_cpu ;; MEM) test_mem ;; NET) test_net ;; IO) test_io ;; DISK) # 添加新的测试类型 test_disk ;; ALL) test_cpu test_mem test_net test_io # test_disk # 如果需要也可以添加到ALL中 ;; *) log_error 未知测试类型: $TEST_TYPE exit 1 ;; esac然后添加对应的测试函数test_disk() { log_info 开始磁盘QoS混部测试 # 加载磁盘测试配置 source_config disk # 执行初始化 run_init disk disk_init # 执行基准测试无QoS run_benchmark disk disk_run direct # 配置QoS run_co_deployment_config disk disk_co_deployment_config # 执行基准测试有QoS run_benchmark disk disk_run qos # 清理QoS配置 run_co_deployment_unconfig disk disk_co_deployment_unconfig # 清理环境 run_clean disk disk_clean log_info 磁盘QoS混部测试完成 }最佳实践与技巧1. 使用公共函数库充分利用common/common.sh中的日志函数确保测试输出格式统一source $PROJECT_ROOT/common/common.sh log_info 测试开始 $log_file log_warn 注意测试将持续5分钟 $log_file log_error 测试失败 $log_file2. 合理的错误处理在脚本中添加适当的错误检查# 检查容器是否存在 if ! docker ps | grep -q $container_name; then log_error 容器 $container_name 不存在 $log_file return 1 fi # 检查命令执行结果 if ! docker exec $container_name command_to_run; then log_error 命令执行失败 $log_file return 1 fi3. 测试结果处理遵循项目的结果处理规范将结果输出到正确的目录# 结果文件路径 result_file${OUTPUT_DIR}/disk/$(date %Y%m%d_%H%M%S)_result.txt # 提取关键指标 throughput$(extract_metric $result_file throughput) latency$(extract_metric $result_file latency) # 计算干扰率 interference_rate$(calculate_interference $baseline $co_deploy)4. 性能监控集成考虑在测试过程中集成性能监控# 启动性能监控 start_monitoring() { local log_file$1 local container$2 local metric$3 log_info 开始监控 $metric $log_file docker exec -d $container \ collectd -f -C /etc/collectd.conf } # 收集监控数据 collect_metrics() { local log_file$1 local result_file$2 log_info 收集性能指标 $log_file # 从监控工具提取数据并保存到结果文件 }调试与验证1. 单元测试为您的测试用例创建简单的验证脚本#!/bin/bash # test_disk_validation.sh echo 验证磁盘测试配置... if [ -f config/disk.conf ]; then echo ✓ 配置文件存在 else echo ✗ 配置文件缺失 fi echo 验证初始化脚本... if [ -f init/disk/disk_init.sh ]; then echo ✓ 初始化脚本存在 else echo ✗ 初始化脚本缺失 fi echo 验证基准测试脚本... if [ -f benchmark/disk/disk_run.sh ]; then echo ✓ 基准测试脚本存在 else echo ✗ 基准测试脚本缺失 fi2. 逐步执行使用-t参数单独测试您的自定义测试用例# 仅执行磁盘测试 sh start.sh -t DISK # 部署并执行磁盘测试 sh start.sh -d -t DISK3. 日志分析检查生成的日志文件确保测试按预期执行# 查看最新的磁盘测试日志 tail -f log/disk/$(ls -t log/disk/ | head -1)常见问题与解决方案问题1测试用例无法识别症状运行sh start.sh -t DISK时提示未知测试类型解决方案检查start.sh中是否正确定义了DISK测试类型确保测试函数test_disk已正确实现验证测试类型名称大小写是否匹配问题2配置文件加载失败症状测试运行时提示配置参数未定义解决方案检查config/disk.conf文件是否存在且可读验证配置文件格式是否正确KEYVALUE无空格确保在测试函数中正确调用source_config disk问题3Docker命令执行失败症状Docker exec命令返回错误解决方案确认容器名称正确且容器正在运行检查容器内是否安装了必要的工具如fio验证容器用户权限是否足够问题4性能指标提取错误症状干扰率计算结果异常解决方案检查基准测试输出格式是否符合预期验证指标提取函数的正确性确保基线测试和混部测试使用相同的参数扩展测试框架添加新的资源类型如果您需要测试其他类型的资源隔离如GPU、NPU等可以遵循相同的模式创建config/gpu.conf配置文件在init/gpu/目录下创建初始化脚本在benchmark/gpu/目录下创建测试脚本在start.sh中添加GPU测试类型支持集成外部监控工具将Prometheus、Grafana等监控工具集成到测试框架中# 在测试开始时启动监控 start_prometheus() { docker run -d --name prometheus \ -p 9090:9090 \ -v ./prometheus.yml:/etc/prometheus/prometheus.yml \ prom/prometheus } # 在测试结束时收集数据 collect_prometheus_data() { curl -s http://localhost:9090/api/v1/query?queryyour_metric \ ${OUTPUT_DIR}/prometheus_data.json }总结通过本文的指南您已经掌握了在openEuler/QoS-Deployment-Test框架中编写自定义测试用例的完整流程。从创建配置文件到集成到主框架每个步骤都遵循了项目的设计原则和最佳实践。记住编写高质量测试用例的关键模块化设计保持每个脚本的单一职责错误处理添加适当的检查和恢复机制日志记录充分利用公共日志函数结果一致性确保输出格式符合框架规范可重复性测试结果应该可以稳定复现随着您对框架的深入了解您将能够创建更复杂、更贴近实际生产场景的测试用例为openEuler的QoS资源隔离能力验证提供更有价值的测试覆盖。现在就开始动手实践吧创建一个简单的测试用例验证您的新想法为openEuler社区贡献您的测试智慧【免费下载链接】QoS-Deployment-TestDocker-based openEuler Online-Offline Co-scheduling Test Suite.项目地址: https://gitcode.com/openeuler/QoS-Deployment-Test创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

故障复盘——让失败“变成财富“

故障复盘——让失败“变成财富“

故障复盘——让失败"变成财富" 你有没有过考试错题本? 生活场景:错题本的作用 没有错题本 你考试考砸了: 错了3道题 订正了 忘了为什么错 下次考类似的,还是错 没有复盘,错误会重复。 有错题本 你考试考砸了: 错题记到本子上 分析错误原因 总结解题方法 …

2026/7/6 0:35:25 阅读更多 →
Java Web上传文件到指定目录?这招秒传逻辑绝了,调试爽到飞起

Java Web上传文件到指定目录?这招秒传逻辑绝了,调试爽到飞起

借助监控工具, 能够看到控件所提交的数据, 清晰程度极高, 调试过程极为简便。2.通过ajax向后端发送请求$.ajax({ url : "${pageContext.request.contextPath}/UploadServlet", type : "POST", data : $( #postForm).serialize(), success : function(data)…

2026/7/6 0:33:25 阅读更多 →
COCO 2017 数据集实战:PyTorch DataLoader 构建与 80 类目标检测数据加载

COCO 2017 数据集实战:PyTorch DataLoader 构建与 80 类目标检测数据加载

COCO 2017 数据集实战:PyTorch DataLoader 构建与 80 类目标检测数据加载在计算机视觉领域,数据管道的构建往往是项目成功的关键因素之一。一个高效、灵活的数据加载系统不仅能加速模型训练过程,还能帮助开发者更好地理解和处理数据。本文将深…

2026/7/6 0:33:24 阅读更多 →

最新新闻

如何快速部署euler-copilot-vectorize-agent?5分钟入门教程

如何快速部署euler-copilot-vectorize-agent?5分钟入门教程

如何快速部署euler-copilot-vectorize-agent?5分钟入门教程 【免费下载链接】euler-copilot-vectorize-agent A microservice for data vectorization. 项目地址: https://gitcode.com/openeuler/euler-copilot-vectorize-agent 前往项目官网免费下载&#x…

2026/7/6 1:33:36 阅读更多 →
QGC V5.0 gstreamer视频流在安卓端画面卡顿、冻结,硬件解码失败的问题解决方案

QGC V5.0 gstreamer视频流在安卓端画面卡顿、冻结,硬件解码失败的问题解决方案

主要原因1.低端设备CPU软件解码性能不足2.硬件解码着色器未嵌入,导致硬件解码失败回退软解3.gstreamer的gl上下文丢失导致画面冻结解决方法一、启用硬件解码我使用的gstreamer版本是1.26.2,直接更改findgstreamer中的版本似乎会报错。硬件解码器&#xf…

2026/7/6 1:33:36 阅读更多 →
2026最新2款AI编程工具平替之选深度实测

2026最新2款AI编程工具平替之选深度实测

上周花了整周时间,我把 5 款 AI 编程工具分别用在 5 个不同模块上——一个工具一个模块,看最终代码质量差异。我当时选的模块里就包含了Node.js Express的用户行程文件上传功能,测试过程里我全程用vibe coding的方式,只靠口述需求…

2026/7/6 1:31:36 阅读更多 →
Halcon 标定板像素当量标定:单图法 vs 多图法,3种场景精度对比实测

Halcon 标定板像素当量标定:单图法 vs 多图法,3种场景精度对比实测

Halcon 标定板像素当量标定:单图法 vs 多图法,3种场景精度对比实测在工业视觉测量领域,像素当量标定的精度直接影响着整个系统的测量准确性。面对产线节拍和精度的双重需求,工程师们常常需要在单图快速标定与多图高精度标定之间做…

2026/7/6 1:29:36 阅读更多 →
华为matepad pro运行jupyter

华为matepad pro运行jupyter

想着在平板上跑跑Python,也不做太大强度的,主要学学数据分析,找了一些技术帖,先尝试了aidlux,内置的aidcode界面不太喜欢,jupyterlab运行起来kernel一直提示disconnected,遂作罢,最后…

2026/7/6 1:29:36 阅读更多 →
WK2124 SPI扩展8串口实战:Linux驱动配置与双芯片中断共享方案

WK2124 SPI扩展8串口实战:Linux驱动配置与双芯片中断共享方案

WK2124 SPI扩展8串口实战:Linux驱动配置与双芯片中断共享方案 在嵌入式系统开发中,串口资源不足是工程师经常面临的挑战。主控芯片通常只提供有限的UART接口,而实际应用却需要连接多个外设——从GPS模块、RFID读卡器到工业传感器和调试终端。…

2026/7/6 1:27:36 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻