目录
第一章 项目技术背景介绍
1.1 项目背景
1.2 技术背景
1.3词汇解释
第二章 测试方案的设计
2.1 需求分析
第三章 测试工具的设计与实现
3.1 测试工具的设计
3.2 测试工具的实现
3.2.1 Linux服务器的远程控制
3.2.2 应用程序的启动与停止
3.2.3 测试时间的控制
3.2.4 本地命令的执行
3.2.5 远程文件的拷贝
3.2.6 测试结果写入Excel
3.2.7 多个测试用例的执行
第四章 测试工具的使用
4.1 用例脚本的编写
第五章 使用总结
5.1 常见问题
5.1.1 常见问题1
第六章 尚需解决的问题
第七章 附录
7.1 作者介绍及联系方式
7.2 参考资料
7.3 源代码
略。
测试环境为RedHat Enterprise Linux ,测试数据的采集使用Linux自带的工具top、tcpdump、tethereal。自动化测试工具的开发使用Linux自带的Perl,版本为v5.8.5 built for for i386-linux-thread-multi。
Perl(Practical Extraction and Report Language)一般被称为“实用报表提取语言”。
Perl 最初的设计者为Larry Wall,它于1987年12月18日发表。Perl借取了C、sed、awk、shell scripting以及很多其他程序语言的特性。“懒惰”的Larry为了找到一个更好的解决问题的方法,从而发明了这个强大的语言。
Perl的解释程序是开放源码的免费软件。Perl的可移植性强。如果对脚本语言感兴趣的话,你会发现,Perl,很好,很强大。
更多关于Perl的内容可以在www.perl.org上找到。
词汇名称 |
词汇含义 |
备注 |
|
||
crontab |
Linux任务计划工具 |
|
Expect |
以脚本形式实现交互式应用程序的语言 |
|
Scp |
Linux拷贝远程文件的工具 |
|
用例脚本 |
按照一定的关键字、格式,将测试用例(前提条件、输入、执行步骤)写成脚本形式,供测试工具解析并执行 |
使用这种方法的优点是可以扩展用例 |
通过分析测试用例,根据用例重要程度、执行频度、是否可以自动化,总结出以下可以使用测试工具来实现自动化测试的功能点:
l 根据用例的前提条件,修改应用程序的相关配置
l 启动(停止)应用程序
l 收集应用程序的各项性能指标,如:CPU、内存、带宽、消息传输延时等
l 控制测试时间
l 分析各项性能指标,写入Excel,画出折线图
l 备份系统日志及测试结果数据
为使测试过程简化,并方便以后的回归测试,开发的自动化测试工具,应该具有以下功能:
l 可以控制N(N>10)台Linux服务器,可以执行命令或脚本、拷贝文件等;
l 可以获取系统性能指标,如:CPU、内存、带宽等;
l 可以将系统性能指标分析并写入Excel,方便画出折线图;
l 可以扩展测试用例。
如图3.1-1所示,测试工具的工作流程分为3个部分:
l 读取用例:此处的“用例”是提前按照一定的格式设计好的,就是把我们设计的测试用例再翻译成一种可以让用例解析工具“看”的懂、可以帮你自动执行的脚本,详细信息请参考4.1 测试用例的编写。
l 执行用例:执行用例中的内容,需要之前设计好的用例是完全正确的。
l 生成测试结果:将用例中涉及到的测试数据结果保存,并对测试结果分析、整理
图3.1-1 测试工具设计
从上图中可以看出,用例执行是测试工具的重要部分,如何在多台Linux服务器上执行测试用例是测试工具的核心部分。经过分析,欲实现远程控制Linux服务器,并且执行特定的命令,有以下3种方案:
l 使用Cronjob: 在 Linux 中,任务可以被配置在指定的时间段、指定的日期、或系统平均载量低于指定的数量时自动运行。可使用自动化的任务来执行定期备份、监控系统、运行定制脚本等等。使用Linux crontab可以配置服务器的启动,缺点是任务执行的时间需要预先设置,不灵活。
l ssh 命令:使用ssh脚本在服务器上执行预期的命令。如以下脚本实现了在192.168.0.1这台服务器上执行“ls”命令:
#! /usr/bin/expect
spawn ssh [email protected] ls
expect “*password:”
send 123456/r
expect eof
exit
l C/S模式:在每个服务器上启动一个小的客户端程序,通过在Server端向客户端发送消息实现在服务器上的操作,比如:向192.168.0.1发送“ls”以执行命令。经测试,可以使用Linux自带的Perl(v5.8.0)实现,缺点是需要在多台服务器上运行客户端,自动化程度不能满足要求,另外通过perl的Socket包控制多个客户端,工作量比较大,短时间内不易完成。
第二种方案简单易与实现,最终选择第二种方案。这一部分是整个任务的难点,直接影响到后续的功能是否可以实现。
通过学习Expect的用法,使用expect语句实现在远程机器上执行命令的功能,如:
expect –c “spawn ssh $remote_user@$remote_ip $remote_cmd;
expect “*password:”;
send $remote_password/r;
expect eof;”
以下是实现远程控制 Linux服务器的子函数:
图3.2-1 控制远程Linux服务器
用例脚本中用“start”、“stop”作为关键字来区分对应用程序的操作。
l 应用程序的启动:在远程服务器上执行命令以启动应用程序,检查该进程是否存在,若存在,返回进程ID,并提示启动成功;若不存在,提示启动失败。
l 应用程序的停止:根据应用程序的进程ID,使用kill的方法,停止应用程序,检查该进程是否存在,若不存在,提示停止应用程序成功;若仍存在,提示失败。
不同的测试用例,测试的时间不一致,可以使用“sleep time”来实现控制测试时间。用例脚本中用“sleep”作为关键字来控制测试时间。
图3.2-2 测试时间的控制
用例脚本中用“local”作为关键字执行本地命令。使用Perl的system函数来调用本地命令,如执行“ls”命令,可以使用:
图3.2-3 本地命令的执行
远程文件的拷贝用Linux下的scp 命令来实现,如拷贝192.168.0.1上的/home/niwp/temp.log,可以使用如下命令:
图3.2-4 远程文件的拷贝
具体实现代码,请参考附录部分。
可以按照测试用例的步骤编写测试脚本进行测试了,在得到测试结果后对数据进行一下处理,把log中的数据输出到Excel中,这样可以直接出图表了。这个部分使用Perl的
Spreadsheet::WriteExcel模块来完成,Spreadsheet::WriteExcel的使用可以输入:
# perldoc Spreadsheet::WriteExcel
下面就举个简单的例子,创建一个Excel workbook,添加多个worksheet,并写入数据:
图3.2-5 Perl新建 Excel代码
执行后,可以得到名字为‘test.xls’的Excel文件,其内容如下:
图3.2-6 创建成功
在执行用例时,可以用测试用例的名称做为参数来使用此工具,每个用例执行完成后,都会创建与用例名称对应的文件夹,用来存放测试结果。如依次执行PA0001、PA0002两个用例:
l# ./Tester.pl PA0001 PA0002
l 启动应用程序
start username:password@host script
l 停止应用程序
stop username:password@host script
或 execute username:password@host “kill $(ps –ef | grep –v grep | grep xxx | awk ‘{print $2}’)“
l 测试时间控制
sleep time
l 测试日志备份
copy username:password@host log /destination
l 测试数据处理
local “./log2excel.pl”
以下是测试用例PA0001的测试脚本:
图4.1-1 用例脚本内容
expect的使用时,需注意timeout的设定问题。当执行一系列命令后,expect脚本会等待结束符“eof”的出现,如果一直没有出现,直到timeout时间已到,该进程会退出。
l 有密码验证登录和无密码验证登录没有考虑到,实际使用时可用两个函数来实现;
l 测试完成后数据处理的部分要根据实际的测试数据来完成其特定功能;
l 启动应用程序过程中,如果某一台服务器上的应用程序启动失败,会继续执行,需要根据实际情况修改,且对应用程序的配置正确性要求较高,配置错误,可能导致此次测试失败。