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

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

概述:

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

写一个待测试的软件:

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

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

后台代码如下:

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

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

2、拖测试活动:

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

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

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

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

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

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

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

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

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

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

“验证结果”设置如下:

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

“关闭表单”设置如下:

 

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

4、 这个流程分为:

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

    b、自动点击计算按钮

    c、获取表单上的值

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

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

    f、关闭表单

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

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

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

                // int c = a + b;
               
//  txt3.Text = c.ToString();

输出如下图:

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

 

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

框架实现:

类图如下:

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

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实战(五):实现一个直观易扩展的自动测试框架)