转载

如何进行高性能自动化测试

引言

本文主要介绍如何进行高性能自动化测试的环境搭建,重点介绍如何部署 Jenkins Server, Chef Server, Chef Client, NTP Server, NTP Client, Yum Server,NFS Server, NFS Client 和 SSH 免密码登录,从而帮助读者了解如何在项目里进行高性能自动化测试的环境部署。

回页首

自动化测试环境搭建

部署 Jenkins Server

Jenkins 是基于 Java 开发的一种 持续集成 工具,用于监控持续重复的工作,功能包括:持续的软件版本发布/测试项目和监控外部调用执行的工作。

以下操作将介绍在 Windows 上部署 Jenkins Server。

  1. 因为 Jenkins 是基于 Java 开发的,所以在安装 Jenkins Server 之前首先保证 Java 已被安装,并准确配置 Java 相关的环境变量:JAVA_HOME,Path,和 CLASSPATH。
  2. 由于 Ant 在测试脚本里会带来极大的方便,所以在执行 Jenkins 的 Job 里会用到 Ant 脚本,因此 Ant 也是必须安装的,同时也要准确配置 Ant 相关的环境变量 ANT_HOME 等。
  3. 最后就是部署 Jenkins Server 并使其正常运行了,安装 Java 和 Ant 步骤大家应该都比较清楚,所以在这里简单介绍下如何在 Windows 下部署 Jenkins Server。

1. 到 Jenkins 官方网址: http://Jenkins-ci.org/ 下载最新的 Jenkins 版本(jenkins.war)。

2. 运行 java -jar jenkins.war

部署 Chef Server 和 Chef Client

Chef 是一款基于 ruby 语言的配置管理软件,广泛应用于服务器运维中。Chef 对要配置的对象提供跨平台抽象,用户大部分时间只和这些抽象资源打交道,而不用关心其具体的实现。鉴于 Chef 的上述功能,我们使用 Chef 来部署大量测试环境。通过使用 Chef,我们达到了高效且自动化部署大量测试环境的目的,使得我们在工作中可以得到极大的便利。在部署过程中,我们使用 Linux 多线程方法,可以同时部署多台测试环境,并且描述了如何将一台全新的机器制作成 Chef Client 的便捷方法。在 developerWorks 上已经有如何在 Linux 上部署 Chef Server 和 Chef Client 的相关文章了,因此在此不做赘述,大家可以参考《Chef 的安装与使用》。

部署 NFS Server 和 NFS Client

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 Server 和 NTP Client

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 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 是否安装成功

如何进行高性能自动化测试

部署 SSH 免密码登录和 Report Server

在进行高性能自动化测试的过程中,复制/移动最终的测试结果到 Report Server 时会用到 scp,因为它比较安全。但如果每次都要在 script 里输入密码,就比较烦了。以下操作将介绍生成密匙对的步骤,从而完成 SSH 免密码登录的配置,方便测试结果被安全迅速的传送到 Report Server。

图 13. 生成 SSH 密钥

如何进行高性能自动化测试

图 14. 添加 SSH 公匙

如何进行高性能自动化测试

图 15. scp 文件时,不再需要密码

如何进行高性能自动化测试

回页首

如何在实际项目里进行高性能自动化测试

根据以上步骤,您就可以搭建一套可以实现高性能自动化测试的测试环境,下面介绍下如何在搭建的环境里进行高性能测试。

并行执行多个 Chef Client 上的测试

在第二部分介绍了如何部署 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 上并行的进行自动化测试,从而减少测试执行时间,缩短测试周期,提高测试效率,实现高性能自动化测试。

正文到此结束
Loading...