程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> WF4.0實戰(五):實現一個直觀易擴展的自動測試框架

WF4.0實戰(五):實現一個直觀易擴展的自動測試框架

編輯:關於.NET

概述:

這篇文章用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     }

由於工作流運行時是多線程的,故這裡使用了委托。

總結:這個自動測試非常方便。你可以很方便的擴展,具體見代碼。如果你有什麼不明白的地方,歡迎給我留言,我會及時回復你的。

代碼:http://files.cnblogs.com/zhuqil/TestflowFramework.rar

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved