3.3.4 反射机制在自动化功能测试工具中的使用
在基于GUI对象识别和控制的自动化测试工具中,过去一直依赖于Windows API函数的调用。而随着新的编程语言和平台的出现,涌现了很多新的语言特性,这些语言特性可用于自动化测试工具的设计,例如反射机制就是其中一项技术。
程序集包括模块,模块包含类型,类型包含成员。在.NET和Java中,都提供了反射的机制,反射提供了封装程序集、模块和类型的对象,可以通过反射动态地创建类型的实例,将类型绑定到现有对象,或者从现有对象中获取类型,然后调用类型的方法或访问其字段和属性。
反射机制可被用在测试中,通过反射来加载被测试程序,获取被测试程序的各种属性,触发被测试程序的各种事件,从而达到自动化测试的目的。例如,下面的C#代码通过反射机制读取程序中textBox1控件的Text属性:
// 获取控件属性 static object GetControlPropertyValue(string controlName, string propertyName) { if (AUTForm.InvokeRequired) { Thread.Sleep(1000); return AUTForm.Invoke (new GetControlPropertyValueHandler(GetControlPropertyValue), new object[] { controlName, propertyName }); } // 获取类型 Type t1 = AUTForm.GetType(); // 获取类型中的成员 FieldInfo fi = t1.GetField(controlName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance); object ctrl = fi.GetValue(AUTForm); Type t2 = ctrl.GetType(); // 获取成员中的属性 PropertyInfo pi = t2.GetProperty(propertyName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance); // 返回控件属性值 return pi.GetValue(ctrl, new object[0]); } delegate object GetControlPropertyValueHandler(string controlName, string propertyName); |
而下面的C#代码则通过反射机制调用控件的方法,模拟用户点击按钮的过程:
// 模拟用户点击按钮 InvokeMethod("button1_Click", new object[] { null, new EventArgs() }); // 调用控件方法 static void InvokeMethod(string methodName, params object[] parms) { if (AUTForm.InvokeRequired) { Thread.Sleep(1000); AUTForm.Invoke(new InvokeMethodHandler(InvokeMethod), new object[] { methodName, parms }); return; } // 获取类型 Type t = AUTForm.GetType(); // 获取类型中的指定方法 MethodInfo mi = t.GetMethod(methodName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance; // 调用方法 mi.Invoke(AUTForm, parms); } delegate void InvokeMethodHandler(string methodName, params object[] arms); |
连载一 连载二 连载三 连载四 连载五 连载六 连载七 连载八 连载九 连载十 连载十一
连载十二 连载十四 连载十五 连载十六 连载十七 连载十八 连载十九 连载二十 连载二十一
本文选自:《51Testing软件测试作品系列》之二的 《QTP自动化测试实践》,本站经电子工业出版社和作者的授权,近期将进行部分章节的连载,敬请期待!
版权声明:51Testing软件测试网及相关内容提供者拥有51testing.com内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像。51testing软件测试网欢迎与业内同行进行有益的合作和交流,如果有任何有关内容方面的合作事宜,请联系我们。