文档章节

针对性能测试工具编写自动化shell脚本历程

 中标徐汇测试团队
发布于 2014/05/26 17:16
字数 1043
阅读 103
收藏 1

之前本人在公司进行Linux系统性能测试时,面对N款基准测试工具,6轮的重复测试,多个测试场景,较少测试时间,单薄测试人力(only me)时,人已经在崩溃的边缘了。雪上加霜的是,测试机只有一台,我就是想一个人并行测试也是可望而不可及的事情了,后来根据别人的提醒,尝试使用shell脚本处理,真的是解决了这个头疼的问题。

解决方案步骤如下:

  1. 编写单个工具的自动化脚本,自动运行测试工具,并且能够配置测试轮数

  2. 编写数据收集脚本,由于各个工具自动生成的测试数据存储在不同的路径下,为了我们方便采集数据,将其统一到一个文件夹下面

  3. 编写统一自动化运行脚本,将所有已编写好的脚本按顺序运行

下面就是我的脚本代码:

单个工具运行shell脚本(一共8款工具,我这里只贴出比较有特色的2段代码)

#!/bin/sh
#run_bonnie.sh

COUNT=$1

FILE=bonnie.results_$(date +"%Y%m%d%H%M")

while (( "$COUNT" > 0 ))
do
	./bonnie++-1.03a/bonnie++ -u root | tee -a ${FILE}.txt
	sleep 60
	let "COUNT--"
done
#!/bin/bash

COUNT=$1
IP=$2
TIME=60

#璺緞
cd netperf-2.4.5

message_TCPS=(4096 8192 32768)
socket_TCPS=(131072 57344 32768 8192)
FILE1=TCP_STREAM_$(date +"%Y%m%d%H%M")

for ((i = 0; i < 3 ; i = i + 1))
do
	for ((k = 0; k < 4 ; k = k + 1))
	do 
		for ((j = 0; j < $COUNT ; j =j +1))
		do
			printf "./netperf -H $IP -l $TIME -- -m ${message_TCPS[i]} -s ${socket_TCPS[k]} -S ${socket_TCPS[k]}\n" >> ${FILE1}.txt
			./src/netperf -H $IP -l $TIME -- -m ${message_TCPS[i]} -s ${socket_TCPS[i]} -S ${socket_TCPS[i]} | tee -a ${FILE1}.txt
		done
		printf "\n\n\n" >> ${FILE1}.txt
	done
done

message_UDPS=(64 1024 1472)
socket_UDPS=(32768)
FILE2=UDP_STREAM_$(date +"%Y%m%d%H%M")

for ((i = 0; i < 3 ; i = i + 1))
do
	for ((k = 0; k < 1 ; k = k + 1))
	do 
		for ((j = 0; j < $COUNT ; j =j +1))
		do
			printf "./netperf -H $IP -l $TIME -t UDP_STREAM-- -m ${message_UDPS[i]} -s ${socket_UDPS[k]} -S ${socket_UDPS[k]}\n" >> ${FILE2}.txt
			./src/netperf -H $IP -l $TIME -t UDP_STREAM -- -m ${message_UDPS[i]} -s ${socket_UDPS[i]} -S ${socket_UDPS[i]} | tee -a ${FILE2}.txt
		done
		printf "\n\n\n" >> ${FILE2}.txt
	done
done

rep_TCPRR=(1 64 100 128)
req_TCPRR=(1 64 200 8192)
socket_TCPRR=(0)
FILE3=TCP_RR_$(date +"%Y%m%d%H%M")

for ((i = 0; i < 3 ; i = i + 1))
do
	for ((k = 0; k < 1 ; k = k + 1))
	do 
		for ((j = 0; j < $COUNT ; j =j +1))
		do
			printf "./netperf -H $IP -l $TIME -t TCP_RR-- -r ${rep_TCPRR[i]},${req_TCPRR[i]}  -s ${socket_TCPRR[k]} -S ${socket_TCPRR[k]}\n" >> ${FILE3}.txt
			./src/netperf -H $IP -l $TIME -t TCP_RR -- -r ${rep_TCPRR[i]},${req_TCPRR[i]} -s ${socket_TCPRR[i]} -S ${socket_TCPRR[i]} | tee -a ${FILE3}.txt
		done
		printf "\n\n\n" >> ${FILE3}.txt
	done
done

cd /opt

自动收集数据代码

#!/bin/bash

mkdir result
mkdir ./result/netperf.results
mkdir ./result/netpipe.results
mkdir ./result/pingpong.results
mkdir ./result/lmbench.results

cp bonnie.results* ./result
cp dbench.results* ./result
cp netpipe.results* ./result/netpipe.results
cp ./netperf-2.4.5/TCP_RR* ./netperf-2.4.5/TCP_STREAM* ./netperf-2.4.5/UDP_STREAM* ./result/netperf.results

