本文主要介绍如何进行高性能自动化测试的环境搭建,重点介绍如何部署 Jenkins Server, Chef Server, Chef Client, NTP Server, NTP Client, Yum Server,NFS Server, NFS Client 和 SSH 免密码登录,从而帮助读者了解如何在项目里进行高性能自动化测试的环境部署。
回页首
Jenkins 是基于 Java 开发的一种 持续集成 工具,用于监控持续重复的工作,功能包括:持续的软件版本发布/测试项目和监控外部调用执行的工作。
以下操作将介绍在 Windows 上部署 Jenkins Server。
1. 到 Jenkins 官方网址: http://Jenkins-ci.org/ 下载最新的 Jenkins 版本(jenkins.war)。
2. 运行 java -jar jenkins.war
Chef 是一款基于 ruby 语言的配置管理软件,广泛应用于服务器运维中。Chef 对要配置的对象提供跨平台抽象,用户大部分时间只和这些抽象资源打交道,而不用关心其具体的实现。鉴于 Chef 的上述功能,我们使用 Chef 来部署大量测试环境。通过使用 Chef,我们达到了高效且自动化部署大量测试环境的目的,使得我们在工作中可以得到极大的便利。在部署过程中,我们使用 Linux 多线程方法,可以同时部署多台测试环境,并且描述了如何将一台全新的机器制作成 Chef Client 的便捷方法。在 developerWorks 上已经有如何在 Linux 上部署 Chef Server 和 Chef Client 的相关文章了,因此在此不做赘述,大家可以参考《Chef 的安装与使用》。
NFS(Network File System)即 网络文件系统 ,是 FreeBSD 支持的文件系统中的一种,它允许网络中的计算机之间通过 TCP/IP 网络共享资源。在 NFS 的应用中,本地 NFS 的客户端应用可以透明地读写位于远端 NFS 服务器上的文件,就像访问本地文件一样。这种资源的共享对高性能自动化测试环境中的每个测试节点来说都是至关重要的,测试结果的实时共享大大提高了测试效率。以下操作将介绍在 Linux 上部署 NFS Server 和 NFS Client,从而保证环境里所有 node 上的 share folder 可以共享,大大节省互传 report 的时间。
图 1. 确认 NFS service 相关的软件包是否已经安装
如果没有 NFS service 相关软件,首先用 # yum install nfs*命令进行安装相关软件包。
图 2. 查看 NFS service 状态
如果 2,3,4,5 处于 off, 就用 # chkconfig nfs on 命令将 NFS service 启动起来。
图 3. 配置共享目录
用 # vi /etc/exports 去配置要共享的目录,然后用 # service nfs restart 命令重启 NFS 服务,至此,NFS Server 已经配置完成。
图 4. 查看 NFS Server 共享目录
在 NFS Client 上用命令 #mount -t nfs 9.110.183.108:/home/share /home/share 进行和 NFS Server 之间的共享。在任意一个 NFS Client 上可以看到 NFS Server 的共享目录。
NTP(Network Time Protocol,网络时间协议)是用来使网络中的各个计算机时间同步的一种协议。它的用途是把计算机的时钟同步到世界协调时 UTC,它可以使计算机对其服务器或时钟源(如石英钟,GPS 等等)进行时间同步,提供高精准度的时间校正。以下操作将介绍在 Linux 上部署 NTP Server 和 NTP Client,从而保证所有 node 上的测试报告时间是同个时区的时间。
图 5. 用 #vi /etc/ntp.conf 打开文件,并配置 NTP Server
图 6. 开启 NTP 服务
图 7. 同步 NTP Server 和本地时间,使二者保持一致
搭建一套局域网的 YUM 安装源,对于搭建高性能的自动化测试环境来讲是很重要的事情, 因为如果 VM 不支持连接外网的话,安装很多软件都是很繁琐的事情。以下操作将介绍一个局域网的 YUM 安装源的部署,从而方便没有外网的 node 可以顺利的安装上必须的软件。
图 8. 搭建 Yum Server 的准备工作
图 9. Yum Server 的安装
图 10. 创建 Yum Server 的 repo
图 11. 用 #vi /etc/yum.repos.d/rhel-source.repo 打开文件,并配置 Yum Server
图 12. Check Yum Server 是否安装成功
在进行高性能自动化测试的过程中,复制/移动最终的测试结果到 Report Server 时会用到 scp,因为它比较安全。但如果每次都要在 script 里输入密码,就比较烦了。以下操作将介绍生成密匙对的步骤,从而完成 SSH 免密码登录的配置,方便测试结果被安全迅速的传送到 Report Server。
图 13. 生成 SSH 密钥
图 14. 添加 SSH 公匙
图 15. scp 文件时,不再需要密码
回页首
根据以上步骤,您就可以搭建一套可以实现高性能自动化测试的测试环境,下面介绍下如何在搭建的环境里进行高性能测试。
在第二部分介绍了如何部署 Chef Server 和 Chef Client,在此向读者介绍下如何在 Chef Server 上并行的执行多个 Chef Client 上的测试任务,通过在多个 node 上进行分布式的并发测试,从而减少测试时间,提高测试效率。
在此举例下如何并行的唤起多个 Chef Client 上的 testing,Shell 脚本如下:
<script> #Invoke all chef clients for QAF by multiple thread echo start: `date`; start=`date +%s`; #for function is used to invoke all Chef Clients to test for ((i=1;i<=${#ip[@]};i++)) do { #knife bootstrap command is used to start testing in the Chef Clients knife bootstrap ${ip[$i-1]} -x root --sudo -r "role[client_QAF]" }& Done #wait command is used to wait for all the testing finished in the Chef Clients wait echo end: `date`; end=`date +%s`; #time is used to analysis the testing time time=$[ end -start ]; </script> shell 脚本自动归集测试报告
由于测试是分布式的在多个 node 上进行的,所以测试完成后,需要将每个 Chef Client 上的测试报告归集到一起的,在这里就用到了第二部分所介绍的 NFS 自动收集所有 node 上的报告。
在此举例下如何收集多个 Chef Client 上的 testing report,Shell 脚本如下:
<script> #!/bin/bash range=$1 #initial report folder rm -rf /root/$range/workspace/com.spss.qa.automation/html/* rm -rf /root/$range/workspace/com.spss.qa.automation/test-reports/* #gather report if [ $range = "3.0" ] then cp -rf /root/share/test-reports/3.0/* /root/$range/workspace/com.spss.qa.automation/test-reports cp -rf /root/share/test-reports/2.0/* /root/$range/workspace/com.spss.qa.automation/test-reports else cp -rf /root/share/test-reports/$range/* /root/$range/workspace/com.spss.qa.automation/test-reports fi </script> 发布测试 report
所有的测试报告都被收集到 Report server 上后,用 Ant 脚本产生 Html report。Ant 脚本如下:
<script> <target name="report"> <junitreport todir="${basedir}/test-reports"> <fileset dir="${basedir}/test-reports"> <include name="TEST-*.xml" /> </fileset> <report format="frames" todir="${basedir}/html" /> </junitreport> </target> </script>
然后通过第二部分介绍的 SSH 免密码登录将产生的测试 report 发布到 Jenkins 上指定的路径上去,Shell 脚本如下:
<script> #pubilsh report to http://9.30.214.85:8080/testStage_$version mkdir -p /root/apache-tomcat-7.0.59/webapps/testStage_$version cp -rf /root/share/html/$range/* /root/apache-tomcat-7.0.59/webapps/testStage_$version cd /root/apache-tomcat-7.0.59/bin ./startup.sh #publish report to build server cd /root/workspace/testStage/share/html/$range/ scp -r * root@9.30.214.84:/$report_path </script> 发送测试结果邮件
测试进行完成后,Jenkins 会自动给组里人员发送测试报告邮件,读者可以按照以下在 Jenkins 里配置邮件收件人和邮件标题。
图 16.Jenkins 中配置邮件收件人和邮件标题
实际项目里收到的测试结果邮件如下:
图 17. 测试结果邮件展示
回页首
在此,简单列举下如何处理环境异常的情况:NFS Server 和 NFS Client 之间通信断掉。当节假日来临或者 IT 部门维修 VM 的时候,会遇到 VM 被关机的情况,人为将 VM 开机后,NFS Server 和 NFS Client 之间的通信也已经被断掉了。这时候,我们需要做 2 个步骤解决通信被断掉的问题:
(1)在 NFS Server 上执行命令 # service nfs restart 重新开启 NFS service。
(2)在 NFS Client 上执行命令 # mount -t nfs 9.110.183.108:/home/share /home/share 重新共享 NFS Server 和 NFS Client 的 folder。
回页首
本文探索了如何搭建高性能自动化测试环境, 您可以根据本文介绍的方法,搭建环境实现在多个 Chef Client 上并行的进行自动化测试,从而减少测试执行时间,缩短测试周期,提高测试效率,实现高性能自动化测试。