背景:
本次testage.net沙龙主题:Perl快速搭建自动化性能测试框架整体解决方案-Linux(2008-12-21)
主讲嘉宾:刘林
嘉宾介绍:北京慧灵科技有限公司技术经理
软件事业部资深测试经理,从事过java、Perl等开发,对网络通信、数据库、Linux平台测试工作多年,熟练使用多种软件测试工具WinRunner、LoadRunner、QTP,积累丰富行业经验和项目质量控制经验。具有丰富的软件测试设计、自动化测试、测试团队管理、软件测试培训经验。
声明:以下例子归刘林所有@ : )
***********************************************************************
#本次用perl做自动化测试用到的模块,O(∩_∩)O哈哈~,我的小perl,
#怪不得第一眼看到你,就喜欢上你了,我押宝总是这么准....
use IO::Socket;
use threads;
use threads::shared;
use Time:HiRes qw(gettimeofday tv_interval); #时间戳
***********************************************************************
#启用多线程代码
for (my $i=0;$i<$maxThread;$i++){
$threadHDLArry[$i]=threads->new(\&subThread,$i);
}
***********************************************************************
#取得每台测试执行机的socketHandle
push @sockethandle,CreatSktConn($_,$remote_port) foreach @IPS;
#send start to each IP
print $_"start\n" foreach @sockethandle;
*********************************************************************************************************************
$startTimeSec =Get CurrentTime(); #CurrentTime()是自己写的函数,需要时直接调用,这样代码简洁整齐,忌讳把所有功能都一下子写在一堆。
$endTimeSec =Get CurrentTime();
*********************************************************************************************************************
每一条服务器状态监控CPU,内存,硬盘空间等信息,每3秒一个统计时刻,记录结果写入**.log
while(1){
$currentTime =Get currentTime();
@ProCpuMemRatio =Get ProCpuMenRatio($PEOCNAME);
@AllCpuMemRatio =Get AllCpuMenRatio();
$DiskMSG= Get DiskMSG();
if (0 == @ProcCpuMemRatio){
$msg = sprintf("The process is not in the memory: %-20s%-13s%-13s%-12s%-11s\n",$currnetTime,$AllCpuMemRatio,$DiskMSG);
} else {
$msg = sprintf("The process is running: %-20s%-13s%-13s%-12s%-11s\n",$currnetTime,$AllCpuMemRatio,$DiskMSG);
}
*************************************************************
#数据驱动的例子
#送文件config.dat去要发要送的数据,格式样式:
#initID=1000
#endID=9999
#initSEQ=1
#endSEQ=10
#remote_host=192.168.78.128
#remote_port=3086
#以上为已知内容,以下为程序执行
sub GetDiveData{
open (FILEHANDLE,file) or die "$!";
my @msg = <FILEHANDLE>;
chomp(@msg);
$initID =$1 if $msg[0]=~/initID=(\d+)/;
$endID =$1 if $msg[1]=~/endID=(\d+)/;
$initSEQ =$1 if $msg[2]=~/initSEQ=(\d+)/;
$endSEQ =$1 if $msg[3]=~/endSEQ=(\d+)/;
$remote_host =$1 if $msg[4]=~/remote_host=(\.+)/;
$remote_port =$1 if $msg[5]=~/remote_port=(\d+)/;
$fileID =$initID;
close FILEHANDLE;
}
*********************************************************************************
系统架构图如下:
*****************************************************************************************
perl_韬 11:07:29
贴一下昨天的perl测试交流会的概要(有一些细节需要补充)
一、报告内容
1.性能测试概述
2.perl概述
3.框架编写
4.脚本编写
5.测试过程编写
二、性能测试:CPU、Memory性能测试 负载测试
三、Perl概述:
1.perl模拟多用户
2.控制并发操作
3.控制多台客户端(服务器)对一台服务器
4.监控服务器
四、测试框架部分
1.测试计划
2.项目软件分析
3.测试用例
4.代码编写
(一)测试计划
1.根据项目的需求进行分析,每一个单节点交互信息在设计时都要覆盖
2.对于每一个服务器,都要有单点监控测试用例,以监控服务器的状态(CPU, Memory)
3.多组数据的传送以及日志记录,包括发送端以及接收端记录
4.统计信息汇报,关键信息的输出,测试结果分析
(二)测试脚本编写
1.测试脚本模块划分
2.与服务器的交互接口
3.服务器之间的数据输入方式
(三)如何模拟多用户
测试脚本:在每个脚本中,启用多线程,模拟多用户发送数据
(四)模拟多用户并发操作
1.执行测试脚本
1)初始化数据
2)Socket连接
2.发送'start'至客户端,启动
3.执行脚本
1)初始化
2)阻塞直到'start'收到
3)执行脚本。
************************************************************************************************
1. 笔记就记下了这些,嘿嘿!perl 可以作自动化测试,为了perl更强大,我会对c好一点的!
2.笔记的补充和完善感谢 韬同学 的大力支持,大半夜还在那里抗议,你够威风的哈 :)