cp -r ./pingpong_results* ./result/pingpong.results
cp ./lmbench-3.0-a9/results/*summary.out ./result/lmbench.results
cp -r ./iozone3_326/iozone.results ./result
cp -r ./UnixBench/results ./result/unixbench.results

自动运行数据代码($1表示运行次数 $2表示服务器IP)

./run_lmbench.sh $1 
sleep 300

./run_netpipe.sh $1 $2
sleep 300

./run_netperf.sh $1 $2
sleep 300

./run_dbench.sh $1
sleep 300

./run_unixbench.sh $1
sleep 300

./run_pingpong.sh $1
sleep 300

./run_bonnie.sh $1
sleep 300

./run_iozone.sh $1
sleep 300

./run_result.sh

这里要说明下,由于测试工具中包含网络测试工具netpipe和netperf,所以在运行时,需要开启第二台电脑配合测试,当然测试脚本中需要第二台电脑的IP地址。运行时,只要在终端中输入./run.sh 次数 IP ,即可自动运行,不需要人为操作。

补充:由于netpipe工具在测试时,需要第二台电脑上开启一个./netserver服务,但是运行一遍后,该服务会自动中断,而我在性能测试需求时,是需要运行6遍方可采集平均值。那这时我们需要在第二台电脑编写一个监控脚本,当netserver服务断掉时,立马再次开启,代码如下:

#!/bin/sh
#netpipe_server.sh

flag=1
result=1
time=1 #每个多久监控一次

while [ "$flag" -eq 1 ]
do
	sleep $time
	result=`pidof NPtcp`
	if [ -z "$result" ]; then
		echo "process is restart,开启时间"$(date)
		./NetPIPE-3.7.1/NPtcp
		#flag= 0
	fi
done


ps:这段时间,我想抽空研究下如何针对庞大的测试数据整理进行自动化整理(半自动化也行吖)

© 著作权归作者所有

粉丝 0
博文 1
码字总数 1043
作品 0
徐汇
私信 提问
【北京】搜狐畅游招聘高级白盒、高级自动化、平台测试工程师

北京搜狐畅游招聘高级白盒、高级自动化、平台测试工程师 公司名称: 北京搜狐畅游 公司行业: 其他 公司性质: 外商独资.外企办事处 公司规模: 1000人以上 公司简介: 畅游公司(NASDAQ:CYOU)是中...

飞了
2012/02/07
350
1
【北京】阿里云急招爬虫和云搜索职位!!!【猎头】薪资范围15-25k

爬虫和云搜索一如既往的着急 职位名称: 高级配置管理工程师 部门名称: 阿里云- 搜索& 广告- 质量保障 层级要求: P6/7 工作地点: 北京/ 杭州 工作职责 1. 运用工具搭建和管理配置管理库,...

peter_0129
2011/09/14
2.5K
9
学习软件测试各阶段知识点汇总

第一阶段(软件测试理论及基础) Windows操作系统及网络基础:软件测试概念、计算机层次、软件分类、 互联网概述、 IP地址、虚拟机使用、操作系统安装 软件测试基础理论:软件开发阶段划分,软...

白一客
2017/06/01
101
0
移动平台自动化测试从零开始-MonkeyRunner工具使用 (第一节)

选自:http://yuedu.baidu.com/ebook/d4d8b6121eb91a37f0115c1d   Monkeyrunner是由Google开发、用于Android系统的自动化测试工具,由Android系统自带,存在于Android SDK中(SDK:Softwar...

fish_yy
2015/05/05
0
0
《精通移动app测试实战:技术、工具和案例》图书目录

图书相关链接: 京东网:http://item.jd.com/11891239.html 当当网:http://product.dangdang.com/23924601.html 亚马逊:https://www.amazon.cn/%E5%9B%BE%E4%B9%A6/dp/B01D10NSKE 互动网:......

fish_yy
2016/04/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Nervos CKB 脚本编程简介[1]:验证模型

CKB 脚本编程简介[1]: 验证模型 本文作者:Xuejie 原文链接:Introduction to CKB Script Programming 1: Validation Model 本文译者:Jason,Orange 译文链接:https://talk.nervos.org/t/c...

NervosCommunity
40分钟前
6
0
消息中间件——RabbitMQ的高级特性

前言 前面我们介绍了RabbitMQ的安装、各大消息中间件的对比、AMQP核心概念、管控台的使用、快速入门RabbitMQ。本章将介绍RabbitMQ的高级特性。分两篇(上/下)进行介绍。 消息如何保障100%的...

Java架构师ya七
今天
9
0
如何编写高质量的 JS 函数(1) -- 敲山震虎篇

本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/7lCK9cHmunvYlbm7Xi7JxQ 作者:杨昆 一千个读者,有一千个哈姆雷特。 此系列文章将会从函数的执行机制、鲁棒性、函...

vivo互联网技术
今天
7
0
学会这5个Excel技巧,让你拒绝加班

在网上,随处都可以看到Excel技巧,估计已看腻了吧?但下面5个Excel技巧会让你相见恨晚。关键的是它们个个还很实用 图一 技巧1:快速删除边框 有时当我们处理数据需要去掉边框,按Ctrl+Shif...

干货趣分享
今天
11
0
JS基础-该如何理解原型、原型链?

JS的原型、原型链一直是比较难理解的内容,不少初学者甚至有一定经验的老鸟都不一定能完全说清楚,更多的"很可能"是一知半解,而这部分内容又是JS的核心内容,想要技术进阶的话肯定不能对这个...

OBKoro1
今天
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部