1、录制登录操作改描述性编程。
- 登录的用户名、密码在global表中给出。有2组:自己的学号/mercury,自己的学号/123456。将登录的本地对象库清空。
要求:
分别采用直接描述性编程和Description描述性编程实现2组数据登录测试,用reporter.reportevent报告实验结果
2、自动化录制登录操作。
- 把飞机订票系统的Login脚本封装到一个函数中,函数返回成功或者失败记录,并且这些记录要用reporter对象的reportevent方法报告到测试结果窗口,函数存放到BusinessFunctions函数库文件。
- 登录的用户名、密码在以你学号命名的excel文件中,有2组数据,每组3列:
UserName
PassWord
Result
自己的学号
mercury
自己的学号
123456
- 测试脚本中要根据调用Login函数的返回值将结果写回到global表中,如果返回值为真,将Result列值设置为登录成功,为假设置为登录失败。
- 在脚本中用DataTable的import和将测试数据导入到global表中,用export方法将测试结果数据导出到原excel文件中。
附加内容:
- 建立自动化测试框架。包括:test_script、test_libraries、 test_data、 test_object_repositories、test_result_log。
- 使用fso对象对日志文件操作。将账号和登录时间及登录结果写入日志文件。
1、录制登录操作改描述性编程。
正常录制登录操作之后进行对其改造,根据对象的属性和方法来操作对象。
看下图,就知道该对象的属性和值,其他各种对象同样操作,我们就可以对其进行描述来代替对象库。
SystemUtil.Run "E:\software\HP\Unified Functional Testing\samples\flight\app\flight4a.exe"
Dialog("Login").WinEdit("Agent Name:").Set "apple"
Dialog("Login").WinEdit("Password:").SetSecure "64609cb188999d31fce95fdce9d2837f01ab67c5"
Dialog("Login").WinButton("OK").Click
Window("Flight Reservation").Close
直接描述性编程
SystemUtil.Run "E:\software\HP\Unified Functional Testing\samples\flight\app\flight4a.exe"
Dialog("text:=Login").WinEdit("Attached text:=Agent Name:").Set DataTable("UserName", dtGlobalSheet)
Dialog("text:=Login").WinEdit("Attached text:=Password:").SetSecure DataTable("PassWord", dtGlobalSheet)
Dialog("text:=Login").WinButton("text:=OK").Click
If Dialog("text:=Login").Dialog("regexpwndtitle:=Flight Reservations").Exist(3) Then
Dialog("text:=Login").Dialog("regexpwndtitle:=Flight Reservations").WinButton("text:=确定").Click
End If
If Window("regexpwndtitle:=Flight Reservation").Exist(5) Then
Reporter.ReportEvent micPass,"登录","登录成功"
Window("regexpwndtitle:=Flight Reservation").Close
Else
Reporter.ReportEvent micFail,"登录","登陆失败"
End If
要知道怎么进行改造的,就是把每个对象的属性是什么,值是什么写上就OK了,这样当缺少某个对象时,就不用录制加入,可以直接描述对象的属性和值进行加入。
对其改造完成后,就需不在需要对象库了,
要在全局表中写好数据在运行。
Description描述性编程
这种方法的特点是,每个新对象都要用Descriptioni()来创建一下,然后对其进行设置属性来表示当前对象是什么,对其进行操作。
SystemUtil.Run "E:\software\HP\Unified Functional Testing\samples\flight\app\flight4a.exe"
set myDialog = Description.Create()
myDialog("text").value = "Login"
set myWinEditUserName = Description.Create()
myWinEditUserName("Attached text").value = "Agent Name:"
set myWinEditPwd = Description.Create()
myWinEditPwd("Attached text").value = "PassWord:"
set myWinEditButton = Description.Create()
myWinEditButton("text").value = "OK"
With Dialog(myDialog)
.WinEdit(myWinEditUserName).Set DataTable("UserName", dtGlobalSheet)
.WinEdit(myWinEditPwd).SetSecure DataTable("PassWord", dtGlobalSheet)
.WinEdit(myWinEditButton).Click
End With
If Dialog("text:=Login").Dialog("regexpwndtitle:=Flight Reservations").Exist(3) Then
Dialog("text:=Login").Dialog("regexpwndtitle:=Flight Reservations").WinButton("text:=确定").Click
End If
If Window("regexpwndtitle:=Flight Reservation").Exist(5) Then
Reporter.ReportEvent micPass,"登录","登录成功"
Window("regexpwndtitle:=Flight Reservation").Close
Else
Reporter.ReportEvent micFail,"登录","登陆失败"
End If
自动化录制登录操作
根据要求我们要把登录操作封装到一个函数中,通过调用登录函数,返回登录是成功还是失败的结果。
那么我们要知道怎么使用函数,要在函数库中进行函数的编写,最后使用的话,要关联对应的函数库,这样就可以使用我们编写的函数。
定义函数有Function 函数名(参数)这一种方法是有返回值的,还有Sub 函数名(参数)这个是没有返回值的。根据具体情况选择。
第一步、新建函数库,关联函数库
然后在函数库中编写登录代码等等函数,调用是要关联后才能调用的。
Function Login(UserName,PassWord)
SystemUtil.Run "E:\software\HP\Unified Functional Testing\samples\flight\app\flight4a.exe"
Dialog("text:=Login").WinEdit("Attached text:=Agent Name:").Set UserName
Dialog("text:=Login").WinEdit("Attached text:=Password:").SetSecure PassWord
Dialog("text:=Login").WinButton("text:=OK").Click
If Dialog("text:=Login").Dialog("regexpwndtitle:=Flight Reservations").Exist(3) Then
Dialog("text:=Login").Dialog("regexpwndtitle:=Flight Reservations").WinButton("text:=确定").Click
End If
If Window("regexpwndtitle:=Flight Reservation").Exist(5) Then
Reporter.ReportEvent micPass,"登录","登录成功"
Login = True
Window("regexpwndtitle:=Flight Reservation").Close
Else
Reporter.ReportEvent micFail,"登录","登陆失败"
Login = False
End If
End Function
第二步、编写输出结果赋值函数
因为我们在登录之后要把结果写回Excel表中,那么我们还需要在写一个函数用来把结果输出到Excel表格中,当然代码量不用函数调用直接写也是OK的。
Sub OutPut(result)
If result Then
datatable.Value("Result",global) = "True"
Else
datatable.Value("Result",global) = "False"
End If
End Sub
第三步、编写日志函数保存测试结果
最后要用FSO对象来对日志进行操作,将账号和登录时间及结果写入日志中,那么再写一个函数。
我们需要知道怎么写入日志,方法是什么
创建文件对象:Set fso=CreateObject("Scripting.FileSystemObject")
文件对象是否存在:fso.FileExists(文件路径)
打开文件:Set myfile=fso.OpenTextFile(……,8,True),当文件不存在时会自动创建,8表示追加写入模式。
写完日志之后,不要忘记关闭文件及把对象设置为Nothing
Sub testResultLog (Judge,Uname)
Dim FSO,LogFile
Set FSO = CreateObject("Scripting.FileSystemObject")
Set myLogFile = FSO.OpenTextFile("E:\software\HP\testfile.txt", 8, True) '创建文件
myLogFile.WriteLine "Account: " & Uname ' 写入内容
myLogFile.WriteLine "Login time: " & Now()
If Judge Then ' 判断写入的是成功还是失败
myLogFile.WriteLine "Login result: Success"
Else
myLogFile.WriteLine "Login result: Failed"
End If
myLogFile.Close ' 关闭文件
Set myLogFile = Nothing '最后要设置为Nothing
Set FSO = Nothing
End Sub
第四步、编写主调用内容
最后在Action中写获取Excel中的数据,在进行调用函数库中的登录函数进行登录,要先判断一下数据中是否有数据,没有就从外部Excel中导入,之后获取Excel中设置好的账号和密码,调用Login函数进行登录,然后调用输出函数将结果写到数据表l中,在调用输出日志函数,传入账号和登录结果,即可写入日志。最后导出数据到Excel表格中。
Dim rowcount
rowcount = datatable.GetRowCount
If rowcount=0 Then
datatable.Import "E:\software\HP\软件测试.xlsx"
End If
Dim Uname,Pwd
Uname = datatable.Value("UserName",global)
Pwd = datatable.Value("PassWord",global)
Dim success
success = Login(Uname,Pwd)
Output(success)
testResultLog success,Uname
datatable.Export "E:\software\HP\软件测试.xlsx"
日志结果如下图所示
导出结果如图