当前位置: 首页 > news >正文

快捷:通过胶水语言实现工作中测试流程并行、加速

通过胶水语言实现工作中测试流程并行、加速

  • 通过胶水语言实现工作中测试流程并行、加速
    • 工作场景(背景)
    • 问题抽象(挑战)
    • 如何做(行动)
    • 获得了什么(结果)
    • 后记
    • 相关资源

通过胶水语言实现工作中测试流程并行、加速

  尽可能自动化是计算机思维之一。一切事务尽可能pipeline化,然后再将pipeline中的环节尽可能自动化,这样在我看来就是在实践计算机思维,这种思维的养成是重要的。本篇文章是对近期工作中的一次有意思尝试的记录。

工作场景(背景)

  近期遇到一个问题是工作中有一测试环节,测试周期为18个小时,且该测试动作频率较高。因此如果能够缩短测试周期,就能够更快的得到反馈和结论,为下一步动作提供数据支撑。

问题抽象(挑战)

  正如优雅:从系统环境到依赖包的管理文章中提到,由于docker的便利性,开发、部署以及测试都转向了docker。此次所涉及到的测试环节,对应内涵:日常工作中docker的常用知识中的双(多)docker使用场景。
  可以用下图来展示服务程序和测试程序的关系:

如何做(行动)

  思想是简单的,伪代码如下:

  • 将测试服务启动n个实例,测试主调也启动n个实例,测试数据也划分为n份;
  • 上述操作通过胶水语言shell脚本借助tmux窗口工具实现;

  基于伪代码的设计框图如下:

  基于设计图,开发的对应的脚本代码,分为测试服务端和测试主调端:

