perl+shell+实现自动化测试(更新图片)
目录 ? 第一章 ? 项目技术背景介绍 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?源代码
|
词汇名称 |
词汇含义 |
备注 |
? | ? | ? |
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 user@192.168.0.1 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 包控制多个客户端,工作量比较大,短时间内不易完成。
第二种方案简单易与实现,最终选择第二种方案。这一部分是整个任务的难点,直接影响到后续的功能是否可以实现。
测试工具的实现
3.2.1 ?Linux 服务器的远程控制
通过学习 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 服务器
3.2.2 ? 应用程序的启动与停止
用例脚本中用“ start ”、“ stop ”作为关键字来区分对应用程序的操作。
l????????? 应用程序的启动:在远程服务器上执行命令以启动应用程序,检查该进程是否存在,若存在,返回进程 ID ,并提示启动成功;若不存在,提示启动失败。
l????????? 应用程序的停止:根据应用程序的进程 ID ,使用 kill 的方法,停止应用程序,检查该进程是否存在,若不存在,提示停止应用程序成功;若仍存在,提示失败。
3.2.3 ? 测试时间的控制
不同的测试用例,测试的时间不一致,可以使用“ sleep?time ”来实现控制测试时间。用例脚本中用“ sleep ”作为关键字来控制测试时间。
图 3.2-2? 测试时间的控制
3.2.4 ? 本地命令的执行
用例脚本中用“ local ”作为关键字执行本地命令。使用 Perl 的 system 函数来调用本地命令,如执行“ ls ”命令,可以使用:
图 3.2-3? 本地命令的执行
?
3.2.5 ? 远程文件的拷贝
远程文件的拷贝用 Linux 下的 scp? 命令来实现,如拷贝 192.168.0.1 上的 /home/niwp/temp.log ,可以使用如下命令:
图 3.2-4? 远程文件的拷贝
?
具体实现代码,请参考附录部分。
3.2.6 ? 测试结果写入 Excel
可以按照测试用例的步骤编写测试脚本进行测试了,在得到测试结果后对数据进行一下处理,把 log 中的数据输出到 Excel 中,这样可以直接出图表了。这个部分使用 Perl 的
Spreadsheet::WriteExcel 模块来完成, Spreadsheet::WriteExcel 的使用可以输入 :
?? # perldoc Spreadsheet::WriteExcel
下面就举个简单的例子,创建一个 Excel workbook ,添加多个 worksheet ,并写入数据:
图 3.2-5 Perl 新建 ?Excel 代码
?
?? 执行后,可以得到名字为‘ test.xls ’的 Excel 文件,其内容如下:
图 3.2-6? 创建成功
3.2.7 ? 多个测试用例的执行
在执行用例时,可以用测试用例的名称做为参数来使用此工具,每个用例执行完成后,都会创建与用例名称对应的文件夹,用来存放测试结果。如依次执行 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? 用例脚本内容
使用总结
常见问题
5.1.1 ? 常见问题 1
expect 的使用时,需注意 timeout 的设定问题。当执行一系列命令后, expect 脚本会等待结束符“ eof ”的出现,如果一直没有出现,直到 timeout 时间已到,该进程会退出。
尚需解决的问题
l????????? 有密码验证登录和无密码验证登录没有考虑到,实际使用时可用两个函数来实现;
l????????? 测试完成后数据处理的部分要根据实际的测试数据来完成其特定功能;
l????????? 启动应用程序过程中,如果某一台服务器上的应用程序启动失败,会继续执行,需要根据实际情况修改,且对应用程序的配置正确性要求较高,配置错误,可能导致此次测试失败。
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!