以后不在此处更新日志了,欢迎测友到新窝找我:http://www.wuchuanhu.cn/

使用AutoIT测试系统登录实例二(脚本参数化)

上一篇 / 下一篇  2012-02-07 14:30:29 / 个人分类:AutoIT实战

在上一篇中写了一个web系统登录的测试脚本,此篇将对改脚本做一些优化。
QTP中,参数化是一个非常强大的功能,在AutoIT中同样也是可以通过编程参数化的。在使用QTP实现自动化测试的时候,我们通常会使用Excel来保存测试数据,脚本会从Excel中读取测试数据来进行数据驱动测试。下面将在AutoIT实现此脚本的参数化,以达到数据驱动的目的。
#Include <IE.au3>
#Include<ScreenCapture.au3>
#Include<BaseOp.au3>
Global $hBmp
Global $test
Global $result
Global $isobj=False
Global $timer=0
Global $OIE
Global $testURL="http://192.168.85.36/web"

$sheet = Gettestsheet("C:\Documents and Settings\aslandhu\桌面\autoit3\用户信息.xlsx",1)
For $i=2 To 3 Step 1
Dim $Tester=$sheet.Cells($i,1).value
Dim $TesterPWD=$sheet.cells($i,2).value
LoginTest($Tester,$TesterPWD)
Next
CloseExcel()
 
Func LoginTest($Tester,$TesterPWD)
$OIE = _IECreate($testURL,0,1,1,0)
_IELoadWait($OIE)
Local $Login=_IELinkClickByText($OIE,"登录")
While Not $isobj
   If $timer>=3 Then
      WriteToFile("C:\Documents and Settings\aslandhu\桌面\autoit3\test.Log","找不到输入框")
      SetError("2")
   ExitLoop
   EndIf
   $timer+=1
   Local $Inputname = _IEGetObjByName($OIE,"txtPhoneNum")
   Local $Inputpassword = _IEGetObjByName($OIE,"txtPassword")
   If Not IsObj($Inputname)Or Not IsObj($Inputpassword) Then
   Sleep(2000)
   Else
   $isobj=True
   $Inputname.value=$Tester
   $Inputpassword.value=$TesterPWD
   EndIf
   WEnd
   $timer=0
   $isobj=False
Local $Inputcheck= _IEGetObjByName($OIE,"txtRadomPicCode")
If Not IsObj($Inputcheck) Then
$test= CaptureScreen("C:\Documents and Settings\aslandhu\桌面\autoit3","CheckCodeError")
$spans=_IETagNameGetCollection($OIE,"span")
if $spans(0).innertext==("用户"&$Tester) Then
   SetError("5")
Else
   SetError("4")
   EndIf
Else
$checkCode=InputBox("提示","请输入验证码:")
$Inputcheck.value=$checkCode
Local $btn= _IEGetObjByName($OIE,"btnSubmitLogin")
_IEAction($btn,"Click")
_IELoadWait($OIE)
Sleep(2000)
Local $Loginwrap = _IEGetObjById($OIE,"Loginwrap")
_IELoadWait($OIE)
If Not IsObj($Loginwrap) Then
   $spans=_IETagNameGetCollection($OIE,"span")
   if $spans(0).innertext==("用户"&$Tester) Then
     SetError("1")
  Else
     $test= CaptureScreen("C:\Documents and Settings\aslandhu\桌面\autoit3","LoginError")
     SetError("3")
   EndIf
Else
   SetError("3")
EndIf
EndIf
Switch @error
   Case 1
   $result="成功"
   Case 2
   $result="登录框上的按钮不见啦"
   Case 3
   $result="抱歉,登录失败"
   Case 4
   $result="登录时,验证码输入框不存在"
   Case 5
   $result="用户已经登录了"
   Case Else
   $result="未定义的错误"
EndSwitch
WriteToFile("C:\Documents and Settings\aslandhu\桌面\autoit3\test.Log","测试号码是:"&$Tester&"密码是:"&$TesterPWD&"结果为:"&$result)
$IsClose=_IEQuit($OIE)
If $IsClose<>1 Then
   $test= CaptureScreen("C:\Documents and Settings\aslandhu\桌面\autoit3","quitIEError")
   ProcessClose($OIE)
   EndIf
EndFunc
下面对脚本做一些说明:
(1)AutoIT内置的UDF中包含了强大的Excel操作函数,但我还是更倾向于使用COM。毕竟这个跟我们长期使用QTP的使用习惯有关。这个脚本中调用了两个简单的Excel操作函数。
Gettestsheet("C:\Documents and Settings\aslandhu\桌面\autoit3\用户信息.xlsx",1)
CloseExcel()
 
这两个函数的代码如下:
Func Gettestsheet($path,$sheetindex)
   ProcessClose("EXCEL.EXE")
   $oExcel = ObjCreate("Excel.Application")
   $oExcel.visible=0
   $workbook=$oExcel.WorkBooks.Open($path)
   $sheet=$workbook.Worksheets.Item($sheetindex)
   Return $sheet
EndFunc
Func   CloseExcel()
               $workbook.Save();
            $oExcel.Quit();
   ProcessClose("EXCEL.EXE");退出不了则强制杀死进程
EndFunc
 
(2)ProcessClose函数是一个非常有用的函数,可以杀死一些不能自动退出的进程。当IE因为某些原因无法退出的时候,可以使用它。
 
(3)整个脚本将登录部分封装成了LoginTest函数,与用例执行层分离。这样其实和QTP实现自动化测试的一些思想也是保持一致的。
 
  在自动化测试中,Excel是非常有用的数据存储文件。任何测试工具都不同形式的支持Excel的读写,同样,对于数据库也是如此。下一篇将介绍如何进一步改进此脚本,加入数据库的检查点。

TAG: aslandhu autoit Autoit web自动化测试 AutoIT

 

评分:0

我来说两句

Open Toolbar