VS2010测试功能之旅
——编码的UI测试系列之四:通过编写测试代码的方式建立UI测试(下)
RealZhao,2011年3月23日
回顾
最近比较忙,距离上次更新的时间较久,见谅。
在本章上部分,介绍了“添加用户”窗口的测试代码编写。想必大家也看到了,在UIMap.cs文件中实现自定义编码是一件很轻松的事情,接下来将介绍下个部分,查询用户窗体的测试代码的编写,以及他们测试的关联。
示例程序介绍
系统主窗口:(下载点我)
该系统拥有两个功能,“添加用户”和“查询用户”
点击添加用户后,进入添加用户子窗体:(“添加用户”窗口的测试代码编写在上部分已经实现)
如果在之前的主窗口,点击查询用户,则进入查询用户子窗体
注:系统默认自带了5个用户TestUser1, TestUser2, TestUser3, TestUser4, TestUser5
这个窗体不会弹任何提示框,默认进入窗体时,DataGridView里面没有加载数据,现在进行一个说明:
查询条件-用户名:表示是否按用户名查询(非模糊查询),如果不输入,默认为不按其查询
查询条件-用户类型:有三个选项“所有”,“管理员”,“一般用户”
查询条件-日期:表示是否按日期查询,如果勾上了日期CheckBox,则旁边的DateTimePicker会启用,然后选择一个具体的日期
按钮-查询:就会按以上条件查询
按钮-重置:用户名清空,用户类型变成所有,日期取消勾选
文本框-用户备注:当查询出数据以后,每选择DataGridView里面中的一行数据,用户备注TextBox会自动加载当前行的用户备注
如何设计测试
现在需要明确的就是,我们既需要检查“查询用户”窗口的基本功能,又需要确定之前在“添加用户”窗口添加的用户是否被添加了进来,所以这里的检查尤其重要,根据刚才的功能描述,现在需要编写测试设计。(在看下面的设计之前大家可以先试着自己设计下)
自动化测试,关键不在技术,而是在测试设计上,所以这里需要设计得比较全面
步骤序号 |
操作步骤 |
检查点 |
1 |
在主窗口菜单点击用户查询 |
检测查询用户子窗口是否弹出 |
2 |
用户名为空,用户类型为“所有”,不勾选时间,点击查询,记录查询出的用户行数,程序默认选中第一行,这时我们选中第二行 |
检测“用户备注”一列的值是否和下方的“用户备注”文本框的值一致 |
3 |
加的用户,其他条件不变,点击查询(例如,在上个部分的示例中,我们使用的是”TestUser6”) |
查询出用户名为TestUser6的一条数据 |
4 |
用户名为一个不存在的用户“testuser100”,其他条件不变,点击查询 |
未查询出数据 |
5 |
将用户名设置为空,其他条件不变,用户类型为“管理员”,记录查询出的行数 |
查询出所有为“管理员”的用户(注,为了方便,这里没有使用从数据库比对,而只使用查询条件与查询出的数据比对,实际项目中可能使用数据库比对) |
6 |
将用户类型设置为“一般用户”,其他条件不变,记录查询出的行数 |
查询出所有为“一般用户”的用户 |
7 |
使用刚才用户类型分别为“所有”,“管理员”,“一般用户”查询出的数据行数,进行比对 |
一般用户行数+管理员用户行数=所有用户行数 |
8 |
用户名为空,用户类型为“所有”,勾选时间,并进行选择“2008-1-11” |
查询出所有添加时间为“2008-1-11”的用户 |
9 |
将条件设置为刚才我们在添加用户窗口添加的用户信息(使用我们在上一个示例中使用的值,如”TestUser6”,”一般用户”,时间为添加时间,时间这个需要用到某个变量来记录) |
查询出对应的一条数据 |
10 |
点击重置按钮 |
用户名为空,用户类型为“所有”,不勾选时间 |
11 |
点击退出 |
退出窗口 |
接下来将以上的检查点转换为代码
对测试进行编码
我们可以接着上次录制的代码来编写,因为在上个部分对于某些编写方式(例如先捕获对象再编写和先录制再转移修改的方式)已经描述得很详细了,下面默认使用这些方式,因此就不一一阐述对象的捕捉过程了。这里只介绍上个部分没有介绍的注意点和和给出主要代码。
由于是接着上个部分的代码写,这里需要注释掉AddUserUIMap.cs中Step7_CloseWindows的两句代码,以免他在测试结束后将主窗口关闭掉:
1
public
void
Step7_CloseWindows()
2
{
3
//
操作步骤
4
bool
isClosed;
5
Mouse.Click(
this
.UI添加用户Window.UI取消Window.UI取消Button,
new
Point(
1
,
1
));
6
//
和WaitForControlExist相反,这里是最长等待他3秒关闭,如果3秒内关闭返回true,否则为false
7
isClosed
=
this
.UI添加用户Window.WaitForControlNotExist(
3000
);
8
//
这里添上了注释,以免将主窗口关闭掉
9
//
Mouse.Click(this.UI系统主窗口Window.UI系统主窗口TitleBar.UICloseButton, new Point(1, 1));
10
//
isClosed &= this.UI系统主窗口Window.WaitForControlNotExist(3000);
11
12
//
检查点
13
Assert.IsTrue(isClosed,
"
点击退出,检测是否退出添加用户子窗体和主窗体失败
"
);
14
}
接下来,我们通过在项目中添加新项的方式新建一个SearchUserUIMap.uitest,在这个UIMap的.cs中来编写我们对于“查询用户”这个窗口的操作
实现步骤1
步骤序号 |
操作步骤 |
检查点 |
1 |
在主窗口菜单点击用户查询 |
检测查询用户子窗口是否弹出 |
相信这个很简单,两下就可以通过录制然后修改的方式编写出来:
1
public
void
Step1_ClickSearchUser()
2
{
3
WinMenuItem uI查询用户MenuItem
=
this
.UI系统主窗口Window.UIMenuStrip1MenuBar.UI用户管理MenuItem.UI查询用户MenuItem;
4
//
操作步骤:Click '用户管理' -> '查询用户' menu item
5
Mouse.Click(uI查询用户MenuItem,
new
Point(
1
,
1
));
6
7
//
检查点:检查查询用户子窗口是否弹出
8
Assert.IsTrue(
this
.UI查询用户Window.WaitForControlExist(
6000
),
"
点击查询用户,检测查询用户子窗口弹出失败
"
);
9
}
实现步骤2
步骤序号 |
操作步骤 |
检查点 |
2 |
用户名为空,用户类型为“所有”,不勾选时间,点击查询,记录查询出的用户行数,程序默认选中第一行,这时我们选中第二行 |
检测“用户备注”一列的值是否和下方的“用户备注”文本框的值一致 |
这一步需要注意的就是,首先这里有一个选行的操作,然后需要从表里单元格当中取值,最后与文本框的值进行比对,这里之所以需要记录这个RowCount,是因为在步骤7的时候会用于比对,
这里需要用准星首先捕获到这个GridViewTable,然后将其添加到对象库:
然后才开始录制并编写代码,如下
1
public int AllUser;//注意,这里留一个字段来保存行数
2
3
public
void
Step2_SearchWithOutCondition()
4
{
5
WinButton uI查询Button
=
this
.UI查询用户Window.UI查询Window.UI查询Button;
6
//
操作步骤
7
Mouse.Click(uI查询Button,
new
Point(
1
,
1
));
//
Click '查询' button
8
System.Threading.Thread.Sleep(
3000
);
//
等待3秒,应付可能出现的查询延时
9
AllUser
=
this
.UI查询用户Window.UIUserGridViewWindow.UIDataGridViewTable.Rows.Count;
//
获取行数
10
WinRow row2
=
this
.UI查询用户Window.UIUserGridViewWindow.UIDataGridViewTable.Rows[
1
]
as
WinRow;
11
Mouse.Click(row2.Cells[
0
],
new
Point(
10
,
10
));
//
点击第二行第一个单元格,用以将第二行其选中
12
System.Threading.Thread.Sleep(
1000
);
//
等待1秒,应付可能出现的查询延时
13
14
//
检查点:检测“用户备注”一列的值是否和下方的“用户备注”文本框的值一致
15
Assert.AreEqual(
this
.UI查询用户Window.UITbx_MemoWindow.UITbx_MemoEdit.Text,((WinCell)row2.Cells[
4
]).Value,
"
检测“用户备注”一列的值是否和下方的“用户备注”文本框的值一致失败
"
);
16
}
实现步骤3
步骤序号 |
操作步骤 |
检查点 |
3 |
用户名为刚才我们在添加用户窗口添加的用户,其他条件不变,点击查询(例如,在上个部分的示例中,我们使用的是”TestUser6”) |
查询出用户名为TestUser6的一条数据 |
步骤3和步骤4是对用户名这个维度来进行测试,需要和上一个模块对接,因为在上一个模块添加了一个用户,所以这里需要检查是否能够查询出来,需要确定的就是RowCount=1并且第一行第一列数据为”TestUser6”才算正确,代码如下
1
public
void
Step3_SearchWithUidOnly()
2
{
3
string
NewUser
=
"
TestUser6
"
;
4
WinEdit uITbx_UserNameEdit
=
this
.UI查询用户Window.UITbx_UserNameWindow.UITbx_UserNameEdit;
5
WinButton uI查询Button
=
this
.UI查询用户Window.UI查询Window.UI查询Button;
6
//
操作步骤
7
uITbx_UserNameEdit.Text
=
NewUser;
8
Mouse.Click(uI查询Button,
new
Point(
1
,
1
));
//
Click '查询' button
9
System.Threading.Thread.Sleep(
3000
);
//
等待3秒,应付可能出现的查询延时
10
11
//
检查点:查询出用户名为TestUser6的一条数据
12
bool
isValid
=
1
==
this
.UI查询用户Window.UIUserGridViewWindow.UIDataGridViewTable.Rows.Count;
13
WinCell cell
=
((WinRow)UI查询用户Window.UIUserGridViewWindow.UIDataGridViewTable.Rows[
0
]).Cells[
1
]
as
WinCell;
14
isValid
&=
cell.Value
==
NewUser;
15
Assert.IsTrue(isValid,
"
查询出用户名为
"
+
NewUser
+
"
的一条数据失败
"
);
16
}
实现步骤4
步骤序号 |
操作步骤 |
检查点 |
4 |
用户名为一个不存在的用户“testuser100”,其他条件不变,点击查询 |
未查询出数据 |
这是一个反例的测试,很明显只要RowCount为0就可以通过测试
1
public
void
Step4_SearchWithUidNotExist()
2
{
3
string
ErrorUser
=
"
TestUser1000
"
;
4
WinEdit uITbx_UserNameEdit
=
this
.UI查询用户Window.UITbx_UserNameWindow.UITbx_UserNameEdit;
5
WinButton uI查询Button
=
this
.UI查询用户Window.UI查询Window.UI查询Button;
6
//
操作步骤
7
uITbx_UserNameEdit.Text
=
ErrorUser;
8
Mouse.Click(uI查询Button,
new
Point(
1
,
1
));
//
Click '查询' button
9
System.Threading.Thread.Sleep(
3000
);
//
等待3秒,应付可能出现的查询延时
10
11
//
检查点:未查询出数据
12
Assert.IsTrue(
0
==
this
.UI查询用户Window.UIUserGridViewWindow.UIDataGridViewTable.Rows.Count,
"
未查询出数据失败
"
);
13
}
实现步骤5
步骤序号 |
操作步骤 |
检查点 |
5 |
将用户名设置为空,其他条件不变,用户类型为“管理员”,记录查询出的行数 |
查询出所有为“管理员”的用户(注,为了方便,这里没有使用从数据库比对,而只使用查询条件与查询出的数据比对,实际项目中可能使用数据库比对) |
步骤5,6,7是对用户类型这个维度来进行测试,在步骤5中,我们需要遍历每一行中的“用户类型”列,判断他是不是等于“管理员”,并记录一共查询出多少条数据
1
public int AdminUser;//注意,这里留一个字段来保存管理员用户的行数
2
3
public
void
Step5_SearchWithAdminOnly()
4
{
5
string
UserType
=
"
管理员
"
;
6
WinEdit uITbx_UserNameEdit
=
this
.UI查询用户Window.UITbx_UserNameWindow.UITbx_UserNameEdit;
7
WinComboBox uI用户类型ComboBox
=
this
.UI查询用户Window.UICbx_UserTypeWindow.UI用户类型ComboBox;
8
WinButton uI查询Button
=
this
.UI查询用户Window.UI查询Window.UI查询Button;
9
//
操作步骤
10
uITbx_UserNameEdit.Text
=
""
;
11
uI用户类型ComboBox.SelectedItem
=
UserType;
12
Mouse.Click(uI查询Button,
new
Point(
1
,
1
));
//
Click '查询' button
13
System.Threading.Thread.Sleep(
3000
);
//
等待3秒,应付可能出现的查询延时
14
AdminUser
=
this
.UI查询用户Window.UIUserGridViewWindow.UIDataGridViewTable.Rows.Count;
//
获取行数
15
16
//
检查点:查询出所有为“管理员”的用户
17
bool
isValid
=
true
;
18
foreach
(WinRow winrow
in
this
.UI查询用户Window.UIUserGridViewWindow.UIDataGridViewTable.Rows)
19
{
20
isValid
&=
((winrow.Cells[
2
]
as
WinCell).Value
==
UserType);
21
}
22
Assert.IsTrue(isValid,
"
查询出所有为“管理员”的用户失败
"
);
23
}
实现步骤6
步骤序号 |
操作步骤 |
检查点 |
6 |
将用户类型设置为“一般用户”,其他条件不变,记录查询出的行数 |
查询出所有为“一般用户”的用户 |
和步骤5是一样的,需要遍历每一行中的“用户类型”列,判断他是不是等于“一般用户”,并记录一共查询出多少条数据
1
public int NormalUser;//注意,这里留一个字段来保存一般用户的行数
2
3
public
void
Step6_SearchWithNormalUserOnly()
4
{
5
string
UserType
=
"
一般用户
"
;
6
WinEdit uITbx_UserNameEdit
=
this
.UI查询用户Window.UITbx_UserNameWindow.UITbx_UserNameEdit;
7
WinComboBox uI用户类型ComboBox
=
this
.UI查询用户Window.UICbx_UserTypeWindow.UI用户类型ComboBox;
8
WinButton uI查询Button
=
this
.UI查询用户Window.UI查询Window.UI查询Button;
9
//
操作步骤
10
uITbx_UserNameEdit.Text
=
""
;
11
uI用户类型ComboBox.SelectedItem
=
UserType;
12
Mouse.Click(uI查询Button,
new
Point(
1
,
1
));
//
Click '查询' button
13
System.Threading.Thread.Sleep(
3000
);
//
等待3秒,应付可能出现的查询延时
14
NormalUser
=
this
.UI查询用户Window.UIUserGridViewWindow.UIDataGridViewTable.Rows.Count;
//
获取行数
15
16
//
检查点:查询出所有为“一般用户”的用户
17
bool
isValid
=
true
;
18
foreach
(WinRow winrow
in
this
.UI查询用户Window.UIUserGridViewWindow.UIDataGridViewTable.Rows)
19
{
20
isValid
&=
((winrow.Cells[
2
]
as
WinCell).Value
==
UserType);
21
}
22
Assert.IsTrue(isValid,
"
查询出所有为“一般用户”的用户失败
"
);
23
}
实现步骤7
步骤序号 |
操作步骤 |
检查点 |
7 |
使用刚才用户类型分别为“所有”,“管理员”,“一般用户”查询出的数据行数,进行比对 |
一般用户行数+管理员用户行数=所有用户行数 |
现在应该了解之所以需要记录下不同用户类型记录数的原因了吧?代码如下:
1
public
void
Step7_ValidUserCount()
2
{
3
Assert.AreEqual(AdminUser
+
NormalUser, AllUser,
"
检查'一般用户行数+管理员用户行数=所有用户行数'失败
"
);
4
}
实现步骤8
步骤序号 |
操作步骤 |
检查点 |
8 |
用户名为空,用户类型为“所有”,勾选时间,并进行选择“2008-1-11” |
查询出所有添加时间为“2008-1-11”的用户 |
步骤8是对时间维度进行一个测试,现在如果我们选择了2008-1-11,那么只需要遍历查询出的各行的“时间”一列是不是为2008-1-11
1
public
void
Step8_SearchWithDateOnly()
2
{
3
string
DateTimeAsString
=
"
2008-1-11
"
;
4
WinEdit uITbx_UserNameEdit
=
this
.UI查询用户Window.UITbx_UserNameWindow.UITbx_UserNameEdit;
5
WinComboBox uI用户类型ComboBox
=
this
.UI查询用户Window.UICbx_UserTypeWindow.UI用户类型ComboBox;
6
WinCheckBox uI日期CheckBox
=
this
.UI查询用户Window.UI日期Window.UI日期CheckBox;
7
WinDateTimePicker uIDtp_AddTimeDateTimePicker
=
this
.UI查询用户Window.UIDtp_AddTimeWindow.UIDtp_AddTimeDateTimePicker;
8
WinButton uI查询Button
=
this
.UI查询用户Window.UI查询Window.UI查询Button;
9
10
//
操作步骤
11
uITbx_UserNameEdit.Text
=
""
;
12
uI用户类型ComboBox.SelectedItem
=
"
所有
"
;
13
uI日期CheckBox.Checked
=
true
;
14
uIDtp_AddTimeDateTimePicker.DateTimeAsString
=
DateTimeAsString;
15
Mouse.Click(uI查询Button,
new
Point(
1
,
1
));
//
Click '查询' button
16
System.Threading.Thread.Sleep(
3000
);
//
等待3秒,应付可能出现的查询延时
17
18
//
检查点:查询出所有为“2008-1-11”的用户
19
bool
isValid
=
true
;
20
foreach
(WinRow winrow
in
this
.UI查询用户Window.UIUserGridViewWindow.UIDataGridViewTable.Rows)
21
{
22
string
[] DateNumbers
=
DateTimeAsString.Split(
'
-
'
);
23
DateTime dt
=
Convert.ToDateTime((winrow.Cells[
3
]
as
WinCell).Value);
24
isValid
&=
Convert.ToInt32(DateNumbers[
0
])
==
dt.Year;
25
isValid
&=
Convert.ToInt32(DateNumbers[
1
])
==
dt.Month;
26
isValid
&=
Convert.ToInt32(DateNumbers[
2
])
==
dt.Day;
27
}
28
Assert.IsTrue(isValid,
"
查询出所有为“2008-1-11”的用户失败
"
);
29
}
实现步骤9
步骤序号 |
操作步骤 |
检查点 |
9 |
将条件设置为刚才我们在添加用户窗口添加的用户信息(使用我们在上一个示例中使用的值,如”TestUser6”,”一般用户”,时间为添加时间,时间这个需要用到某个变量来记录) |
查询出对应的一条数据 |
步骤9是进行一次复合条件查询的测试,这次测试就用到之前我们在添加用户的时候的数据,需要注意的是,因为添加时间是不确定的,所以我们需要修改之前录制的代码,将他的值赋给一个变量,需要修改的AddUserUiMap.cs中的方法Step6_AddUserSuccess,让其有一个返回值返回当前时间,代码如下:
1
public
DateTime
Step6_AddUserSuccess()
2
{
3
//
操作步骤
4
this
.UI添加用户Window.UITbx_UserNameWindow.UITbx_UserNameEdit.Text
=
"
TestUser6
"
;
5
this
.UI添加用户Window.UICbx_UserTypeWindow.UI用户类别ComboBox.SelectedItem
=
"
一般用户
"
;
6
this
.UI添加用户Window.UITbx_MemoWindow.UITbx_MemoEdit.Text
=
"
Test
"
;
7
Mouse.Click(
this
.UI添加用户Window.UI添加Window.UI添加Button,
new
Point(
1
,
1
));
8
9
//
检查点:首先检查3秒内是否有弹出框弹出,如果有,则检查文本是否是"添加成功!"
10
this
.mUI弹出框Window
=
new
UI弹出框Window();
11
bool
isPopUp
=
this
.UI弹出框Window.UI弹出框Text.WaitForControlExist(
3000
);
12
Assert.IsTrue(isPopUp
&&
this
.UI弹出框Window.UI弹出框Text.DisplayText
==
"
添加成功!
"
,
"
输入正确,检测弹出“添加成功!”失败
"
);
13
Mouse.Click(
this
.UIOKWindow.UIOKButton,
new
Point(
1
,
1
));
14
//
这里是新添加的代码
15
return
DateTime.Now;
16
}
然后现在在这里引用之前的变量,来进行操作,代码如下
1
public
void
Step9_SearchWithAllCondition(
DateTime addTime
)
2
{
3
string
UserName
=
"
TestUser6
"
;
4
string
UserType
=
"
一般用户
"
;
5
string
AddTime
=
addTime.Year
+
"
-
"
+
addTime.Month
+
"
-
"
+
addTime.Day;
6
7
WinEdit uITbx_UserNameEdit
=
this
.UI查询用户Window.UITbx_UserNameWindow.UITbx_UserNameEdit;
8
WinComboBox uI用户类型ComboBox
=
this
.UI查询用户Window.UICbx_UserTypeWindow.UI用户类型ComboBox;
9
WinCheckBox uI日期CheckBox
=
this
.UI查询用户Window.UI日期Window.UI日期CheckBox;
10
WinDateTimePicker uIDtp_AddTimeDateTimePicker
=
this
.UI查询用户Window.UIDtp_AddTimeWindow.UIDtp_AddTimeDateTimePicker;
11
WinButton uI查询Button
=
this
.UI查询用户Window.UI查询Window.UI查询Button;
12
13
//
操作步骤
14
uITbx_UserNameEdit.Text
=
UserName;
15
uI用户类型ComboBox.SelectedItem
=
UserType;
16
uI日期CheckBox.Checked
=
true
;
17
uIDtp_AddTimeDateTimePicker.DateTimeAsString
=
AddTime;
18
Mouse.Click(uI查询Button,
new
Point(
1
,
1
));
//
Click '查询' button
19
System.Threading.Thread.Sleep(
3000
);
//
等待3秒,应付可能出现的查询延时
20
21
//
检查点:查询出用户名为TestUser6的一条数据
22
bool
isValid
=
1
==
this
.UI查询用户Window.UIUserGridViewWindow.UIDataGridViewTable.Rows.Count;
23
WinCell cell
=
((WinRow)UI查询用户Window.UIUserGridViewWindow.UIDataGridViewTable.Rows[
0
]).Cells[
1
]
as
WinCell;
24
isValid
&=
cell.Value
==
UserName;
25
Assert.IsTrue(isValid,
"
查询出用户名为
"
+
UserName
+
"
的一条数据失败
"
);
26
}
实现步骤10
步骤序号 |
操作步骤 |
检查点 |
10 |
点击重置按钮 |
用户名为空,用户类型为“所有”,不勾选时间 |
这一步很简单,几乎没什么说的,只是需要注意的是最好加个等待时间,代码如下:
1
public
void
Step10_ClickReset()
2
{
3
WinEdit uITbx_UserNameEdit
=
this
.UI查询用户Window.UITbx_UserNameWindow.UITbx_UserNameEdit;
4
WinComboBox uI用户类型ComboBox
=
this
.UI查询用户Window.UICbx_UserTypeWindow.UI用户类型ComboBox;
5
WinCheckBox uI日期CheckBox
=
this
.UI查询用户Window.UI日期Window.UI日期CheckBox;
6
WinButton uI重置Button
=
this
.UI查询用户Window.UI重置Window.UI重置Button;
7
8
//
操作步骤
9
Mouse.Click(uI重置Button,
new
Point(
25
,
14
));
10
System.Threading.Thread.Sleep(
1000
);
//
等待1秒,应付可能出现的查询延时
11
12
//
检查点:用户名为空,用户类型为“所有”,不勾选时间
13
bool
isValid
=
true
;
14
isValid
&=
string
.IsNullOrEmpty(uITbx_UserNameEdit.Text);
15
isValid
&=
uI用户类型ComboBox.SelectedItem
==
"
所有
"
;
16
isValid
&=
!
uI日期CheckBox.Checked;
17
Assert.IsTrue(isValid,
"
重置失败
"
);
18
19
}
实现步骤11
步骤序号 |
操作步骤 |
检查点 |
11 |
点击退出 |
退出窗口 |
这一步也很简单,和上个部分提到的一样,代码如下:
1
public
void
Step11_CloseWindow()
2
{
3
Mouse.Click(
this
.UI查询用户Window.UI查询用户TitleBar.UICloseButton,
new
Point(
1
,
1
));
4
Mouse.Click(
this
.UI系统主窗口Window.UI系统主窗口TitleBar.UICloseButton,
new
Point(
1
,
1
));
5
Assert.IsTrue(
this
.UI系统主窗口Window.WaitForControlNotExist(
3000
),
"
退出失败
"
);
6
}
总结
在本章,介绍了通过编码的方式来建立UI测试,,相信大家在看完了以后,应该能够完全自己用VS2010提供的UI测试进行实际项目测试了。如果需要调用刚才所写的方法,只需要再新建一个编码的UI测试,例如将其命名为CodedUITest1.cs,然后在内部添加一个这样的调用即可
1
[TestMethod]
2
public
void
CodedUITestMethod1()
3
{
4
DateTime addTime;
5
6
AddUserUIMapClasses.AddUserUIMap addUserUIMap
=
new
AddUserUIMapClasses.AddUserUIMap();
7
addUserUIMap.Step1_LoginSystem();
8
addUserUIMap.Step2_ClickAddUser();
9
addUserUIMap.Step3_AddUserWithNoName();
10
addUserUIMap.Step4_AddUserWithOverlapName();
11
addUserUIMap.Step5_AddUserWithNoMemo();
12
addTime
=
addUserUIMap.Step6_AddUserSuccess();
//
这里要特别注意,有一个返回值
13
addUserUIMap.Step7_CloseWindows();
14
15
SearchUserUIMapClasses.SearchUserUIMap searchUserUIMap
=
new
SearchUserUIMapClasses.SearchUserUIMap();
16
searchUserUIMap.Step1_ClickSearchUser();
17
searchUserUIMap.Step2_SearchWithOutCondition();
18
searchUserUIMap.Step3_SearchWithUidOnly();
19
searchUserUIMap.Step4_SearchWithUidNotExist();
20
searchUserUIMap.Step5_SearchWithAdminOnly();
21
searchUserUIMap.Step6_SearchWithNormalUserOnly();
22
searchUserUIMap.Step7_ValidUserCount();
23
searchUserUIMap.Step8_SearchWithDateOnly();
24
searchUserUIMap.Step9_SearchWithAllCondition(addTime);
//
这里要特别注意,有一个参数
25
searchUserUIMap.Step10_ClickReset();
26
searchUserUIMap.Step11_CloseWindow();
27
}
示例程序的下载:下载点我
个人录制的源代码下载:下载点我
在下一章,将会介绍如何建立数据驱动的测试,敬请关注。
附:发布计划
编码的UI测试系列之一:入门篇 一个简单的示例(Released)
编码的UI测试系列之二:入门篇 操作动作的录制原理(上)(Released)
编码的UI测试系列之二:入门篇 操作动作的录制原理(下)(Released)
编码的UI测试系列之三:入门篇 操作对象的识别原理 (Released)
编码的UI测试系列之四:进阶篇 通过编写测试代码的方式建立UI测试(上)(Released)
编码的UI测试系列之四:进阶篇 通过编写测试代码的方式建立UI测试(下)(Released)
编码的UI测试系列之五:进阶篇 常用测试要点和函数(1)
编码的UI测试系列之六:进阶篇 常用测试要点和函数(2)
编码的UI测试系列之七:进阶篇 UI测试之间的互相引用和测试组织
编码的UI测试系列之八:高级篇 远程调用其他机器进行测试
编码的UI测试系列之九:高级篇 使用MS测试管理器组织测试