做电影网站放抢先版,wordpress it,网站设计费报价表,外贸网站建设通过胶水语言实现工作中测试流程并行、加速 通过胶水语言实现工作中测试流程并行、加速工作场景#xff08;背景#xff09;问题抽象#xff08;挑战#xff09;如何做#xff08;行动#xff09;获得了什么#xff08;结果#xff09;后记相关资源 通过胶水语言实现工… 通过胶水语言实现工作中测试流程并行、加速 通过胶水语言实现工作中测试流程并行、加速工作场景背景问题抽象挑战如何做行动获得了什么结果后记相关资源 通过胶水语言实现工作中测试流程并行、加速 尽可能自动化是计算机思维之一。一切事务尽可能pipeline化然后再将pipeline中的环节尽可能自动化这样在我看来就是在实践计算机思维这种思维的养成是重要的。本篇文章是对近期工作中的一次有意思尝试的记录。
工作场景背景 近期遇到一个问题是工作中有一测试环节测试周期为18个小时且该测试动作频率较高。因此如果能够缩短测试周期就能够更快的得到反馈和结论为下一步动作提供数据支撑。
问题抽象挑战 正如优雅从系统环境到依赖包的管理文章中提到由于docker的便利性开发、部署以及测试都转向了docker。此次所涉及到的测试环节对应内涵日常工作中docker的常用知识中的双多docker使用场景。 可以用下图来展示服务程序和测试程序的关系
如何做行动 思想是简单的伪代码如下
将测试服务启动n个实例测试主调也启动n个实例测试数据也划分为n份上述操作通过胶水语言shell脚本借助tmux窗口工具实现 基于伪代码的设计框图如下 基于设计图开发的对应的脚本代码分为测试服务端和测试主调端
# 该脚本功能为启动多个测试服务
container_name_basesub-service
network_nametest-network
image_namexxx # 这里要根据实际来填写
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} --ipchost \-v /models:/models \-v /data:/data \-v /code:/code \${image_name} C-m
done# 该脚本功能为启动多个测试主调服务
sub_service_name_basesub-service # 这个要和上一个脚本中的名字对应起来
call_service_name_basecall-service
network_nametest-network # 这个要和上一个脚本中的名字对应起来
image_nameyyy # 填写对应的镜像名称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/89541034https://download.csdn.net/download/u011345885/89541139