51Testing丛书连载:(十三) QTP自动化测试实践

发表于:2008-8-05 16:27

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:陈能技    来源:51Testing软件测试网

分享:

  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软件测试网欢迎与业内同行进行有益的合作和交流,如果有任何有关内容方面的合作事宜,请联系我们

22/2<12
100家互联网大公司java笔试题汇总,填问卷领取~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2023
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号