需求:用户管理模块,创建多个组织,并在其组织下创建用户(组织以树形显示,要在组织树中点击这个组织,才能添加用户)。设计一个脚本,自动化测试(回归测试)(检查点等等的设置在此略,本次重点讲参数化)
分析需求:首先,从需求来看有两个功能点要测试,一是组织创建,第二用户创建。 并且两者之间有制约,要在组织下创建用户。
设计脚本:首先我们可以最先想到的是,录制两个脚本,一个是创建组织,一个是在已创建的组织下创建用户,分别在两个脚本中,对组织名、用户名参数化。。。
但根据以上所说的测试情况,不能完全实现自动化,仍需要手工来修改脚本。为什么要这样说呢:
1. 首先,录制一个创建组织的脚本,可以设置组织名称参数化;
2. 在创建用户的脚本中,我们要选择已创建的组织,再创建用户(这就是制约之处,组织是动态的;如果是静态的,就只能实现在一个组织下创建用户了。测试用例重复,无实际意义。);
3. 我们要在创建用户的脚本中,手工将已创建的组织添加到参数化表中。
这样的脚本从执行效率上来看,还不如手工来的快。
所以我设想用一个脚本来实现,这就有一个问题,组织的参数化,保存组织时参数化实现没问题,但要点击这个组织名称(即链接对象)的参数化对我这个新手来说不容易。
录制脚本如下:
Browser("欢迎您登录Xxxx").Page("欢迎您登录Xxxx").WebEdit("j_username").Set "admin"
Browser("欢迎您登录Xxxx").Page("欢迎您登录Xxxx").WebEdit("j_password").SetSecure "11"
Browser("欢迎您登录Xxxx").Page("欢迎您登录Xxxx").WebEdit("j_password").Submit
Browser("欢迎您登录Xxxx").Page("Xxxx 1.0").Frame("tree_2").Link("组织和用户管理").Click
Browser("欢迎您登录Xxxx").Page("Xxxx 1.0").Frame("frmRight_2").Link("子部门列表").Click
Browser("欢迎您登录Xxxx").Page("Xxxx 1.0").Frame("frmRight_3").WebButton("新建").Click
Browser("欢迎您登录Xxxx").Page("Xxxx 1.0").Frame("x_open_frame_3").WebEdit("group.name").Set "北京公司" //创建组织
Browser("欢迎您登录Xxxx").Page("Xxxx 1.0").Frame("x_open_frame_3").WebButton("保存").Click
Browser("欢迎您登录Xxxx").Page("Xxxx 1.0").Frame("frmLeft").Link("北京公司").Click //点击组织名
Browser("欢迎您登录Xxxx").Page("Xxxx 1.0").Frame("frmRight_4").WebButton("新建").Click
Browser("欢迎您登录Xxxx").Page("Xxxx 1.0").Frame("x_open_frame_4").WebEdit("user.loginname").Set "李四" //创建用户
Browser("欢迎您登录Xxxx").Page("Xxxx 1.0").Frame("x_open_frame_4").WebButton("保存").Click
Browser("欢迎您登录Xxxx").Page("Xxxx 1.0").Sync
Browser("欢迎您登录Xxxx").Close
从脚本来看,我们要把组织名称“北京公司”参数化,新建时没问题,但Link("北京公司")怎么参数化呢?在,网上找了资料,要用SetTOProperty来修改对象的值,但要用循环,创建用户部分的脚本如下:
Browser("欢迎您登录Xxxx").Page("欢迎您登录Xxxx").WebEdit("j_username").Set "admin"
Browser("欢迎您登录Xxxx").Page("欢迎您登录Xxxx").WebEdit("j_password").SetSecure "11"
Browser("欢迎您登录Xxxx").Page("欢迎您登录Xxxx").WebEdit("j_password").Submit
Browser("欢迎您登录Xxxx").Page("Xxxx 1.0").Frame("tree_2").Link("组织和用户管理").Click
Dim i,b
For i=1 To 2
Select Case i
Case 1 b="上海公司"
Case 2 b="天津公司"
End Select
Browser("欢迎您登录Xxxx").Page("Xxxx 1.0").Frame("frmLeft").Link("北京公司").SetTOProperty "Text",b
//添加此行,用SetTOProperty来修改Link内容的值,此处引用了变量b的值
Browser("欢迎您登录Xxxx").Page("Xxxx 1.0").Frame("frmLeft").Link("北京公司").Click
Next
Browser("欢迎您登录Xxxx").Page("Xxxx 1.0").Sync
Browser("欢迎您登录Xxxx").Close
虽然这样也可以实现向多个组织下创建用户,但组织名也是提前手工添加到脚本中去的,另外多个组织下创建多个用户时,循环也会有问题。
我打算不用循环了,我就观注SetTOProperty,我想我直接用它来引用组织名参数化表中的数据。经过多次试验,终于成功。
完整版脚本如下:
Browser("欢迎您登录Xxxx").Page("欢迎您登录Xxxx").WebEdit("j_username").Set "admin"
Browser("欢迎您登录Xxxx").Page("欢迎您登录Xxxx").WebEdit("j_password").SetSecure "48fe9e6c134bc16748107d69ac01"
Browser("欢迎您登录Xxxx").Page("欢迎您登录Xxxx").WebEdit("j_password").Submit
Browser("欢迎您登录Xxxx").Page("Xxxx 1.0").Frame("topFrame").WebTable("系统管理").Click
Browser("欢迎您登录Xxxx").Page("Xxxx 1.0").Frame("tree").Link("用户管理").Click
Browser("欢迎您登录Xxxx").Page("Xxxx 1.0").Frame("tree_2").Link("组织和用户管理").Click
Browser("欢迎您登录Xxxx").Page("Xxxx 1.0").Frame("frmRight_2").Link("子部门列表").Click
Browser("欢迎您登录Xxxx").Page("Xxxx 1.0").Frame("frmRight_3").WebButton("新建").Click
Browser("欢迎您登录Xxxx").Page("Xxxx 1.0").Frame("x_open_frame_3").WebEdit("group.name").Set DataTable("bumen", dtGlobalSheet) //对组织参数化,存在表“bumen”中
Browser("欢迎您登录Xxxx").Page("Xxxx 1.0").Frame("x_open_frame_3").WebButton("保存").Click
Browser("欢迎您登录Xxxx").Page("Xxxx 1.0").Frame("frmLeft").Link("北京公司").SetTOProperty "text",DataTable("bumen", dtGlobalSheet) //用SetTOProperty引用表“bumen”中的数据, "text"是对象中的属性,其后的内容是属性的值,现在我们把属性的值参数化了,也不用创建变量了。
Browser("欢迎您登录Xxxx").Page("Xxxx 1.0").Frame("frmLeft").Link("北京公司").Click
Browser("欢迎您登录Xxxx").Page("Xxxx 1.0").Frame("frmRight_4").WebButton("新建").Click
Browser("欢迎您登录Xxxx").Page("Xxxx 1.0").Frame("x_open_frame_4").WebEdit("user.loginname").Set DataTable("user", dtGlobalSheet)
//用户参数化
Browser("欢迎您登录Xxxx").Page("Xxxx 1.0").Frame("x_open_frame_4").WebButton("保存").Click
Browser("欢迎您登录Xxxx").Page("Xxxx 1.0").Sync
Browser("欢迎您登录Xxxx").Close
这样就可以实现,创建一个组织,并可在其下创建一个用户。实现了需求。在组织名称和用户名称的参数列表中添加多行数据,就可实现创建多个组织,并可分别在其下创建用户了。