# 该脚本功能为启动多个测试服务
container_name_base=sub-service
network_name=test-network
image_name=xxx  # 这里要根据实际来填写
gpu_ids=(0 1)  # 该测试服务需要gpu,每一个服务对应一块gpu
ports=(30006 30007)docker network create ${network_name}  # 建立一个局域网,为测试服务容器和测试主调容器使用for i in "${!gpu_ids[@]}";dogpu_id=${gpu_ids[i]}port=${ports[i]}container_name=${container_name_base}-${port}session_name=${container_name_base}-${port}tmux new-session -d -s "${session_name}"tmux send-keys -t "${session_name}" "docker run -ti --gpus al -p ${port}:${port} --name=${container_name} \-e PORT=${port} -e CUDA_VISIBLE_DEVICES=${gpu_id} --network=${network_name} --ipc=host \-v /models:/models \-v /data:/data \-v /code:/code \${image_name}" C-m
done
# 该脚本功能为启动多个测试主调服务
sub_service_name_base=sub-service # 这个要和上一个脚本中的名字对应起来
call_service_name_base=call-service
network_name=test-network  # 这个要和上一个脚本中的名字对应起来
image_name=yyy  # 填写对应的镜像名称test_data_root=/test_data  # 测试数据路径
dst_root=/dst  # 测试结果保存路径ports=(30006 30007)  # 这个要和上一个脚本中的port号对应起来total_num=$(ls -l "$src_root" | wc -l)
worker_num=${#ports[@]}
worker_size=$(((total_num + worker_num - 1) / worker_num))for i in "${!ports[@]}"; doport=${ports[i]}sub_service_name=${sub_service_name_base}-${port}session_name=${call_service_name_base}-${port}tmux new-session -d -s "${session_name}"start_id=$((i * batch_size))end_id=$(((i + 1) * batch_size))if [ "$end_id" -gt "$total_num" ]; thenend_id=$total_numfitmux send-keys -t "${session_name}" "docker run -ti \-v ${test_data_root}:/test_data \--network=${network_name} \--entrypoint=/bin/bash ${image_name} \-c 'python test.py --src /test_data --dst ${dst_root} \--start_idx ${start_id} --end_idx ${end_id}'" C-m
done

获得了什么(结果)

  获得n倍的测试加速比,例如在A10机器上(有16张gpu卡)将上述脚本中的worker_num设置为6,那么测试周期会从18h下降至3h。这样就可以实现当天编写代码,当天测试完毕,当天得到测试反馈。

后记

  最近的一个感悟是在软件或算法开发中,应该降低编码的比重,提升需求沟通、分析、设计、建模和测试的比重。这里的比重是指重要程度,而不应简单的理解为时间。例如对于测试,其重视程度应该被重视,但应尽可能的想办法缩短测试周期。

相关资源

文章图片绘制原始drawio文件:

  • https://download.csdn.net/download/u011345885/89541034
  • https://download.csdn.net/download/u011345885/89541139

相关文章:

快捷:通过胶水语言实现工作中测试流程并行、加速

通过胶水语言实现工作中测试流程并行、加速 通过胶水语言实现工作中测试流程并行、加速工作场景(背景)问题抽象(挑战)如何做(行动)获得了什么(结果)后记相关资源 通过胶水语言实现工…...

MySQL 和 PostgreSQL,我到底选择哪个?

MySQL 和 PostgreSQL 是两个广泛使用的关系型数据库管理系统(RDBMS)。它们都具有强大的功能和广泛的社区支持,但在某些方面存在一些差异。本文将详细比较 MySQL 和 PostgreSQL,包括它们的特点、性能、扩展性、安全性以及适用场景等…...

Java —— 内部类

Java内部类 1.什么是内部类? 将一个类A定义在另一个类B里面,里面的类A就称为内部类(InnerClass),类B则称为外部类(OuterClass)。 2.为什么需要内部类? 具体来说,当一…...

高职院校人工智能人才培养成果导向系统构建、实施要点与评量方法

一、引言 近年来,人工智能技术在全球范围内迅速发展,对各行各业产生了深远的影响。高职院校作为培养高技能人才的重要基地,肩负着培养人工智能领域专业人才的重任。为了适应社会对人工智能人才的需求,高职院校需要构建一套科学、…...

ffmpeg中的超时控制

在FFmpeg库中,很多函数没有直接的参数可以设置超时。 那么有哪些函数可以通过设置 AVFormatContext 的 interrupt_callback 来实现超时控制? avformat_open_input: 打开输入文件或流。这个函数会阻塞,尤其是在网络流的情况下&…...

搜维尔科技:【研究】触觉技术将在5年内以8种方式改变人们的世界

触觉技术在过去几年中发展迅猛,大大提高了反馈的精确度和真实度。其应用产生了真正的影响,数百家公司和企业都集成了触觉技术来增强培训和研究模拟。 虽然触觉技术主要用于 B2B 层面,但触觉技术可能会彻底改变我们的生活,尤其是通…...

项目收获总结--MyBatis的知识收获

MyBatis的知识收获 一、概述二、获取自动生成的(主)键值三、将sql执行结果封装为目标返回对象的方式和原理四、延迟加载实现原理五、批量插入六、自带分页与分页插件原理七、Mapper(Dao)接口与XML映射文件关系八、模糊查询like语句九、#{}和${}的区别十、二级缓存案例实战 一、…...

数据库管理-第221期 Oracle的高可用-04(20240717)

数据库管理221期 2024-07-17 数据库管理-第221期 Oracle的高可用-04(20240717)1 ADG2 连接配置2.1 TNS2.2 JDBC2.3 JAVA连接池2.3.1 Oracle UCP2.3.2 应用连接池基础配置 总结 数据库管理-第221期 Oracle的高可用-04(20240717) 作…...

navicat15已连接忘记密码

1.导出链接 2.使用文本打开 connections.ncx UserName"root" PasswordXXXX 3.复制加密密码&#xff0c;在线解密 代码在线运行 - 在线工具 php解密代码 <?php class NavicatPassword {protected $version 0;protected $aesKey libcckeylibcckey;protected…...

企业管理必备:学会寻找客户绝佳方法。

无论是日常沟通、工作交流&#xff0c;还是社交娱乐&#xff0c;微信都扮演着重要的角色。而在微信的使用过程中&#xff0c;添加好友是一项基本而重要的操作&#xff0c;但是您真的会添加微信好友吗&#xff1f; 试试这个神器——微信管理系统&#xff0c;下面分享它快速加客…...

昇思25天学习打卡营第29天 | 文本解码原理--以MindNLP为例

今天是29天&#xff0c;学习了文本解码原理--以MindNLP为例。 MindNLP 是一个基于 MindSpore 的开源自然语言处理&#xff08;NLP&#xff09;库。它具有以下特点&#xff1a; 支持多种 NLP 任务&#xff1a;如语言模型、机器翻译、问答、情感分析、序列标记、摘要等&#xff…...

元服务体验-服务发现

服务发现&#xff0c;无论线上或线下的方式都可以发现元服务。 线上&#xff1a;基于用户意图。从精准意图的搜索、用户事件触发的推荐到主动探索等场景。用户可以在设备的负一屏、全局搜索、应用市场、桌面等场景发现元服务。 线下&#xff1a;用户在 HarmonyOS Connect标签…...

设计模式学习(二)工厂模式——抽象工厂模式+注册表

设计模式学习&#xff08;二&#xff09;工厂模式——抽象工厂模式注册表 前言使用简单工厂改进使用注册表改进参考文章 前言 在上一篇文章中我们提到了抽象工厂模式初版代码的一些缺点&#xff1a;①客户端违反开闭原则②提供方违反开闭原则。本文将针对这两点进行讨论 使用…...

同三维T80004解码器视频使用操作说明书:高清HDMI解码器,高清SDI解码器,4K超清HDMI解码器,双路4K超高清解码器

同三维T80004解码器视频使用操作说明书&#xff1a;高清HDMI解码器&#xff0c;高清SDI解码器&#xff0c;4K超清HDMI解码器&#xff0c;双路4K超高清解码器 同三维T80004解码器系列视频使用操作说明书&#xff1a;高清HDMI解码器&#xff0c;高清SDI解码器&#xff0c;4K超清H…...

Flutter应用开发:掌握StatefulWidget的实用技巧

前言 随着移动应用的日益复杂&#xff0c;状态管理成为了 Flutter 应用开发中的一项重要挑战。 状态&#xff0c;即应用中的可变数据&#xff0c;它驱动着用户界面的渲染和交互。 在 Flutter 这样的声明式 UI 框架中&#xff0c;如何高效、可维护地管理状态&#xff0c;对于…...

SCADA系统在哪些行业中取得了不斐的成绩!

随着技术的发展&#xff0c;SCADA系统已经历了多代的发展。从基于专用计算机和专用操作系统的第一代SCADA系统&#xff0c;到基于通用计算机和通用操作系统的第二代&#xff0c;再到按照开放原则基于分布式计算机网络以及关系数据库技术的第三代&#xff0c;以及现在基于更高技…...

layui 监听弹窗关闭并刷新父级table

记录&#xff1a;easyadmin 监听弹窗关闭并刷新父级table 场景一&#xff1a;在二级页面的table中点击编辑&#xff0c;保存后刷新二级页面的table edit: function () {ea.listen(function (data) {return data;}, function (res) {ea.msg.success(res.msg, function () {var …...

Webpack详解

Webpack Webpack 是一个现代 JavaScript 应用程序的静态模块打包器&#xff08;module bundler&#xff09;。它允许开发者将项目中的资源&#xff08;如 JavaScript、CSS、图片等&#xff09;视为模块&#xff0c;通过分析和处理这些模块之间的依赖关系&#xff0c;将它们打包…...

杰发科技AC7801 —— __attribute__指定地址存储常量

const uint8_t usFlashInitVal[] __attribute__((at(0x08002800))) {0x55,0x55,0x55,0x55,0x55};//定位在flash中&#xff0c;0x00030000开始的6个字节信息固定 注意7801的地址在8000000之后 如地址选0x00000800烧录时候报错 不知道是不是atclinktool的bug&#xff0c;使用_…...

docker pull 不下来 还是走代理好啊

docker国内镜像源配置及走代理设置_docker 镜像代理-CSDN博客 docker命令走代理 实际测试下来&#xff0c;就算我们修改成功了国内的镜像源&#xff0c;有时候由于国内镜像更新不及时&#xff0c;或者需要拉取的镜像比较冷门&#xff0c;只有域外镜像站才有&#xff0c;那么我…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)

UniApp 集成腾讯云 IM 富媒体消息全攻略&#xff08;地理位置/文件&#xff09; 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型&#xff0c;核心实现方式&#xff1a; 标准消息类型&#xff1a;直接使用 SDK 内置类型&#xff08;文件、图片等&#xff09;自…...

Visual Studio Code 扩展

Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后&#xff0c;命令 changeCase.commands 可预览转换效果 EmmyLua…...

sshd代码修改banner

sshd服务连接之后会收到字符串&#xff1a; SSH-2.0-OpenSSH_9.5 容易被hacker识别此服务为sshd服务。 是否可以通过修改此banner达到让人无法识别此服务的目的呢&#xff1f; 不能。因为这是写的SSH的协议中的。 也就是协议规定了banner必须这么写。 SSH- 开头&#xff0c…...

TJCTF 2025

还以为是天津的。这个比较容易&#xff0c;虽然绕了点弯&#xff0c;可还是把CP AK了&#xff0c;不过我会的别人也会&#xff0c;还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...

SpringCloud优势

目录 完善的微服务支持 高可用性和容错性 灵活的配置管理 强大的服务网关 分布式追踪能力 丰富的社区生态 易于与其他技术栈集成 完善的微服务支持 Spring Cloud 提供了一整套工具和组件来支持微服务架构的开发,包括服务注册与发现、负载均衡、断路器、配置管理等功能…...

零基础在实践中学习网络安全-皮卡丘靶场(第十一期-目录遍历模块)

经过前面几期的内容我们学习了很多网络安全的知识&#xff0c;而这期内容就涉及到了前面的第六期-RCE模块&#xff0c;第七期-File inclusion模块&#xff0c;第八期-Unsafe Filedownload模块。 什么是"遍历"呢&#xff1a;对学过一些开发语言的朋友来说应该知道&…...