精华内容
下载资源
问答
  • Ps教程之神奇的Photoshop自动化技术

    千人学习 2020-05-05 15:14:53
    【课程的特点】 1、创新的教学模式:手把手教您Photoshop自动化技术,一看就懂,一学就会; 2、贴心的操作提示:让您的眼睛始终处于操作的焦点位置,不用再满屏找光标; 3、语言简洁精练:瞄准问题的核心所在,减少...
  • 网页自动化技术实现登录

    千次阅读 2017-05-14 07:17:40
    自动化技术,是不需要人的参与,通过自动化程序,让别人的程序自动按照一定的流程执行的一种技术。 (1)举例说明应用 例如,每天需要登录十个网站,每个网站都需要输入用户名,密码,是不是很麻烦,能不能通过一种...
    自动化技术,是不需要人的参与,通过自动化程序,让别人的程序自动按照一定的流程执行的一种技术。

    (1)举例说明应用

    例如,每天需要登录十个网站,每个网站都需要输入用户名,密码,是不是很麻烦,能不能通过一种技术,每天自动登录,这就是简单的网页自动化应用;
    例如:我非常关心十个网站的信息,每当这些信息有更新的时候,我希望系统能够自动将变更的内容,以网页的形式发给我,每天,我只需要一点按钮,就全知道了;
    例如,每天我都需要在一个网站做大量的重复操作,我是不是能够做自动化程序,让计算机自动的帮助我操作,减少鼠标操作,维护身体健康等等。

    (2)C#网页自动化的关键技术

    2.1 DOM:文档对象模型;
    2.2 HTML;
    2.3 XML;
    2.4 Http协议;
    2.5 webbrowse控件等。

    (3)自动登录的源码

    HtmlElement tbUserid = wb1.Document.All["username"];
    HtmlElement tbPasswd = wb1.Document.All["userpass"];
    if (tbUserid == null || tbPasswd == null )
    return;
    
    tbUserid.SetAttribute("value", "userid");
    tbPasswd.SetAttribute("value", "password");
    
    HtmlDocument htm = this.wb1.Document;
    HtmlElementCollection all = htm.All;
    
    for (int i = 0; i < all.Count; i++)
    {
        HtmlElement elem = all[i];
        if (elem.TagName.ToLower() == "a")
       {
           if (elem.OuterHtml != null)
           {
               int pos = elem.OuterHtml.IndexOf("登录");
               if (pos > 0)
               {
                    elem.InvokeMember("click");
               }
           }
       }
    }
    【总结】:网页自动化技术是一项拥有广泛应用的计算机技术,由于网络的复杂性,该项技术的使用具有复杂性,读取网页对象的各种属性,进而操作网页,由于没有统一的标准,个性化较强,需要具体问题具体分析。同时,在网页自动化的过程中,会遇到各式各样的难题,有兴趣就一起研究吧。


    展开全文
  • 工业控制自动化技术

    千次阅读 2012-07-30 15:56:56
    工业控制自动化技术是一种运用控制理论、仪器仪表、计算机和其它信息技术,对工业生产过程实现检测、控制、优化、调度、管理和决策,达到增加产量、提高质量、降低消耗、确保安全等目的的综合性技术,主要包括工业...
    	工业控制自动化技术是一种运用控制理论、仪器仪表、计算机和其它信息技术,对工业生产过程实现检测、控制、优化、调度、管理和决策,达到增加产量、提高质量、降低消耗、确保安全等目的的综合性技术,主要包括工业自动化软件、硬件和系统三大部分。工业控制自动化技术作为20世纪现代制造领域中最重要的技术之一,主要解决生产效率与一致性问题。虽然自动化系统本身并不直接创造效益,但它对企业生产过程有明显的提升作用。
      我国工控自动化的发展道路,大多是在引进成套设备的同时进行消化吸收,然后进行二次开发和应用。目前我国工业控制自动化技术、产业和应用都有了很大的发展,我国工业计算机系统行业已经形成。工业控制自动化技术正在向智能化、网络化和集成化方向发展。
      1.以工业PC为基础的低成本工业控制自动化将成为主流
      众所周知,从20世纪60年代开始,西方国家就依靠技术进步(即新设备、新工艺以及计算机应用)开始对传统工业进行改造,使工业得到飞速发展。20世纪末世界上最大的变化就是全球市场的形成。全球市场导致竞争空前激烈, 促使企业必须加快新产品投放市场时间(Time to Market)、改善质量(Quality)、降低成本(Cost)以及完善服务体系(Service),这就是企业的T.Q.C.S.。虽然计算机集成制造系统(CIMS)结合信息集成和系统集成,追求更完善的T.Q.C.S.,使企业实现“在正确的时间,将正确的信息以正确的方式传给正确的人,以便作出正确的决策”,即“五个正确”。然而这种自动化需要投入大量的资金,是一种高投资、高效益同时是高风险的发展模式,很难为大多数中小企业所采用。在我国,中小型企业以及准大型企业走的还是低成本工业控制自动化的道路。
      工业控制自动化主要包含三个层次,从下往上依次是基础自动化、过程自动化和管理自动化,其核心是基础自动化和过程自动化。
      传统的自动化系统,基础自动化部分基本被PLC和DCS所垄断,过程自动化和管理自动化部分主要是由各种进口的过程计算机或小型机组成,其硬件、系统软件和应用软件的价格之高令众多企业望而却步。
      20世纪90年代以来,由于PC-based的工业计算机(简称工业PC)的发展,以工业PC、I/O装置、监控装置、控制网络组成的PC-based的自动化系统得到了迅速普及,成为实现低成本工业自动化的重要途径。我国重庆钢铁公司这样的大企业的几乎全部大型加热炉,也拆除了原来DCS或单回路数字式调节器,而改用工业PC来组成控制系统,并采用模糊控制算法,获得了良好效果。
      由于基于PC的控制器被证明可以像PLC一样可靠,并且被操作和维护人员接受,所以,一个接一个的制造商至少在部分生产中正在采用PC控制方案。基于PC的控制系统易于安装和使用,有高级的诊断功能,为系统集成商提供了更灵活的选择,从长远角度看,PC控制系统维护成本低。由于可编程控制器(PLC)受PC控制的威胁最大,所以PLC供应商对PC的应用感到很不安。事实上,他们现在也加入到了PC控制“浪潮”中。
      近年来,工业PC在我国得到了异常迅速的发展。从世界范围来看,工业PC主要包含两种类型:IPC工控机和Compact PCI工控机以及它们的变形机,如AT96总线工控机等。由于基础自动化和过程自动化对工业PC的运行稳定性、热插拔和冗余配置要求很高,现有的IPC已经不能完全满足要求,将逐渐退出该领域,取而代之的将是CompactPCI-based工控机,而IPC将占据管理自动化层。国家于2001年设立了“以工业控制计算机为基础的开放式控制系统产业化”工业自动化重大专项,目标就是发展具有自主知识产权的PC-based控制系统,在3(5年内,占领30%(50%的国内市场,并实现产业化。
      几年前,当“软PLC”出现时,业界曾认为工业PC将会取代PLC。然而,时至今日工业PC并没有代替PLC,主要有两个原因:一个是系统集成原因;另一个是软件操作系统Windows NT的原因。一个成功的PC-based控制系统要具备两点:一是所有工作要由一个平台上的软件完成;二是向客户提供所需要的所有东西。可以预见,工业PC与PLC的竞争将主要在高端应用上,其数据复杂且设备集成度高。工业PC不可能与低价的微型PLC竞争,这也是PLC市场增长最快的一部分。从发展趋势看,控制系统的将来很可能存在于工业PC 和 PLC之间,这些融合的迹象已经出现。
      和PLC一样,工业PC市场在过去的两年里保持平稳。与PLC相比,工业PC软件很便宜。据Frost & Sullivan公司估计,全世界每年7亿美元工业PC市场里,大约8500万美元为控制软件,一亿美元为操作系统。到2007年会翻一番,工业PC市场变得非常可观。
      2.PLC在向微型化、网络化、PC化和开放性方向发展
      目前,全世界PLC生产厂家约200家,生产300多种产品。国内PLC市场仍以国外产品为主,如Siemens、Modicon、A-B、OMRON、三菱、GE的产品。经过多年的发展,国内PLC生产厂家约有三十家,但都没有形成颇具规模的生产能力和名牌产品,可以说PLC在我国尚未形成制造产业化。在PLC应用方面,我国是很活跃的,应用的行业也很广。专家估计,2000年PLC的国内市场销量为15(20万套(其中进口占90%左右),约25(35亿元人民币,年增长率约为12%。预计到2005年全国PLC需求量将达到25万套左右,约35(45亿元人民币)。
      PLC市场也反映了全世界制造业的状况,2000后大幅度下滑。但是,按照Automation Research Corp的预测,尽管全球经济下滑,PLC市场将会复苏,估计全球PLC市场在2000年为76亿美元,到2005年底将回到76亿美元,并继续略微增长。
      微型化、网络化、PC化和开放性是PLC未来发展的主要方向。在基于PLC自动化的早期,PLC体积大而且价格昂贵。但在最近几年,微型PLC(小于32 I/O)已经出现,价格只有几百欧元。随着软PLC(Soft PLC)控制组态软件的进一步完善和发展,安装有软PLC组态软件和PC-based控制的市场份额将逐步得到增长。
      当前,过程控制领域最大的发展趋势之一就是Ethernet技术的扩展,PLC也不例外。现在越来越多的PLC供应商开始提供Ethernet接口。可以相信,PLC将继续向开放式控制系统方向转移,尤其是基于工业PC的控制系统。
      3.面向测控管一体化设计的DCS系统
      集散控制系统DCS(Distributed Control System)问世于1975年,生产厂家主要集中在美、日、德等国。我国从70年代中后期起,首先由大型进口设备成套中引入国外的DCS,首批有化纤、乙烯、化肥等进口项目。当时,我国主要行业(如电力、石化、建材和冶金等)的DCS基本全部进口。80年代初期在引进、消化和吸收的同时,开始了研制国产化DCS的技术攻关。
      近10年,特别是“九五”以来,我国DCS系统研发和生产发展很快,崛起了一批优秀企业,如北京和利时公司、上海新华公司、浙大中控公司、浙江威盛公司、航天测控公司、电科院以及北京康拓集团等。这批企业研制生产的DCS系统,不仅品种数量大幅度增加,而且产品技术水平已经达到或接近国际先进水平。在2001年全国应用的4426套DCS系统中,国产DCS系统为1486套,占35%。短短几年,国外DCS系统在我国一统天下的局面从此不再出现。这些专业化公司不仅占据了一定的市场份额,积累了发展的资本和技术,同时使得国外引进的DCS系统价格也大幅度下降,为我国自动化推广事业做出了贡献。与此同时,国产DCS系统的出口也在逐年增长。
      虽然国产DCS的发展取得了长足进步,但国外DCS产品在国内市场中占有率还较高,其中主要是Honeywell和横河公司的产品。我国DCS的市场年增长率约为20%,年市场额约为30(35亿元。由于近5年内DCS在石化行业大型自控装置中没有可替代产品,所以其市场增长率不会下降。据统计,到2005年,我国石化行业有1000多套装置需要应用DCS控制;电力系统每年新装1000多万千瓦发电机组,需要DCS实现监控;不少企业已使用DCS近15~20年,需要更新和改造。
      4.控制系统正在向现场总线(FCS)方向发展
      由于3C(Computer、Control、Communication)技术的发展,过程控制系统将由DCS发展到FCS(Fieldbus Control System)。FCS可以将PID控制彻底分散到现场设备(Field Device)中。基于现场总线的FCS又是全分散、全数字化、全开放和可互操作的新一代生产过程自动化系统,它将取代现场一对一的4~20mA模拟信号线,给传统的工业自动化控制系统体系结构带来革命性的变化。
      根据IEC61158的定义,现场总线是安装在制造或过程区域的现场装置与控制室内的自动控制装置之间的数字式、双向传输、多分支结构的通信网络。现场总线使测控设备具备了数字计算和数字通信能力,提高了信号的测量、传输和控制精度,提高了系统与设备的功能、性能。IEC/TC65的SC65C/WG6工作组于1984年开始致力于推出世界上单一的现场总线标准工作,走过了16年的艰难历程,于1993年推出了IEC61158-2,之后的标准制定就陷于混乱。
      计算机控制系统的发展在经历了基地式气动仪表控制系统、电动单元组合式模拟仪表控制系统、集中式数字控制系统以及集散控制系统(DCS)后,将朝着现场总线控制系统(FCS)的方向发展。虽然以现场总线为基础的FCS发展很快,但FCS发展还有很多工作要做,如统一标准、仪表智能化等。另外,传统控制系统的维护和改造还需要DCS,因此FCS完全取代传统的DCS还需要一个较长的过程,同时DCS本身也在不断的发展与完善。可以肯定的是,结合DCS、工业以太网、先进控制等新技术的FCS将具有强大的生命力。工业以太网以及现场总线技术作为一种灵活、方便、可靠的数据传输方式,在工业现场得到了越来越多的应用,并将在控制领域中占有更加重要的地位。
      5.仪器仪表技术在向数字化、智能化、网络化、微型化方向发展
      经过五十年的发展,我国仪器仪表工业已有相当基础,初步形成了门类比较齐全的生产、科研、营销体系。现有各类仪器仪表企业6000余家,年销售额约1000亿元,成为亚洲除日本之外第二大仪器仪表生产国。据海关统计,除去随成套工程项目配套引进的仪器仪表不计,去年进口各类仪器仪表近60亿美元,约占我国仪器仪表工业总产值的50%。但目前我国仪器仪表行业产品大多属于中低档水平,随着国际上数字化、智能化、网络化、微型化的产品逐渐成为主流,差距还将进一步加大。目前,我国高档、大型仪器设备大多依赖进口。中档产品以及许多关键零部件,国外产品占有我国市场60%以上的份额,而国产分析仪器占全球市场不到千分之二的份额。
      今后仪器仪表技术的主要发展趋势:仪器仪表向智能化方向发展,产生智能仪器仪表;测控设备的PC化,虚拟仪器技术将迅速发展;仪器仪表网络化,产生网络仪器与远程测控系统。
      几点建议:开发具有自主知识产权的产品,掌握核心技术;加强仪器仪表行业的系统集成能力;进一步拓展仪器仪表的应用领域。
      6.数控技术向智能化、开放性、网络化、信息化发展
      从1952年美国麻省理工学院研制出第一台试验性数控系统,到现在已走过了51年的历程。近10年来,随着计算机技术的飞速发展,各种不同层次的开放式数控系统应运而生,发展很快。目前正朝着标准化开放体系结构的方向前进。就结构形式而言,当今世界上的数控系统大致可分为4种类型:1.传统数控系统;2.“PC嵌入NC”结构的开放式数控系统;3.“NC嵌入PC”结构的开放式数控系统;4.SOFT型开放式数控系统。
      我国数控系统的开发与生产,通过“七五”引进、消化、吸收,“八五”攻关和“九五”产业化,取得了很大的进展,基本上掌握了关键技术,建立了数控开发、生产基地,培养了一批数控人才,初步形成了自己的数控产业,也带动了机电控制与传动控制技术的发展。同时,具有中国特色的经济型数控系统经过这些年来的发展,产品的性能和可靠性有了较大的提高,逐渐被用户认可。
      国外数控系统技术发展的总体发展趋势是:新一代数控系统向PC化和开放式体系结构方向发展;驱动装置向交流、数字化方向发展;增强通信功能,向网络化发展;数控系统在控制性能上向智能化发展。
      进入21世纪,人类社会将逐步进入知识经济时代,知识将成为科技和生产发展的资本与动力,而机床工业,作为机器制造业、工业以至整个国民经济发展的装备部门,毫无疑问,其战略性重要地位、受重视程度,也将更加鲜明突出。
      智能化、开放性、网络化、信息化成为未来数控系统和数控机床发展的主要趋势:向高速、高效、高精度、高可靠性方向发展;向模块化、智能化、柔性化、网络化和集成化方向发展;向PC-based化和开放性方向发展;出现新一代数控加工工艺与装备,机械加工向虚拟制造的方向发展;信息技术(IT)与机床的结合,机电一体化先进机床将得到发展;纳米技术将形成新发展潮流,并将有新的突破;节能环保机床将加速发展,占领广大市场。
      7.工业控制网络将向有线和无线相结合方向发展
      无线局域网(Wireless LAN)技术可以非常便捷地以无线方式连接网络设备,人们可随时、随地、随意地访问网络资源,是现代数据通信系统发展的重要方向。无线局域网可以在不采用网络电缆线的情况下,提供以太网互联功能。在推动网络技术发展的同时,无线局域网也在改变着人们的生活方式。无线网通信协议通常采用IEEE802.3和802.11。802.3用于点对点方式,802.11用于一点对多点方式。无线局域网可以在普通局域网基础上通过无线Hub、无线接入站(AP)、无线网桥、无线Modem及无线网卡等来实现,以无线网卡使用最为普遍。无线局域网的未来的研究方向主要集中在安全性、移动漫游、网络管理以及与3G等其它移动通信系统之间的关系等问题上。
      在工业自动化领域,有成千上万的感应器,检测器,计算机,PLC,读卡器等设备,需要互相连接形成一个控制网络,通常这些设备提供的通信接口是RS-232或RS-485。无线局域网设备使用隔离型信号转换器,将工业设备的RS-232串口信号与无线局域网及以太网络信号相互转换,符合无线局域网IEEE 802.11b和以太网络IEEE 802.3标准,支持标准的TCP/IP网络通信协议,有效的扩展了工业设备的联网通信能力。
      计算机网络技术、无线技术以及智能传感器技术的结合,产生了“基于无线技术的网络化智能传感器”的全新概念。这种基于无线技术的网络化智能传感器使得工业现场的数据能够通过无线链路直接在网络上传输、发布和共享。无线局域网技术能够在工厂环境下,为各种智能现场设备、移动机器人以及各种自动化设备之间的通信提供高带宽的无线数据链路和灵活的网络拓扑结构,在一些特殊环境下有效地弥补了有线网络的不足,进一步完善了工业控制网络的通信性能。
      8.工业控制软件正向先进控制方向发展
      作为工控软件的一个重要组成部分,国内人机界面组态软件研制方面近几年取得了较大进展,软件和硬件相结合,为企业测、控、管一体化提供了比较完整的解决方案。在此基础上,工业控制软件将从人机界面和基本策略组态向先进控制方向发展。
      先进过程控制APC(Advanced Process Control)目前还没有严格而统一的定义。一般将基于数学模型而又必须用计算机来实现的控制算法,统称为先进过程控制策略。如:自适应控制;预测控制;鲁棒控制;智能控制(专家系统、模糊控制、神经网络)等。
      由于先进控制和优化软件可以创造巨大的经济效益,因此这些软件也身价倍增。国际上已经有几十家公司,推出了上百种先进控制和优化软件产品,在世界范围内形成了一个强大的流程工业应用软件产业。因此,开发我国具有自主知识产权的先进控制和优化软件,打破外国产品的垄断,替代进口,具有十分重要的意义。
      在未来,工业控制软件将继续向标准化、网络化、智能化和开放性发展方向。
      工业信息化是指在工业生产、管理、经营过程中,通过信息基础设施,在集成平台上,实现信息的采集、信息的传输、信息的处理以及信息的综合利用等。
      由于大力发展工业自动化是加快传统产业改造提升、提高企业整体素质、提高国家整体国力、调整工业结构、迅速搞活大中型企业的有效途径和手段,国家将继续通过实施一系列工业过程自动化高技术产业化专项,用信息化带动工业化,推动工业自动化技术的进一步发展,加强技术创新,实现产业化,解决国民经济发展面临的深层问题,进一步提高国民经济整体素质和综合国力,实现跨越式发展。
    展开全文
  • 客户端自动化技术漫谈

    千次阅读 2013-06-06 10:32:32
    客户端自动化技术漫谈 2011-03-18 16:46:23 标签:技术 客户端 自动化 休闲 漫谈 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。...
     客户端自动化技术漫谈
    2011-03-18 16:46:23
    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://baidutech.blog.51cto.com/4114344/743864

    一、 概述
    1.1 开篇语
    谈到客户端自动化,大家无疑都会想到让人又爱又恨的UI系统级自动化测试,曾经和微软的同学也聊过,即使在微软从UI进行自动化能够发现的bug也是非常有限的,并且开发和维护的代价都是需要投入大量人力才能够开展的。当然,自动化测试其实不是以发现bug为目的的,对于系统级别的自动化来说,用例的自动化回归验证显然对于自动化测试来说会更加有意义,特别在持续集成模式出来后,自动化测试的实际应用效果得到了真正的发挥。 
    开篇谈了这么多“闲话”,其实希望大家能够正确对待客户端UI系统级自动化相关的技术,把握真正自动化的目的和意义,不要过分痴迷和追求技术层面的实现,而更应该结合特定的应用场景,发挥客户端UI自动化的效果。
    本文结合之前的工作经验,从客户端UI自动化的基本原理、实现技术、框架方法简介以及具体的应用实例出发,为大家开启进行客户端UI自动化的工作的大门,希望可以为大家在开展类似工作时提供一些参考和借鉴价值。 
    1.2 客户端自动化模型 
    从之前的工作经历来看,客户端自动化的开展经历了从“UI识别和操作”,“case组织格式”、“case开发模式”、“测试框架”到最终的“持续集成”的一个过程。整个过程也体验了在自动化工作中从技术逐渐转向应用的一个进阶,尽管对于持续集成来说,单纯的UI自动化测试相比单测或者模块测试来说所占的比重较小,但是整体上来看,我们还是希望类似的系统级自动化测试或者专项的自动化执行可以和项目的实施模式相结合,在项目中真正发挥其作用,提高测试的效率。 
    其中区别于其他类别的自动化测试来说,客户端UI的识别和操作可能是客户端自动化测试中最具有特点和辨识度的一项技术内容,这个也是后面要详细介绍的客户端自动化技术和方法;在此基础之上,case组织格式、case开发模式两项内容相结合决定了如何应用UI核心自动化技术实现客户端产品业务逻辑方面的具体实施方案;至于更高层面上的内容,如测试框架和持续集成等内容和其他类别的自动化测试是通用的,在本文中不作为重点介绍,上述几个方面及其关系可以参考图一所示的内容。



    图一. UI自动化模型

    上述模型反应了系统级自动化测试工作所要考虑的几个方面的主要问题,对于客户端来说区别于其他产品的自动化工作的最大特点就是UI的识别和操作,对于更高层次的内容,层次越高可复用性就越大,因此从case开发模式开始,对于服务器端程序的自动化测试工作开展就同样具备一定的参考意义。
    本文从客户端最核心的自动化技术开始,按照自动化工作的开展思路(即图一中箭头所示的方向)将自动化的方方面面内容逐渐展开,不仅包括适用于客户端产品的特定UI自动化技术,同样包括适用于其他类别产品的case组织和开发模式相关的内容,希望以此思路来指导产品自动化工作可以顺利开展。
    二、客户端自动化技术和方法
    2.1 基本原理
    这里面所说的客户端自动化技术和方法指的就是图一中的“UI的识别的操作”环节,更加详细的描述,这部分包括的技术目标有三个方面: 
     ·UI控件的识别 
     ·UI控件的自动化操作 
     ·UI控件状态的校验 
    谈到解决UI识别和操作的最基本原理,其实就是进程间通讯(ipc),无论是哪种类型的技术或者方法,本质上都可以归结为这一模型。需要进行进程通讯的两端就是测试程序和被测程序(SUT),而自动化的过程就是实现端到端的进程间通讯,整个客户端UI自动化模型可以归结为图二所示。
     



    图二. UI自动化测试模型
    围绕这三个方面,在业界有过一些尝试,大部分内容严格地说只能作为方法,因为解决的都是部分问题或针对某类问题提供一些方法层面的东西,真正能够作为一项自动化技术的是ms从.net 3.0开始发布的UIAutomation(UIA),它提供了一整套解决UI自动化的技术方案,其中就包括解决困扰UI自动化难点的控件状态监控问题。 
    方法一:win32 handle
     ·基本原理
    这其中首当其冲的自然要数win32 sdk提供的一系列api函数,基本上来说就是基于窗口句柄(window handle)和消息的模式。概括来说,其基本原理就是通过系统标准控件消息实现在测试程序和被测程序之间的信息传递的目的。通过这种方法,对于标准控件,例如通过mfc、win32 api编写的标准windows桌面程序就可以非常轻松的实现包括控件自动操作以及状态获取的需求。 
    在具体实现方面,可以通过类似findwindow、findwindowex等函数找到window handle,因为findwindow api对于控件的识别是基于(窗口类名、窗口名)、(控件类别、控件名)的元组形式,因此,可以说基于window handle的自动化方法是通过窗口类名、窗口名、控件类名、控件名来识别和标识UI控件的,在window handle的基础之上,可以通过标准的windows消息,例如BM_CLICK、BM_DBCLICK等消息来实现诸如控制和获取等基本自动化需求,基本原理如图三所示。 
     



    图三. 基于win32 handle的自动化方法

     ·辅助工具
    对于基于win32 handle的自动化方法来说,不得不说的一款辅助工具就是spy++,通过spy++就可以捕获到桌面应用程序的各类标准控件,从而可以得到包括其窗口类名、窗口名、控件类名、控件名等信息。大家可以通过点击此链接来获取spy++程序,开始尝试了解最基本的“标准UI世界”。此外,由于spy++在捕获诸如标准windows菜单或者浮动式窗口方面的存在不足,特意开发了一个工具(其实真是目的是为后面要讲的虚拟对象服务的)供此类标准控件信息的捕获。 
    · 优缺点分析
    优点一:适用于windows标准控件的UI识别和操作 
    优点二:有很多现成的windows标准自动化库(qtp、pywinauto)都是基于该原理的 
    优点三:通过介绍hook技术,就可以很方便的通过录制回放的模式实现脚本开发 
    优点四:无需借助RD支持,就可以实现自动化 
    缺点一:对于非标准控件(自绘控件)无可奈何 
    缺点二:对于UI状态等待需要单独支持 
    方法二:MSAA & UIA
    如果我们不恰当的把win32 handle方式比喻为原始社会的话,那么MSAA和UIA对应的则是封建社会和资本主义社会。这两项技术都是微软本身做自动化所采用的方法,特别是对于UIA来说,更是一个融合了包括UI自动化所需的模式、接口以及事件通知机制,从而可以保证稳定的自动化执行过程和简单的用例开发过程。下面就分别就MSAA和UIA两项自动化方法和技术进行详细介绍。 
    【MSAA介绍和分析 】
     ·基本原理
    MSAA是Microsoft Active Accesibility的缩写,早在1997年的win95系统上就已经将MSAA包含进来。从本质上来说,MSAA技术类似dcom技术,从最初的设计来看,MSAA并不是专门为自动化测试而生的,它的出现是为了解决残疾人使用windows程序的问题,比如对于盲人来说,通过读屏器程序访问程序暴露出来的IAccessible接口,就可以获得程序的信息并转化为盲人可读的盲文或者其他信息,从而帮助盲人使用windows桌面程序。 
    对应到自动化方面,读屏器等同于自动化测试程序,被盲人使用的程序就等同于被测程序(SUT),测试程序和被测程序之间的信息交互就是通过IAccessbile接口来实现的,因此对于MSAA来说,本质上就是需要被测程序按照IAccessible接口定义将UI信息暴露出来,从而为测试程序提供访问其信息的通道(图四所示)。IAccessible接口在win32的所有标准控件上都已经实现 ,所以通过MSAA方法也可以对win32标准控件进行自动化相关的操作和状态的获取(通过辅助工具可以查看MSAA相关信息),从这个层面上来看,MSAA可以认为会覆盖到win32 handle的自动化功能。 
     



    图四 MSAA架构
    更具体的,尽管IAccessible是基于com技术,并通过进程间com服务器实现ipc,但其接口并不是标准的com接口,其获取方法不是通过传统的QueryInterface方法来获得的,具体的获取方法可以参考MSDN中关于WM_GETOBJECT的说明。概括来说,就是通过发送WM_GETOBJECT消息(具体使用可以通过调用AccessibleObjectFromWindow系统api获取)来获得IAccessible接口,从而获取或者操作UI界面控件。 
    通过IAccessible接口产品可以将独立于HWND的控件信息暴露给测试程序,从而辅助win32 handle模式获取一些自定义控件的信息,这个是win32 handle所不具备的能力,但是由于IAccessible接口仅提供了诸如访问关系、位置、名称等少量访问属性以及一些简单的操作,所以对于更加复杂的自动化需求来说,MSAA并不能很好的进行支持,更详细的IAccessible接口定义可以参考:
    http://msdn.microsoft.com/en-us/library/ms696165(v=vs.85).aspx

     ·辅助工具 
    和win32 handle模式的辅助工具一样,支持MSAA的辅助工具也很众多,其中最为流行的应该就是AccExplorer,通过AccExplorer不仅可以获得各种标准控件的属性信息,同时也可以获得诸如MSN一样自绘控件的属性信息,而MSN就可以看作是对于IAccesible接口进行了支持的一款典型客户端产品,AccExplorer就是一个基于MSAA模式的“测试程序”,更具体的信息大家可以参考:
    ‍http://msdn.microsoft.com/en-us/library/ms696165(v=vs.85).aspx

     ·优点和缺点
    优点一:在win32 handle基础上,提供了对于自定义控件的支持 
    优点二:现有很多自动化工具和实现是基于MSAA模式的 
    缺点一:IAccessible接口功能非常有限,不能满足复杂UI自动化需求 
    缺点二:自定义控件实现需要开发的支持 
    【UIA介绍和分析 】
     ·基本原理 
    UIA是UI Automation的缩写,单从字面意义上来看,UIA貌似就和UI自动化测试就有着不可分割的关系,而事实也正是如此。相对于win32 handle、MSAA来说,UIA是专门为了自动化而生的产物。在这里,对于UIA来说确确实实可以将其称为一项自动化技术了,因为不仅UIA在UI属性、UI操作方面都提供了良好的支持,而且对于UI自动化测试中至关重要的控件状态等待和同步机制也提供了很好的支持。更详细的信息可以参考:
    ‍http://msdn.microsoft.com/en-us/library/ms753107.aspx
    http://en.wikipedia.org/wiki/Microsoft_UI_Automation#Version_history
    UIA是在MSAA的基础之上进行优化并专门为了自动化而生的技术,在.net 3.0的时候正式对外发布。通过win32 ctrl/MSAA Proxies,UIA集成了MSAA和win32 handle的功能。win7系统更是直接集成了UIA API 3.0,其中包括托管api和非托管api,可以在xp、vista、server等系统上应用。从架构上来看,UIA主要分为UIA Core、provider api、client api以及对于win32标准控件的provider实现,其中UIA core提供了整个UIA模式的核心支持(例如ipc的通讯),provider api定义了被测程序提供属性和操作方法的接口,client api提供了操作和访问基于UIA程序的控件信息的接口定义和实现(如图五所示)。从UIA的架构和实现来看,无论是多么复杂的自动化测试技术,其本质上也是通过ipc来实现的,具体到UIA上就是通过命名管道的方式实现进程之间的通讯。 
     


    图五. UIA架构:
    对于UIA来说,更为突出的一点进步就是对于事件通知机制的支持,这项技术的出现解决了长久以来困扰UI自动化稳定性的一个难题,即对于控件状态的同步和等待机制,对于最原始的做法是通过在测试代码中添加sleep硬编码实现,更为高级一些则是通过轮询机制监控控件状态,在UIA中通过事件机制来解决UI状态反馈的问题,当然在实际应用中,事件回调机制的引入会增加测试代码编码复杂度,但是类似的问题可以通过进一步封装UIA来解决。 
     ·辅助工具
    和win32 handle、MSAA模式一样,对于UIA来说,也有相关的辅助工具来进行自动化用例的开发,这里面给大家介绍一款最为常用的工具UI Spy。通过UI Spy就可以获得UIA进行自动化所需的信息,更具体的信息可以参考:
    ‍‍‍‍http://msdn.microsoft.com/en-us/library/ms727247.aspx‍
     ·优点和缺点
    优点一:支持更加丰富的客户端程序,如Win32、WinForm、WPF、Silverlight 
    优点二:提供了从控件操作、属性访问到事件机制的全面支持,解决复杂的自动化问题 
    优点三:通过proxy实现对MSAA和win32 control的全面支持,更好的兼容性 
    优点四:相对于MSAA更加丰富的UI属性访问能力 
    缺点一:对于自定义控件的支持,需要开发实现相应的provider 
    缺点二:xp、vista系统中native api的使用过于复杂,需要.net的支持 
    缺点三:UIA直接编写测试代码复杂,效率低,需要更好的封装提高测试打开开发效率 
    方法三:虚拟对象(坐标) 
     ·基本原理
    相对于MSAA、UIA等自动化技术来说,虚拟对象更准确的说是一项仅解决了非标准控件自动化操作和“部分识别”的方法。其基本原理就是在控件坐标的基础上加上了控件停靠和布局的理念。在QTP中,解决非标准控件(自绘控件)的一种方法就是“虚拟对象”(virtual object),但这种方法仅基于控件的相对坐标,对于控件所在窗口的状态发生变化的情况下,这种方法在“识别”控件时就会发生失效。除此之外,对于诸如autoit、按键精灵等自动化小工具来说,其基本原理也是基于坐标的方法,同样会存在“识别”失效的情况。对于本文所提到的虚拟对象方法来说,是一种在坐标基础上添加了控件停靠和布局的概念,它在布局的基础上,大大解决了由于控件窗口发生变化所引起的“识别”失败的情况。 
    概括来说,虚拟对象的方法分为三个阶段:
    1. 通过辅助工具捕捉虚拟对象并构造虚拟对象库 
    2. 执行阶段,根据虚拟对象信息,动态计算虚拟对象的坐标 
    3. 根据坐标对虚拟对象进行操作或者“识别”
    ‍‍

      


    图六:虚拟对象实例
    · 辅助工具 
    在基本原理中提到的虚拟对象识别工具HiUISpider,其基本实现原理类似于spy++,除了spy++中捕获具有win32 handle的窗口或者控件外,还可以通过鼠标来圈定虚拟对象所在的区域,并设置虚拟对象的停靠以及尺寸类型,从而根据上述基本原理完成虚拟对象库的建设。在基于坐标方法的自动化执行中,还可以借助autoit、按键精灵来实现部分特殊需求的自动化执行工作。 
     ·优点和缺点 
    优点一:对于自定义控件的通用解决方法,无需开发支持 
    优点二:相对于MSAA/UIA等技术,更加灵巧快捷 
    缺点一:额外的虚拟对象库建设 
    缺点二:在UI发生变化时,虚拟对象库有可能需要更新,维护代价大 
    缺点三:仅具备点击、图像识别、屏幕取词等基本操作和获取能力 
    方法四:Api Hook
     ·基本原理 
    Api Hook技术在自动化测试中也扮演了很重要的角色,其解决的主要问题是用hook的方法来获取程序中的信息,而最常见的情况就是通过api hook来获取屏幕输出的文字,即在字典软件中提到的屏幕取词技术。对于api hook来说,顾名思义就是来截获系统api的调用,通过api调用的截获就可以获得程序中隐藏的信息。以屏幕取词的实现为例,就是通过api hook来截获对于textout、drawtext、drawstring等文字输出方法的调用,从而就可以知道程序在“何时”、“何地”输出了“什么文字”,进而可以达到抓取ui上文字的效果。 
    Api Hook在具体实现上分为动态hook和静态hook两种,对于自动化测试来说用到的主要是动态hook的方法,核心的思想就是在进程启动后,通过修改目标函数的二进制镜像来实现的,常见的包括IAT Hook、Detour Hook,其中IAT(Import Adress Table)Hook的实现是通过修改导入函数表来达到截获对于某些系统api的调用,对于Detour Hook来说,则是通过直接修改目标函数地址空间的头几条指令实现跳转到Detour Function(截获后的执行入口)上的,基本原理和实现如图七所示,关于Detour Hook更详细的信息可以参考:
    http://research.microsoft.com/en-us/projects/detours/
     

     



    图七. Detour Hook基本原理
     ·辅助工具
    Api Hook可以通过微软的Detour Lib库来实现,具体可以参考这里,对于特定的屏幕取词需求就可以在DetourLib的基础上通过截取TextOut、DrawText、DrawString等系统api的调用来实现,也还可以直接使用商业的GetWord屏幕取词库来使用(当然会涉及到License问题,但较之自己编写的库要强大很多)。 
    · 优点和缺点
    优点一:可以实现对于非标准控件UI文字校验 
    优点二:借助Api Hook,可以实现部分性能测试的需求(响应时间) 
    缺点一:需要额外的开发代价,专项专用 
    缺点二:也仅是一项自动化方法,解决特定问题 
    方法五:基于图像
     ·基本原理
     
    在自动化测试中,经常会遇到图像相关的验证工作;同时对于自绘控件来说,在没有开发支持的情况下,类似于MSAA/UIA等技术完全发挥不了作用,而对于虚拟控件的方法来说,还需要一个预处理过程。其中针对图像部分的校验,就是传统的一些图像处理领域的技术,多少有些大材小用的感觉。在本文中,基于图像的方法着重介绍的就是通过图像识别技术而进行的自绘控件的自动化操作实现,即在百度质量部中已经有所应用的sikuli。 
    概括来说,Sikuli就是在可视化技术的基础上,使用图像方法实现对于自动化测试中的执行步骤的过程,对于自绘控件的识别就是通过图像识别来进行的,同时通过提供可视化的IDE环境,实现了快速的自动化用例开发过程,大大提高了自绘控件自动化能力,且自动化的实现是不依赖于开发的支持,这样对于类似第三方软件的评测来说,也提供了一个不凑的自动化实现方案。 关于Sikuli的更详细信息可以参考如下内容:
    ‍http://sikuli.org/‍
     ·辅助工具 
    对于sikuli来说,可以使用其自带的可视化IDE环境进行开发,对于大部分客户端软件的自动化执行的编写过程来说,都可以在IDE环境中通过图像截取的方法来实现,如图八所示: 
     


    图八. sikuli集成开发环境
     ·优点和缺点 
    优点一:自动化用例的编写过程可视化,入门门槛较低 
    缺点一:图像识别的效率必然影响到自动化用例的执行效率 
    缺点二:基于图像识别的自动化方法的稳定性较差,容易受到UI变化的影响 
    缺点三:也仅是一项自动化方法,解决特定问题 
    方法六:后门(自定义消息&共享内存) 
     ·基本原理
    尽管MSAA/UIA提供了一套完整的客户端UI自动化解决方案,但是在开发对于自动化的支持程度不高的产品实施起来还是困难重重的,因此还有一种简化的UIA自动化解决方案,即传说中的“后门”,这里传统的“后门”是指开发在程序中专门为了某些目的开设的访问通道,通过这些隐秘不为人知的数据访问通道,可以实现特殊的产品功能。对于自动化来说,我们可以通过后门的方式来将程序的一些界面信息暴露,当然也不局限于UI的信息,我们也可以将任意测试程序需要的信息通过后门的方式暴露给我们自己的测试程序即可以实现自动化相关的需求。 
    这里要和大家分享和总结的就是在之前工作中积累的一些开设后门的方法,概括来说包括两个方面:自定义消息和共享内存。其中消息在访问控制上的便捷是优于共享内存的方式,但是在数据量的传输方面,共享内存具备消息所不具备的大数据量信息。在将两者结合后,我们可以实现被测程序和测试程序之间的通讯。 
    概括来说,消息就是测试程序通知被测程序的一种方式,可以用来驱动被测程序的执行,或者通知被测程序将特定的UI信息更新到共享内存中。而双方之间所需要协商的就是用来通讯的协议格式,在具体实践中包含两类比较常用的方式::结构体以及xml格式。对于结构体来说,可以非常方便的进行数据的访问,对于xml来说,则具备更加灵活的特点,可以根据产品需要暴露信息的特点来选择采用和中通讯方式以及协议格式。 
    · 优点和缺点
    优点一:简化版的UIA实现方案,能够更高程度地在用例稳定性和开发介入间取得平衡 
    优点二:和UIA一样,在自定义控件的自动化测试和获取方面具备稳定的优势 
    缺点一:对于每种产品的方案以及数据交互协议需要单独设计 
    缺点二:还是需要开发同学在一定程度上给予支持 
    更多。。。
    除了上面提到的一些自动化方法或者技术外,还有一些在平时客户端自动化工作中经常会遇到的小技巧在这里也分享和总结一下: 
    · 进程外com服务器
    进程外com服务器本身就是在windows系统上的一种ipc通讯方法,对于类似MSAA/UIA等技术实现来说本质上也是基于这种方法的。本文提出进程外com服务器主要还是针对客户端产品的集成IE控件的自动化操作需求。对于现在的客户端产品来说,越来越多的会融入各种IE控件来展现诸如特定的网页信息,这个从产品的角度来看,也是互联网时代的客户端产品的特点,对于这类控件来说,使用上述所有的技术或者方法都无法搞定具体的需求,这时候就需要使用到com接口访问特定的IE控件对象来实现。 
    在具体实现上,就是通过com技术,访问到被测程序的IHtmlDocument2接口,从而操作IE控件的各种元素并获得相应的属性。现有的一些web自动化类工具要不采用的插件形式,要不就是绑定到具体的浏览器插入特定的js代码,对于类似的IE类控件就需要在com服务器的基础上实现相应的自动化操作,并提供类似于传统web自动化框架的录制回放工具,更详细的信息可以参考这里。 
     ·剪贴板
    剪贴板其实上也可以归类为一类windows系统上进程间通讯的方法。在自动化用例的开发过程中,对于某些特殊编辑控件的操作或者状态获取则可以使用剪贴板来实现,借助于系统的快捷键以及相应的系统api调用就可以很方便的实现这一类特殊方法来“山寨的实现”。 
     ·其他
    除了文中列出的一些方法外,还有很多自动化的方法以及特定的需求,诸如网络抓包,本地数据库操作等,在此不再详细介绍。 
    三、用例格式 & 开发模式 & 测试框架 & 持续集成 
    除了上述客户端自动化所需的技术外,和其他的自动化测试工作一样,客户端的自动化测试同样需要在用例格式、开发模式以及测试框架方面需要进行考量,其中测试框架、持续集成和其他模块自动化测试、web自动化测试基本上具备相同的工作开展思路,因此不在本文中详细介绍。

    3.1 用例格式
    客户端自动化用例的组织格式对于自动化用例的开发以及稳定性运行也就具有非常重要的作用,因此除了关注客户端自动化技术层面的内容外,用例组织格式也是自动化工作中需要重点考虑的内容,根据之前的整理,介绍几种比较常见的用例格式为大家提供一定的参考价值。 
    3.1.1 基于脚本/代码的格式
     ·概述
     
    最常见的自动化用例就是直接通过编写程序代码来实现的,在各种客户端自动化技术的基础上,通过直接调用相应的自动化技术来驱动被测程序的执行以及校验相应的用例执行结果是否符合预期。对于基于程序代码的自动化用例格式来说,更多选择的程序语言一般都是脚本语言,例如python、ruby、shell等,这类脚本语言在用例的开发上具备更加简单的接口以及可以扩展的机制,因此常常被选择来作为自动化用例的开发语言,并且对于类似的脚本语言一般都具备非常成熟的基础库,可以很方便的在自动化用例中进行引用。 
    除了程序语言的选择外,还需要考虑基于代码的自动化用例如何进行组织,一般可以通过类似的xUnit系列的测试框架来组织各种测试用例,从而保证用例之间的组织能够规范的按照特定的格式来进行,并且通过类似的xUnit测试框架还可以对于环境的构建、清理等工作进行合适的处理。
     


    图九. python自动化用例
     ·优缺点
    优点一:自动化用例格式简单、直接 
    优点二:自动化用例编写过程更加灵活(各种实用库、用例逻辑组织) 
    缺点一:自动化用例开发需要具备一定的技术背景 
    缺点二:在某些场景下,开发效率稍显低下 
    3.1.2 基于表格的格式
     ·概述
    在基于代码的用例格式中,曾经提到在某些场景中用例开发效率低的问题。这其中一个比较典型的场景就是针对于偏向数据处理类型的产品的自动化用例开发。对于这类产品的自动化来说,直接使用脚本开发的成本会相对较高,在这种情景下,基于表格形式的自动化用例组织是一种更合适的组织格式。基于表格形式的自动化用例的开发过程,特别是对于这一类数据驱动模式的自动化用例开发来说,实际上就是在整理和收集各种测试数据到表格形式的自动化用例中。 
    除了数据驱动模式的自动化用例开发可以采用表格形式来组织自动化用例外,对于关键字驱动的自动化用例开发过程来说,也可以通过表格形式来组织。表格中的用例内容实际上就是各种关键字(action)的列表或者集合,相对于直接基于脚本/代码的自动化用例来说,使用表格形式来组织关键字驱动的自动化用例适用于那种业务流程比较简单,没有太多分支循环结构的自动化业务流程。这其中一个比较有代表性的测试框架是google的robot框架,更详细的信息可以参考:
    http://code.google.com/p/robotframework/
     



    图十. Robot自动化用例格式

     ·优缺点
    优点一:适用于数据驱动、简单逻辑的产品自动化用例开发 
    优点二:专项专用,自动化用例开发效率比较高 
    优点三:用例的测试数据或者流程清晰明了 
    缺点一:需要额外的解释器对“表格数据”进行解析 
    缺点二:对于业务逻辑复杂的产品自动化不适用 
    3.1.3 基于自定义的格式
     ·概述
     
    在有很多情况下,经常会有按照自定义的格式进行自动化用例开发的需求。在介绍这部分自动化用例格式之前,个人会认为尽量不要为了自动化而单独进行类似用例语言解释器的开发工作。在各种脚本语言、各种文件格式已经很丰富的背景下,相信总会有一款合适的格式适合于当前产品自动化用例格式的需求。对于这部分想以具体的实例来介绍自定义的自动化测试用例,这里面比较常用的就是xml这种在现在的软件开发中应用非常广泛的标记语言。其中较为典型的应用就是STAF(Software Test Automation Framework)中的STAX服务中的自动化用例(任务)定义格式,对于xml格式的自动化用例格式来说可读性会比较差,所以一般都会有对应的xml解析工具来辅助自动化用例的编写以及开发工作。更详细的信息可以参考:
    http://staf.sourceforge.net/

     ·优缺点
    基于表格形式的自动化用例可以看作一种特殊的自定义用例格式,因此表格形式的自动化用例格式的优缺点也适用于自定义格式的自动化用例格式。 
    · 实例
    STAF自动化测试框架中的STAX服务及其任务配置;
    3.1.4 其他 格式
    除了上述几种自动化用例组织格式外,还有很多商业自动化用例解决方案,往往它们自己都会提供非常丰富的IDE环境,可视化自动化用例的信息。同时结合IDE的良好的用户操作接口,可以方便整个自动化用例的开发过程,但是这一类自动化用例来说,本质上也离不开上述几种自动化用例格式。例如QTP(Quick Test Professional)中展现的自动化用例,实际上在IDE后面隐藏的就是VBS直接编写的自动化脚本,在此不再详细介绍。 
    3.2 开发模式 
    自动化的开发模式往往和自动化用例的格式相关,两者之间有着密不可分的联系。对于特定的开发模式来说也会有对应的自动化用例组织格式与之对应,同样,对于特定的自动化用例组织格式又往往和某些自动化用例的开发模式相关,本文主要介绍三个方面的开发模式,也是在客户端自动化中经常会用到的方法。 
    3.2.1 关键字驱动 (Keyword Driven)
    对于客户端产品来说,很多都是偏向业务型的产品,例如IM类、安全管理类,复杂的业务逻辑决定了在进行自动化用例开发的时候需要将一些经常会用到的执行序列封装起来进行重复性的自动化用例开发工作。而这个封装常用执行序列的过程实际上就是关键字驱动的核心。关键字驱动从一定意义上来说,和软件开发中的封装有一定相似之处。更加直白的解释关键字驱动中的关键字就是一些常用的操作执行序列的封装函数,通过这些封装,我们就可以大大提高自动化用例的开发效率。 
    在业界,例如QTP、Robot等工具或者框架的核心思想都是基于关键字驱动的框架,对于类似模式的自动化用例开发来说,核心就在于关键字的梳理、分类和开发工作上。关键字的划分往往需要对业务很熟悉的测试工程师来进行主导,并且对于关键字的数量需要进行严格控制,更多的关键字对于自动化用例开发来说未必是一件好事。 
    对于关键字驱动模式的自动化用例开发来说,与其对应的自动化组织格式可以采用直接通过脚本编写的方式来进行,除此之外,也可以采用类似的表格形式来进行关键字驱动的开发,但是对于类似采用表格形式进行关键字驱动的开发来说,业务逻辑的复杂性需要是一个重点考核的对象。因此对于表格形式的自动化用例格式来说,顺序执行是一种期待的业务流程,如果整个业务流程会涉及到复杂的分支以及循环,表格形式就很难满足类似的需求。下图显示了QTP中基于关键字驱动的界面开发UI。 
     


    图十一. QTP(Quick Test Professional)关键字驱动
    3.2.2 数据驱动

    ‍ 相对于业务逻辑比较复杂的产品来说,客户端软件也存在很大部分偏向数据处理类别的软件,例如输入法、浏览器类。对于这类产品的自动化来说,业务流程比较简单,但测试数据非常复杂,在这样一种情形下,经常会采用数据驱动的模式来进行。这样不仅可以保证用例开发的效率,同时可以将影响测试覆盖度的核心要素——测试数据真实的反应到自动化用例中从而得到很好的展现和组织。 
    与数据驱动的开发模式相关的用例组织格式一般都是表格形式,通过某些特定的解释工具以及精简的执行引擎结合就可以实现基于数据驱动模式的自动化用例开发。对于客户端产品来说,数据驱动往往会在特定场景中进行应用,比如浏览器的基础功能测试,输入法的词库测试,对于这些场景来说,其基本操作都可以归为一类,主要需要测试的就是在不同的测试数据前提下是否可以测试通过。因此采用这种数据驱动的方法比较适合进行类似性质的功能测试。除此之外,对于数据驱动模式的来说,还经常会在安全性测试中应用,例如通过数据驱动的方法,可以实现fuzzy test相关的测试,当然这部分的核心思想主要就是针对测试数据的自动生成而展开的。 
    3.3 录制回放模式
    在win32桌面程序或者web系统自动化测试中,经常还会用到的一种开发模式就是录制回放的模式。相对于关键字驱动、数据驱动的开发模式来说,录制回放的模式更加简单,入门门槛比较低,开发的效率也会大大提高。在技术实现上,录制回放的模式往往会通过hook的方式将与自动化操作相关的部分截取下来,从而可以将自动化执行部分的开发效率降低到手工执行的同时。对于基于录制、回放的开发模式来说,单纯的录制、回放并不能完全反映整个用例开发的过程,录制、回放完成后,往往还要经过手工修改录制后的自动化脚本,加入自动化校验部分才算完成整个自动化用例的开发流程。 
    在真实的应用中,录制回放模式常常作为关键字驱动、数据驱动两种模式的辅助模式出现,提高测试用例的开发效率。例如在QTP中,录制回放后的自动化脚本经过适当的抽取后,封装为常用的关键字库,从而实现快速的自动化用例开发过程。同样的,对于数据驱动来说,也可以通过录制回放的方式执行引擎部分的开发效率。 
    还有一种广义的录制回放模式,在客户端自动化中可以进行应用,即日志回放模式。其基本原理就是在程序中通过将用户的行为进行日志输出,并标识为特定类型的日志与产品的其他日志进行区分。在测试人员进行操作的同时,实际上就已经记录了之前进行的一系列操作,只要进行简单的日志解析,并对应到具体的自动化实现上,就可以很方便的对自动化执行序列进行录制的工作,从而进一步提高自动化用例的开发效率。和传统的录制回放模式相比较,基于日志的回放模式,无需其他程序的参与就可以很方便底进行自动化用例的录制工作,但是需要开发同学在产品层面进行支持。 
    通过日志回放模式,就可以实现低成本的测试用例转化工作,测试人员输出的日志实际上就是一个测试用例的执行部分,通过将这些日志统一存储和管理,就可以很方便的实现基于日志回放模式的稳定性自动化测试系统,可以解决各种复杂场景的构造问题,进一步,在产品发布阶段,通过日志回放模式也就可以收集到各家复杂的测试场景,直接应用到稳定性自动化测试过程中,这种模式无论是对于客户端产品,还是其他类别的产品来说,从基本模式上都是可以相互借鉴的。
    四、后记
    对于从UI进行系统级功能测试需要重点关注UI自动化的可测性分析,往往对于业务逻辑复杂的客户端类产品,特别涉及到复杂用户场景相关的情况下,从UI构造各种复杂的测试场景代价会远远高于自动化带来的收益;另外,如果客户端产品涉及到多源的输入(例如网络交互),我们需要首先保证所有的输入数据源都是可控的,例如对于浏览器测试中的网页数据、IM类软件的用户数据等都需要事先构造完成,否则也会导致自动化用例执行的不稳定性。 
    本文中介绍的各种自动化技术或者模式,除了实现系统级的功能自动化外,可以重点考虑在特定场景下的应用,有可能投入的成本对比收效来说会远远超出预期。例如可以考虑自动化执行部分在性能测试中的应用,或者通过日志驱动模式构建action lib,从而实现对于稳定性测试的fuzzy action等技术难点,进而搭建整个客户端的稳定性自动化测试系统。

    展开全文
  • 一、自动化技术的基础 1、 自动化名称介绍: 1>、自动化: 是一种从应用程序的内部自动控制另一个应用程序的方法。 2>、自动化对象: 指的是实现了IDispatch接口的COM对象,IDispatch接口是自动化对象的一个重要...

    一、自动化技术的基础

    1、 自动化名称介绍:

    1>、自动化: 是一种从应用程序的内部自动控制另一个应用程序的方法。

    2>、自动化对象: 指的是实现了IDispatch接口的COM对象,IDispatch接口是自动化对象的一个重要标志。因此,可以通过QuereyInterface()函数查询组件是否包含此接口,来确定该组件是否是自动化对象。自动化对象包括属性和方法,其属性只能被读取不能被写入。

    3>、自动化组件:除了定义自动化对象外,还将内部可编程对象展现给自动化客户,而自动化客户则对这些暴露的自动化对象进行操作。

    4>、早期连接/接口(early binding):早期连接是指对接口方法的所有调用在编译时检查参数是否正确;

    5>、后期连接/Variants (late binding):后期连接指连接意味着方法调用直到运行时才被实现;Variant不是对象指针;对象的调用方法是后期连接;编写快速、简单的客户应用程序不用费力去输入一个类型库;

    6>、派遣接口(DispInterface) :在接口和Variant中间的某个地方就是派遣接口;与接口有很多类似; 只是方便客户而设定的; 并没有在服务器上实现派遣接口;是服务器上实现了接口;假设服务器的COM对象也支持IDispatch接口,客户应用程序可以使用Variants或派遣接口;

    7>、双重接口(Dual Interface):支持早期连接(接口)和后期连接(Variants);使用delphi创建的任何任何自动化服务器将自动支持双重接口;

     

    2、使用自动化技术的目的:

    1>、使用自动化技术的一个主要目的就是对COM的一些底层操作进行简化,包括自动化组件(用于定义自动化对象)和自动化客户(用于使用自动化对象)两方面的内容。

    2>、通过自动化操作类型库。

    3>、从应用程序的内部自动控制另一个应用程序的方法。

    4>、客户通过使用接口、Variants派遣接口和双重接口创建并使用自动化服务器;

    二、IDispatch接口:自动化对象的标志

    1、IDispatch接口的定义:

    IDispatch接口直接从IUnknown接口派生,接口定义如下:

    interface IDispatch : IUnknown
    {
     virtual HRESULT GetTypeInfoCount(UINT* pctinfo) = 0;
     virtual HRESULT GetTypeInfo(UINT itinfo, LCID lcid, ITypeInfo** pptinfo) = 0;
     virtual HRESULT GetIDsOfNames (REFIID riid, LPOLESTR* rgszNames, UINT cNames, LCID lcid, DISPID* rgdispid) = 0;
     virtual HRESULT Invoke(DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARMS* pdispparams, VARIANT* pvarResult, EXCEPINFO* pexcepinfo, UINT* puArgErr ) = 0;
    }

     

    2、IDispatch接口的中的函数:

    1>、GetTypeInfoCount()成员函数:用于获取自动化组件支持的ITypeInfo接口的数目

    2>、GetTypeInfo()成员函数:用于获取指针ITypeInfo接口的指针,通过该指针将能够判断自动化服务程序所提供的自动化支持。

    3>、GetIDsOfNames()成员函数:将读取一个函数的名称并返回其调度ID(DISPID),DISPID只是一个long类型的数据,对于IDispatch的一个特定实现,此DISPID值应该是唯一的。
    riid:为保留参数,必须设置为IID_NULL,
    rgszNames:指定了成员的函数名及其参数,
    cNames:标识了名字的个数,
    lcid:参数用于指定本地化标识,如:GetUserDefaultLCID()
    rgdispid:得到的DISPID 将保存到rgdispid中。

    4>、Invoke()成员函数:提供了访问自动化对象暴露出来的方法和属性的方法。
    dispidMember: 可以将DISPID作为函数指针数组的索引传入dispidMember参数,Invoke()将实现一组按此索引来访问的函数。
    riid和lcid: 的含义与在GetIDsOfNames()中的定义相同,分别为保留参数和本地化标识。
    WFlags: 指定了要访问的是接口的属性还是方法,
    pdispparams: 包括了方法和属性调用的参数数组、DISPID数组以及数组中参数个数等信息。
    pvarResult: 保存有返回值信息,可以使用NULL。
    pexcepinfo: 指向一个有效的异常信息结构,可以使用NULL。
    puArgErr: 参数包含了第一个产生错误的参数指针。可以使用NULL。

        通过GetIDsOfNames()和Invoke()的结合使用,将可以根据函数名称对方法和属性进行调用。这样,函数地址、AddRef()、Release()以及接口指针等细节问题将无需考虑。

     

    3、IDispatch接口的使用实例(C++代码):

    // 从ProgID得到CLSID
    wchar_t progid[] = L"MSCAL.Calendar.7";
    CLSID clsid;
    if (FAILED(::CLSIDFromProgID(progid, &clsid)))// Calendar组件的ProgID转换为CLSID
     return;
    // 得到IDispatch接口指针
    IDispatch* pIDispatch = NULL;

    //创建CLSID相应的组件并从输出IDispatch接口的指针
    if (FAILED(::CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER, IID_IDispatch, (void**)&pIDispatch)))
     return;
    // 得到DISPID
    DISPID dispid;
    OLECHAR* func = L"Today";
    if (FAILED(pIDispatch->GetIDsOfNames(IID_NULL, &func, 1, GetUserDefaultLCID(), &dispid)))
     return;
    // 通过DISPID使用Today方法
    DISPPARAMS dispparams = {NULL};
    if (FAILED(pIDispatch->Invoke(dispid, IID_NULL, GetUserDefaultLCID(), DISPATCH_METHOD, &dispparams, NULL, NULL, NULL)))
     return;
    // 将日期移动到今天
    AfxMessageBox("日期成功移动到今天");

        这段代码使用的是Calendar组件,并通过IDispatch接口完成对Today()方法的调用。CLSIDFromProgID()将Calendar组件的ProgID转换为CLSID,并以此CLSID和IID_IDispatch作为参数去调用CoCreateInstance()以得到IDispatch接口指针。通过其成员函数GetIDsOfNames()得到将要调用的Today方法的DISPID,最后使用Invoke()成员函数执行此方法。


    三、获取自动化服务器COM对象的方法

    1、自动化服务器

    1>、在本身应作为独立服务器应用程序的情况下,使用进程外自动化服务器非常好;

    2>、自动服务器中的所有方法必须返回一个HResult,暗示是成功还是失败;
    3>、所有其他参数必须在out参数中返回;

    4>、访问自动化服务器的方法:通过接口、派遣接口、Variants(可使用的类名,CreateOleObject)、回调接口来控制此服务器;

    l         派遣接口(DispInterface): 为事件提供了更好的支持;与VB兼容;实现事件是最兼容的方法、

    l         接口(Interface): 不与VB兼容;但速度比派遣接口稍快;

    l         回调接口(CallBack Interface):除非有极重要的原因否则不要使用;服务器做大量的工作,而刻户端不需要太多的工作;接口中定义回调方法,而不是使用派遣接口把事件送回到客户端; 回调接口在服务器中定义,但在客户中实现; 如果知道服务器和客户提供的接口,回调接口更有效;

    2、 进程内自动化服务器

        进程中的服务器是作为动态连接库(DLL)实现的,这意味着该服务器在运行时被动态地放进你的进程中。COM服务器将成为你应用中的一部分,而COM操作在应用的线程中进行。事实上,许多的COM对象都是以这种方式实现的,因为性能很好。一个COM函数调用的系统开销很小,但你可以得到COM所有的设计和重用的好处。COM自动处理载入和卸下该DLL。
    CreateOleObject函数:总是创建特定服务器的新实例;
    GetActiveOleObject函数: 用来获取正在内存中运行的服务器的引用;
    例如:创建并使用进程内自动化服务器;
           Procedure StartOrLinkToWord;
           var

             v: Variant;
           begin  
             try
               v := GetActiveOleObject('Word.Basic');  //判断是否Word已启动;
             except
               v := CreateOleObject('Word.Basic');   //否则启动Word; 通常自动化服务器启动是隐藏的;
               v.AppShow;   //显示Word应用程序;
             end;
             V.FileNew;  //创建一个新的文档;
             v.Insert('Automation is easy!');    
           end;

    3、 进程外自动化服务器

        一个进程外的服务器令客户和服务端的区分更明显。该类服务器作为一个独立的可执行(EXE)程序运行,因此处在一个私有的进程空间中。EXE服务器的启动和停止在Windows中服务管理器中进行(SCM)。COM接口的调用通过内部的进程通信技术来处理。服务器可以运行在本地的机器,或者在一个远程的计算机上。如果服务器在一个远程的计算机上,我们称它为“Distributed COM,分布式的COM”,或者DCOM。

    四、 自动化ADO: Microsoft最新的数据库技术;

    1、主要组件:Connection、RecordSet、Command;
    1>、Connection对象: 用于连接到一个本地或远处的数据库;连接数据库:Connection.Open();
    2>、RecordSet对象: 提供了一个记录集的连接;打开记录集:RecordSet.Open()
    3>、Command对象: 向数据库发出命令,应使用Command对象(与Parameter一起工作);
    4>、访问字段值:访问Field对象的值: RecordSet.Fields.Item[FieldNo].Value;
    5>、访问字段名称:RecordSet.Fields.Item[FieldNo].Name;
    6>、数据库错误处理:Error对象,该对象提供任何错误的详细代码;

    载自:http://blog.csdn.net/zhongguoren666/article/details/7001142

    展开全文
  • 自动化技术的发展与趋势 工业自动化技术是生产过程(连续和离散)综合自动化系统技术及其支撑工具和环境技术的总称。 工业自动化系统是一个动态广义的概念,随着科学技术的进步和生产的发展,其内涵不断扩充和深化...
  • 浅析馈线自动化技术

    千次阅读 2011-09-23 09:35:19
    浅析馈线自动化技术  2008-05-09 16:11:24| 分类: 电力系统 | 标签: |字号大中小 订阅 [摘 要]馈线自动化是配电网自动化最重要的内容之一,而控制方式的选择、馈线通信网的组建、单相接地故障的...
  • [TP-9] 自动化技术经济 TP1 自动化基础理论 TP11 自动化系统理论 TP13 自动控制理论 TP14 自动信息理论 TP15 自动模拟理论(自动仿真理论) TP17 开关电路理论 TP18 人工智能理论 TP181 自动推理、机
  • 丛书序 随着计算机、通信和消费类电子的发展,电子产品遍及了我们生活的方方面面,电子工业在全球得到了长足的发展,电子工业的发展也带动了电子设计自动化技术。电子设计自动化技术(EDA)是在电子CAD技术基础上...
  • 最近好多人问微信webview自动化的事情, 碰巧我也在追微信webview的自动化和性能分析方法. 先发出来一点我的进展给大家参考下. 此方法用于android平台, iOS请自行解决 微信的设置 用微信打开debugx5.qq.com, 这是...
  • 应用管理自动化技术 作为目标架构的基础设施层的管理功能定位而言,仅仅做好物理和虚拟机资源的调度是远远不够的,而是应当涵盖独立于具体业务应用逻辑的普遍适用的弹性基础设施之上的应用全生命周期管理功能...
  • 华为表示,“意图驱动的简智网络”(Intent-Driven Network)利用AI和自动化技术进行预测分析,并“主动优化性能”,同时网络巨头也推出全新的全闪存阵列。 2018年2月26日-3月1日在西班牙巴塞罗那举行的世界移动...
  • Appium 微信 webview 的自动化技术

    万次阅读 2017-04-17 14:06:33
    目录 ...最近好多人问微信webview自动化的事情, 碰巧我也在追微信webview的自动化和性能分析方法. 先发出来一点我的进展给大家参考下. 此方法用于android平台, iOS请自行解决微信的设置用微信打开d
  • ... 近日,在2018中国自动化产业年会的高层论坛中,中国自动化学会副理事长、上海交通大学教授李少远做题为《工业互联网与智能制造推动下的自动化技术》的报告,以下是演讲ppt,供...
  • 运维自动化是2010年开始炒得很热的一个概念,也让很多工程师、用人单位瞎激动了很久,我也跟风学过puppet和python,求职双方也经常在面试时花大量时间谈运维自动化。 但冷静下来想想,所谓自动化,只是让培训机构...
  • 程序员要学会偷懒---正确运用自动化技术 分类: 杂文 管理相关 生产力2011-04-15 00:41 474人阅读 评论(1) 收藏 举报 工作工具测试microsoft脚本vba 马云语录:  世界是由懒人来支撑的...
  • 中图分类号 自动化技术、计算机

    千次阅读 2005-08-30 21:28:00
    中图分类号 for 计算机专业,及文献标识码 T 工业技术 TP 自动化技术、计算机技术 TP3 计算技术、计算机技术 TP3-0 计算机理论与方法 TP3-05 计算机与其他学科的关系 TP30 一般性问题 TP301 理论、方法...
  • 自动化技术,控制展览会

    千次阅读 2005-12-06 14:12:00
    上个星期是汉诺威与新国际举办的自动化技术,控制展览会,规模比较大。连续看了三天的展览会,收获很大,期间还看到好多美女在台上搔首弄姿,果然好不热闹。 这次看到好多机器人公司来展览了,国内的有首钢的 ...
  • 3.自动化学报 4.计算机研究与发展 5.控制与决策 6.中国图象图形学报 7.系统仿真学报 8.计算机辅助设计与图形学学报 9.计算机应用 10.计算机科学(1) 11.计算机应用研究(1) 12.机器人 13.中文信息学报 ...
  • 2.1 对比范围 了解了QTP 是进行自动化测试的完整框架,能完成自动化测试的框架还有很多,本篇对如下框架进行一下对比。 提到自动化测试Selenium是不得不提的。Selenium是ThoughtWorks员工在业余时间开发并维护的...
  • ”在这个背景下,菜鸟研发了柔性自动化仓储系统,利用AI技术,让大量机器人在仓内协同作业,组合成易部署、易扩展、高效的全链路仓储自动化解决方案。本次从智能拣选→智能拆垛/码垛→智能分...
  • Adobe Photoshop脚本自动化技术

    千次阅读 2014-07-24 17:00:21
    Adobe Photoshop脚本自动化技术是广泛采用的一种技术,它和Adobe Photoshop插件开发不是一个东西。基于PS SDK的插件开发主要是在PS内部提供一些复杂的、高性能的图片处理工具,而PS脚本自动化技术则多用于图片的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 51,809
精华内容 20,723
关键字:

自动化技术