WF4.0实战(五):实现一个直观易扩展的自动测试框架
概述:
这篇文章用WF实现一个软件自动测试框架,这个框架你可以随意扩展。本这个框架根据WF流程去自动地点击你的页面;自动的在你的文本上输入值;自动的做一些人为的操作。也就是说WF相当于一个测试用户,自动地帮你测试软件。只需要你定制测试流程。
写一个待测试的软件:
这里我写了一个很简单的待测试的软件:一个加法运算。界面如下图,就一个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输出:程序正确。
修改待测试软件,将下面代码屏蔽掉。看运行效果:
// txt3.Text = c.ToString();
输出如下图:
我们可以看到Output输出:程序有bug。
框架实现:
类图如下:
StartFlow用于启动流程,其余的为自定义活动。
WindowsControlActivity代码如下,FormType参数是表单的类型(要带上命名空间),RequiredArgument属性表示这个参数是必需的。
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参数。
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
(全文完)
以下为广告部分
您部署的HTTPS网站安全吗?
如果您想看下您的网站HTTPS部署的是否安全,花1分钟时间来 myssl.com 检测以下吧。让您的HTTPS网站变得更安全!
快速了解HTTPS网站安全情况。
安全评级(A+、A、A-...)、行业合规检测、证书信息查看、证书链信息以及补完、服务器套件信息、证书兼容性检测等。
安装部署SSL证书变得更方便。
SSL证书内容查看、SSL证书格式转换、CSR在线生成、SSL私钥加解密、CAA检测等。
让服务器远离SSL证书漏洞侵扰
TLS ROBOT漏洞检测、心血漏洞检测、FREAK Attack漏洞检测、SSL Poodle漏洞检测、CCS注入漏洞检测。