您的位置:首页 > 其它

WF4.0实战(五):实现一个直观易扩展的自动测试框架

2012-03-09 00:00 525 查看




概述:

这篇文章用WF实现一个软件自动测试框架,这个框架你可以随意扩展。本这个框架根据WF流程去自动地点击你的页面;自动的在你的文本上输入值;自动的做一些人为的操作。也就是说WF相当于一个测试用户,自动地帮你测试软件。只需要你定制测试流程。

写一个待测试的软件:

这里我写了一个很简单的待测试的软件:一个加法运算。界面如下图,就一个Form。



后台代码如下:




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流程,如下图:



2、拖测试活动:



3、修改display属性,使流程更加形象:



4、设置活动属性,这里以几个个活动为例,看下面的图:

“设置加数1的值”设置如下:



“点击计算按钮”设置如下:



“获取计算结果”设置如下:



“验证结果”设置如下:



“关闭表单”设置如下:



4、 这个流程分为:

a、设置表单上两个加数文本的值

b、自动点击计算按钮

c、获取表单上的值

d、判断从表单上取得的值与正确的值是否相等

e、如果相等输出正确,否者输出存在bug。

f、关闭表单

以上6个步骤会自动执行,你可以看见下图的Output输出:程序正确。



修改待测试软件,将下面代码屏蔽掉。看运行效果:



//
int c = a + b;

//
txt3.Text = c.ToString();

输出如下图:



我们可以看到Output输出:程序有bug。

框架实现:

类图如下:



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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