最近做自动化测试,组长交给我个任务,把自动化测试集成到Hudson中,每天定时运行,并将测试报告发送到指定邮箱。Hudson是安装在Linux环境上;测试脚本是用QTP+VBScript写的,并用MTM管理多个脚本。问题在于QTP只能在Windows环境下运行,需要从hudson远程控制测试主机,启动测试。
现在基本的解决方案是:在windows测试主机上安装cygwin,通过ssh实现hudson和测试主机的互联,在Hudson启动测试,远程登录windows测试主机,启动MTM和QTP,测试结束后,将测试结果传回hudson所在的linux主机,通过linux邮件程序将结果发送到指定邮箱。
首先需要安装cygwin,并启动ssh服务,我在网上找了一篇文章,说的非常详细清楚,这里就不再重复了。
http://www.ibm.com/developerworks/cn/aix/library/1006_lisali_sshlogon/index.html
两台主机之间的通信建立以后,就需要写启动脚本,首先在测试主机方面,需要用脚本来实现QTP和MTM的自动启动,并配置相应的加载项以及邮件、报告的设置。QTP和MTM都提供了自动化的相关接口,可参考帮助文档。这里将自己的vbs代码备份一下(test.vbs):
Option Explicit
'==================================================
'启动并配置QTP
'==================================================
Dim qtApp
Set qtApp=CreateObject("QuickTest.Application")
'====================================================
'启动并配置MTM
'====================================================
Dim mtmApp
Set mtmApp=CreateObject("MultiTestManager.Application")
Dim mtmRunSettings
Set mtmRunSettings = mtmApp.Preferences.RunSettings
'=======================================================
'发送邮件设置
'=======================================================
Dim mtmAccountSettings
Set mtmAccountSettings = mtmApp.Preferences.MailSettings.AccountSettings
'=======================================================
'报告设置(这里为了传输文件方便,每个覆盖原来的同名报告。由于在报告名中加了日期,所以每天有一份报告,若一天运行多次,只保留最后一次)
'=========================================================
Dim myDateStr
Dim mtmReportSettings
Set mtmReportSettings = mtmApp.Preferences.ReportSettings
mtmApp.Run
While(mtmApp.IsRunning)
Set mtmRunSettings = Nothing
Set mtmAccountSettings = Nothing
set mtmReportSettings = Nothing
在hudson服务器端,需要做的是远程登录测试主机,并启动test.vbs。脚本如下:
#!/bin/sh
#/home/aiuap
autoTest(){
ssh -tt $1 <<EOF
cd autoTest
cmd
call test.bat
exit
exit
EOF
}
autoTest admin@*.*.*.* &
wait
mydate=$(date +%Y%m%d)
myfile="admin@*.*.*.*:/cygdrive/d/TestingReport_"$mydate"_1.html"
scp
关于文件存放路径,这里有个问题需要注意,Linux系统文件名和路径名不能有空格,所有最好测试报告文件名和存放路径不要有空格。
权限问题
登录hudson,执行build,发现可以连接测试主机,并启动test.vbs脚本,但运行出错,提示没有权限创建QTP和MTM的对象并启动它们,原来远程用户还需要分配应用程序权限:
这种方法在Windows XP上是可以的,悲剧的是,分给我的测试主机是Windows 2003 Server版的,无法设置DCOM配置,对于Server系统,QTP要求网络版的license