WF4.0实战(五):实现一个直观易扩展的自动测试框架
2012-03-09 00:00
525 查看
![](http://static.oschina.net/uploads/img/201203/09124619_x0kb.gif)
概述:
这篇文章用WF实现一个软件自动测试框架,这个框架你可以随意扩展。本这个框架根据WF流程去自动地点击你的页面;自动的在你的文本上输入值;自动的做一些人为的操作。也就是说WF相当于一个测试用户,自动地帮你测试软件。只需要你定制测试流程。
写一个待测试的软件:
这里我写了一个很简单的待测试的软件:一个加法运算。界面如下图,就一个Form。
![](http://static.oschina.net/uploads/img/201203/09124619_y74D.png)
后台代码如下:
1
public
partial
class
MainForm : Form
2
{
3
public
MainForm()
4
{
5
InitializeComponent();
6
}
7
8
private
void
btnAdd_Click(
object
sender, EventArgs e)
9
{
10
try
11
{
12
int
a
=
int
.Parse(txt1.Text);
13
int
b
=
int
.Parse(txt2.Text);
14
int
c
=
a
+
b;
15
txt3.Text
=
c.ToString();
16
}
17
catch
18
{
19
txt3.Text
=
""
;
20
}
21
}
22
23
24
}
画测试流程:
1、新建一个Test1流程,如下图:
![](http://static.oschina.net/uploads/img/201203/09124619_Lo5x.png)
2、拖测试活动:
![](http://static.oschina.net/uploads/img/201203/09124619_E3cA.png)
3、修改display属性,使流程更加形象:
![](http://static.oschina.net/uploads/img/201203/09124620_0M7H.jpg)
4、设置活动属性,这里以几个个活动为例,看下面的图:
“设置加数1的值”设置如下:
![](http://static.oschina.net/uploads/img/201203/09124620_6svm.jpg)
“点击计算按钮”设置如下:
![](http://static.oschina.net/uploads/img/201203/09124620_C4vn.jpg)
“获取计算结果”设置如下:
![](http://static.oschina.net/uploads/img/201203/09124620_s4En.jpg)
“验证结果”设置如下:
![](http://static.oschina.net/uploads/img/201203/09124620_gvEb.jpg)
“关闭表单”设置如下:
![](http://static.oschina.net/uploads/img/201203/09124620_QTzD.jpg)
4、 这个流程分为:
a、设置表单上两个加数文本的值
b、自动点击计算按钮
c、获取表单上的值
d、判断从表单上取得的值与正确的值是否相等
e、如果相等输出正确,否者输出存在bug。
f、关闭表单
以上6个步骤会自动执行,你可以看见下图的Output输出:程序正确。
![](http://static.oschina.net/uploads/img/201203/09124620_3f48.png)
修改待测试软件,将下面代码屏蔽掉。看运行效果:
//
int c = a + b;
//
txt3.Text = c.ToString();
输出如下图:
![](http://static.oschina.net/uploads/img/201203/09124620_YTkH.png)
我们可以看到Output输出:程序有bug。
框架实现:
类图如下:
![](http://static.oschina.net/uploads/img/201203/09124620_pY2l.png)
StartFlow用于启动流程,其余的为自定义活动。
WindowsControlActivity代码如下,FormType参数是表单的类型(要带上命名空间),RequiredArgument属性表示这个参数是必需的。
1
public
class
WindowsControlActivity : CodeActivity
2
{
3
public
delegate
void
SetControlValueCallback( Control oControl);
4
//
Define an activity input argument of type string
5
[RequiredArgument]
6
public
InArgument
<
string
>
FormType {
get
;
set
; }
7
8
//
If your activity returns a value, derive from CodeActivity<TResult>
9
//
and return the value from the Execute method.
10
protected
override
void
Execute(CodeActivityContext context)
11
{
12
//
Obtain the runtime value of the Text input argument
13
14
}
15
16
}
ClickButtonActivity代码如下,ButtonName参数表示按钮的名称,这个活动的父类是WindowsControlActivity,故它也要求有FormType参数。
1
public
sealed
class
ClickButtonActivity : WindowsControlActivity
2
{
3
//
Define an activity input argument of type string
4
[RequiredArgument]
5
public
InArgument
<
string
>
ButtonName {
get
;
set
; }
6
7
//
If your activity returns a value, derive from CodeActivity<TResult>
8
//
and return the value from the Execute method.
9
protected
override
void
Execute(CodeActivityContext context)
10
{
11
StartFlow.Extensions ext
=
context.GetExtension
<
StartFlow.Extensions
>
();
12
Form frm
=
ext.GetForm(FormType.Get(context));
13
Button button
=
ext.GetControl(frm, ButtonName.Get(context))
as
Button;
14
SetControlPropertyValue(button);
15
}
16
17
private
void
SetControlPropertyValue( Control oControl)
18
{
19
if
(oControl.InvokeRequired)
20
{
21
SetControlValueCallback d
=
new
SetControlValueCallback(SetControlPropertyValue);
22
oControl.Invoke(d,
new
object
[] { oControl });
23
}
24
else
25
{
26
Button button
=
oControl
as
Button;
27
button.PerformClick();
28
}
29
}
30
31
}
由于工作流运行时是多线程的,故这里使用了委托。
总结:这个自动测试非常方便。你可以很方便的扩展,具体见代码。如果你有什么不明白的地方,欢迎给我留言,我会及时回复你的。
代码:/Files/zhuqil/TestflowFramework.rar
原文链接:
http://www.cnblogs.com/zhuqil/archive/2010/04/20/TestflowFramework.html
相关文章推荐
- WF4.0实战(五):实现一个直观易扩展的自动测试框架
- 一个通用的单元测试框架的思考和设计04-实现篇-自动管理测试数据
- 一个通用的单元测试框架的思考和设计04-实现篇-自动管理测试数据
- WF+WCF+WPF第三天-WF实现一个软件自动测试框架
- 一个通用的单元测试框架的思考和设计06-实现篇-自动管理测试数据-如何临时关闭数据外键约束
- 一个通用的单元测试框架的思考和设计06-实现篇-自动管理测试数据-如何临时关闭数据外键约束
- 一个通用的单元测试框架的思考和设计07-实现篇-自动管理测试数据-如何为自增长主键id赋值
- 一个通用的单元测试框架的思考和设计07-实现篇-自动管理测试数据-如何为自增长主键id赋值
- 用TestComplete实现一个关键字驱动测试框架
- Criterion - 一个简单可扩展的 C 语言测试框架
- spring4学习记录05-spring mvc实战之框架构建测试jpa借助spring-data实现自动化jpa
- 推荐一个Android下的自动测试框架robotium
- Emit学习-实战篇-实现一个简单的AOP框架(二)
- Emit学习-实战篇-实现一个简单的AOP框架(三)
- WF4.0实战(十七):实现自动访问网站机器人
- Criterion - 一个简单可扩展的 C 语言测试框架
- Apache thrift - 使用,内部实现及构建一个可扩展的RPC框架
- 如何开发一个java开源框架-----Jvn框架之实现自动生成在线文档(第七讲)
- 用函数指针实现的一个测试框架
- [原创]AjaxControlToolkitTests自动测试框架完全解析之二:实现篇(1)