AutoIT能实现
数据库检查,其实和VBS实现数据库检查是一样的,都是需要创建ADODB相关对象。前面提到的这个
web登录案例,当用户登录的时候会在数据库中记录一条登录
日志。下面就在脚本中实现数据库检查点。
在这里,数据库检查点最简单的做法就是在用户登陆前获取这个用户的所有登录日志记录数,登录之后,再获取一次这个用户的所有登录日志记录数,比较两次数值,最后一次获取到的记录数大于第一次的话则说明正常创建了数据库日志。
#Include <IE.au3>
#Include<ScreenCapture.au3>
#Include<BaseOp.au3>
#Include<GlobalPara.au3>
$sheet = Gettestsheet($TestCasePath,1)
For $i=2 To 2 Step 1
WriteToFile($LogPath,"开始
测试第"&$i-1&"条
测试用例")
Dim $Tester=$sheet.Cells($i,1).value
Dim $TesterPWD=$sheet.cells($i,2).value
LoginTest($Tester,$TesterPWD)
WriteToFile($LogPath,"第"&$i-1&"条测试用例执行完毕")
Next
CloseExcel()
Func LoginTest($Tester,$TesterPWD)
$Original=GetRecordCount("Select * from UserLoginLog where phonenumber="&$Tester)
$OIE = _IECreate($testURL,0,1,1,0)
_IELoadWait($OIE)
Local $Login=_IELinkClickByText($OIE,"登录")
While Not $isobj
If $timer>=3 Then
WriteToFile($LogPath,"找不到输入框")
$test= CaptureScreen($ImagePath,"LoginError"&$Tester)
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
$spans=_IETagNameGetCollection($OIE,"span")
if $spans(0).innertext==("用户"&$Tester) Then
SetError("5")
Else
$test= CaptureScreen($ImagePath,"CheckCodeError"&$Tester)
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($ImagePath,"LoginError"&$Tester)
SetError("3")
EndIf
Else
$test= CaptureScreen($ImagePath,"LoginError"&$Tester)
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
$new = GetRecordCount("Select * from UserLoginLog where phonenumber="&$Tester)
MsgBox(1,"原始数据库记录",$Original)
MsgBox(1,"现在数据库记录",$new)
If $new<=$Original Then
$result=$result&",没有记录数据库日志"
Else
$result=$result&",记录了数据库日志"
EndIf
WriteToFile($LogPath,"测试号码是:"&$Tester&"密码是:"&$TesterPWD&"结果为:"&$result)
$IsClose=_IEQuit($OIE)
If $IsClose<>1 Then
$test= CaptureScreen($ImagePath,"quitIEError"&$Tester)
ProcessClose($OIE)
EndIf
Return $result
EndFunc
执行这个脚本之后,会记录文本日志如下:
开始测试第1条测试用例
测试号码是:13200000001密码是:123456结果为:成功,记录了数据库日志
第1条测试用例执行完毕
开始测试第2条测试用例
找不到输入框
测试号码是:13200000002密码是:123456结果为:登录时,验证码输入框不存在,没有记录数据库日志
第2条测试用例执行完毕
以下对脚本做一些说明:
(1)对于数据库的访问示例如下:
Func GetRecordCount($sql)
$dbcnn = ObjCreate("ADODB.CONNECTION")
$Sqlserverstring= "DRIVER=SQL
Server;SERVER="&$SqlserverIP&";UID="&$UID&";PWD="&$PWD&";APP=Microsoft Office 2003;WSID=aslandhu;DATABASE="&$DataBaseName
$dbcnn.Open($Sqlserverstring)
$objrsa=ObjCreate("adodb.recordset")
$objrsa.open($sql,$dbcnn,3,3)
$DataNo = $objrsa.RecordCount
Return $DataNo
EndFunc
(2)这个脚本比前两次的脚本长度明显少了一些,头部的Global 变量不见了。这是因为所有的Global变量全部放到了GlobalPara.au3这个脚本中,这样便于维护。
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.8.1
Author: myName
Script. Function:
Template AutoIt script.
#ce ----------------------------------------------------------------------------
; Script. Start - Add your code below here
Global $hBmp
Global $test
Global $result
Global $isobj=False
Global $timer=0
Global $OIE
Global $testURL="http://192.168.85.36/web"
Global$LogPath=@ScriptDir&"\test.Log"
Global$ImagePath=@ScriptDir
Global$TestCasePath=@DesktopDir&"\autoit3\用户信息.xlsx"
Global $new
Global $Original