UI自动化测试方法、电子装置及计算机可读存储介质
技术领域
本发明涉及测试技术领域,尤其涉及一种UI自动化测试方法、电子装置及计算机可读存储介质。
背景技术
自动化测试是将以人为驱动的测试行为转化为机器执行的一种过程。业内,从设计测试用例到通过测试用例评审后,测试人员会根据测试用例中所描述的规程去一步步的执行测试,从而得到实际结果与期望结果的对比。在这个过程中,为了节省成本(如人力成本、时间成本或软硬件资源等),提高测试效率,便引入了自动化测试的概念。
传统的UI自动化测试框架采用的都是在单台机器上以单线程的形式运行,一旦测试用例积累到了一定的数量(例如上万条),一台机器执行测试用例耗时较久。再加上测试各种浏览器的兼容性,整个执行时间会成倍增加,严重影响UI自动化测试的执行效率。并且,每台机器上启动的线程数太多时还会严重影响机器性能。
业界主流的testNg框架可以支持多线程并发测试,但是由于该框架的线程不安全,使用TestNg的多线程同时启动多个浏览器之后,本该在浏览器A中的操作会跳跃到浏览器B中,从而报错,严重影响测试结果准确性。业内也有将UI自动化测试的用例分配到多台机器上去分开运行的方案,但是现有方案需要重复的去每一台机器上部署测试环境,然后将测试用例分开放到每一台机器上去执行,最后人工合并测试结果,测试用例有更新时还需要去每一台机器上更新代码,测试效率不高而且操作非常麻烦。
发明内容
有鉴于此,本发明提出一种UI自动化测试方法、电子装置及计算机可读存储介质,以解决至少一个上述技术问题。
首先,为实现上述目的,本发明提出一种UI自动化测试方法,该方法包括步骤:
建立分布式的测试集群,包括一个主节点和多个代理节点;
主节点接收测试请求并获取对应的测试用例;
根据所述测试用例进行当前测试的节点配置,包括配置所需的代理节点及各代理节点分别需要执行的测试任务;及
将所述测试用例分发到所配置的代理节点进行并发测试。
可选地,该方法还包括步骤:
当所述测试用例执行失败时,控制对应代理节点自动根据配置文件中设置的重跑次数进行失败重跑和失败用例截图。
可选地,该方法还包括步骤:
接收各代理节点测试信息并汇总输出测试报告,其中,采用extendReport对测试报告进行美化处理,且自动统计各个测试用例的运行情况、错误信息以及失败用例截图。
可选地,所述获取对应的测试用例的步骤包括:
当接收到所述测试请求后,获取客户端编写的测试用例或者从已保存的多个测试用例中查询与所述测试请求对应的测试用例。
可选地,在所述获取对应的测试用例的步骤中,针对难以定位的元素,采用图像识别技术,直接通过截图对所述元素进行定位和操作。
可选地,所述根据所述测试用例进行当前测试的节点配置的步骤包括:
主节点接收各代理节点实时或定时反馈的当前状态信息;
综合分析各代理节点的所述状态信息,分配各代理节点执行的用例数和兼容的系统、浏览器类型、并发数,从而确定分发所述测试用例的代理节点及各代理节点分别需要执行的测试任务;
当确定当前测试的节点配置后,在测试代码中设置代理节点的参数。
可选地,所述将所述测试用例分发到所配置的代理节点进行并发测试的步骤包括:
主节点从所述测试代码中确定需要执行测试用例的代理节点以及各代理节点需要执行的测试任务,并将对应的测试用例分发到相应的代理节点,以使每个代理节点执行被分配的测试部分。
可选地,在将所述测试用例分发到所配置的代理节点进行并发测试的步骤中,所述测试代码仅在主节点上运行,代理节点执行被分发到的测试用例时,启动jdk和Selenium-Server-standalone的代理服务。
此外,为实现上述目的,本发明还提供一种电子装置,包括存储器、处理器,所述存储器上存储有可在所述处理器上运行的UI自动化测试系统,所述UI自动化测试系统被所述处理器执行时实现如上述的UI自动化测试方法的步骤。
进一步地,为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质存储有UI自动化测试系统,所述UI自动化测试系统可被至少一个处理器执行,以使所述至少一个处理器执行如上述的UI自动化测试方法的步骤。
相较于现有技术,本发明所提出的UI自动化测试方法、电子装置及计算机可读存储介质,针对UI自动化测试,通过主节点加多个代理节点的分布式测试集群设置,可自由配置测试用例到需要运行的代理节点设备上去执行,从而实现线程安全的多线程并发测试,测试用例执行时不会相互干扰。
附图说明
图1是本发明电子装置一可选的硬件架构的示意图;
图2是本发明UI自动化测试系统第一实施例的程序模块示意图;
图3是本发明UI自动化测试系统第二实施例的程序模块示意图;
图4是本发明UI自动化测试系统第三实施例的程序模块示意图;
图5是本发明UI自动化测试方法第一实施例的流程示意图;
图6是本发明UI自动化测试方法第二实施例的流程示意图;
图7是本发明UI自动化测试方法第三实施例的流程示意图;
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,在本发明中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
参阅图1所示,是本发明电子装置2一可选的硬件架构的示意图。
本实施例中,所述电子装置2可包括,但不仅限于,可通过系统总线相互通信连接存储器11、处理器12、网络接口13。需要指出的是,图1仅示出了具有组件11-13的电子装置2,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。
其中,所述电子装置2可以是服务器,也可以是PC(Personal Computer,个人电脑),也可以是智能手机、平板电脑、掌上电脑、便携计算机等终端设备。所述服务器可以是机架式服务器、刀片式服务器、塔式服务器或机柜式服务器等计算设备,并且可以是独立的服务器,也可以是多个服务器所组成的服务器集群。
所述存储器11至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,所述存储器11可以是所述电子装置2的内部存储单元,例如该电子装置2的硬盘或内存。在另一些实施例中,所述存储器11也可以是所述电子装置2的外部存储设备,例如该电子装置2上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。当然,所述存储器11还可以既包括所述电子装置2的内部存储单元也包括其外部存储设备。本实施例中,所述存储器11通常用于存储安装于所述电子装置2的操作系统和各类应用软件,例如UI自动化测试系统200的程序代码等。此外,所述存储器11还可以用于暂时地存储已经输出或者将要输出的各类数据。
所述处理器12在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器12通常用于控制所述电子装置2的总体操作。本实施例中,所述处理器12用于运行所述存储器11中存储的程序代码或者处理数据,例如运行所述的UI自动化测试系统200等。
所述网络接口13可包括无线网络接口或有线网络接口,该网络接口13通常用于在所述电子装置2与其他电子设备之间建立通信连接。
至此,己经详细介绍了本发明相关设备的硬件结构和功能。下面,将基于上述介绍提出本发明的各个实施例。
首先,本发明提出一种UI自动化测试系统200。
参阅图2所示,是本发明UI自动化测试系统200第一实施例的程序模块图。
本实施例中,所述UI自动化测试系统200包括一系列的存储于存储器11上的计算机程序指令,当该计算机程序指令被处理器12执行时,可以实现本发明各实施例的UI自动化测试操作。在一些实施例中,基于该计算机程序指令各部分所实现的特定的操作,UI自动化测试系统200可以被划分为一个或多个模块。例如,在图2中,所述UI自动化测试系统200可以被分割成建立模块201、获取模块202、配置模块203、分发模块204。其中:
所述建立模块201,用于建立分布式的测试集群。
具体地,所述分布式测试集群由一个主节点(hub)和若干个代理节点(node)组成。所述主节点(电子装置2)用于管理各个代理节点的注册信息和状态信息,并且接收远程客户端测试代码的请求调用,然后将请求的测试命令转发给代理节点来执行。所述分布式测试集群可以支持将测试用例分配到多台设备上进行拓展,从一个控制点(主节点)集中管理多个(代理节点)测试环境,非常容易将UI自动化测试运行在广阔的浏览器和操作系统上。并且,所述分布式测试集群易于维护,允许自定义实现测试的方法,可以更加充分的利用虚拟基础设施。
所述分布式测试集群的环境搭建,不需要每一台设备上都去搭建复杂的软件环境,只需要在设备上安装jdk,然后启动一个bat的命令即可;不需要去每台设备上安装maven、IDE、testNg等插件,然后一个个去配置环境变量、插件的设置项;也不用每次测试代码有更新时还要去设备上一个个更新代码。主要软硬件要求为:主节点的设备可以是任何系统(如linux、ubuntu、windows),且需要安装jdk环境以及代码运行环境;代理节点的设备为需要执行UI自动化测试的设备,一般是有操作界面的(如mac、windows、ubuntu),需要安装jdk环境以及启动webdriver程序和代理程序,代理程序中主要是设置浏览器的参数,例如支持启动的浏览器类型和数量、浏览器版本和操作系统。
值得注意的时,当所述分布式测试集群增加或减少节点设备时,不需要重复搭建环境,只需要在代码中增加或减少对应的IP配置即可。例如,当所述分布式测试集群增加一台节点设备时,只需要在该设备上安装jdk,执行bat命令行启动一个端口,然后在测试代码中加上该设备的ip和端口号即可;如果是减少一台节点设备,测试代码中不做处理也不会有影响,在连接不上对应ip的端口时,会默认不分配该节点设备。
所述获取模块202,用于接收测试请求并获取对应的测试用例。
具体地,当需要进行UI自动化测试时,需要编写相应的测试用例发送给主节点,或者从之前保存的多个测试用例中查询与该次测试相应的测试用例。主节点接收到UI自动化测试的测试请求后,获取编写好的或者查询到的与该测试请求对应的测试用例。
在本实施例中,所述测试用例分为一般的测试用例和特殊场景的测试用例。
一般的测试用例采用pageFactory模式分层编写,自下而上分别为元素定位层、页面操作层、测试用例层,通过页面元素和逻辑业务操作的分离,使得页面元素得到更好的维护。且相较于传统的元素定位写很长的一串,使用pageFactory只需要一个注解即可,且可以使用缓存,使得二次执行时速度更快。
特殊场景的测试用例是采用图像识别技术(例如sikuli),直接通过截图(例如,点击百度的搜索按钮,若通过代码定位需要找到搜索按钮的id或name、xpath等,而通过sikuli技术可以只对搜索按钮进行截图即可定位)对难以定位的元素进行操作(因为有些产品通过前端元素定位起来会很不稳定或者元素是动态的,每次都不一样,这种情况下通过元素定位就很困难),页面会根据截图去匹配需要使用的区块,对其执行对应的操作,更大限度的丰富测试场景。
所述配置模块203,用于根据所述测试用例进行当前测试的节点配置。
具体地,每个代理节点可以实时或定时向主节点反馈当前的机器性能和负载情况等状态信息。当量化所需要进行的UI自动化测试的测试任务后,主节点可以综合分析各代理节点的状态信息,合理分配执行的用例数和兼容的系统、浏览器类型、并发数。也就是说,可以确定是否需要分发代理节点执行或分发哪些代理节点执行哪些测试任务,以及哪些任务需要并发执行。当确定当前测试的节点配置后,在测试代码中设置代理节点的参数。
在其他实施例中,也可以由客户端用户根据各个代理节点的状态信息确定当前测试的节点配置,然后手动在测试代码中设置代理节点的参数。
所述分发模块204,用于将测试用例分发到所配置的代理节点进行并发测试。
具体地,主节点可以从测试代码中确定需要执行测试任务的代理节点以及每个代理节点需要执行的测试部分,然后将对应的测试用例分发到相应的代理节点,以使每个代理节点执行被分配的测试部分。主节点通过Selenium-Server-standalone的代理服务,将请求的浏览器操作命令转发至不同代理节点设备上的server服务,间接的操作浏览器。
在本实施例中,各个代理节点不需要运行测试代码,测试代码只需要在主节点一台设备上运行即可,可自由配置测试用例到需要运行的代理节点设备上去执行。
代理节点根据接收到的命令执行被分发到的测试用例时,启动jdk和Selenium-Server-standalone的代理服务即可,不需要进行额外的设置。
本实施例同时支持在各个代理节点上进行并发执行测试,且其支持的多线程是线程安全的,这也就意味着当同时启用多个相同或不同的浏览器时,他们之间是相互隔离的,不会产生浏览器A中的操作跳跃到其他浏览器中去执行的情况,从而保证严格意义上安全的并发测试。
另外,本实施例支持不同操作系统(windows、mac、ubuntu等)和不同浏览器类型(IE、chrome、firefox、safari等)的自由组合,并对该组合进行分布式多线程运行测试。由于不同浏览器类型和不同浏览器版本对应的驱动是不一样的,所以代理节点的操作系统不同、浏览器不同时,需要单独配置对应浏览器和浏览器版本的驱动。
本实施例提供的UI自动化测试系统,针对UI自动化测试,通过主节点加多个代理节点的分布式测试集群设置,只需要在主节点中运行测试代码,可自由配置测试用例到需要运行的代理节点设备上去执行,从而实现线程安全的多线程并发测试,测试用例执行时不会相互干扰。本实施例支持分布式部署,增加或减少节点设备时,不需要重复搭建环境,且支持不同操作系统和不同浏览器类型的自由组合测试。
参阅图3所示,是本发明UI自动化测试系统200第二实施例的程序模块图。本实施例中,所述的UI自动化测试系统200除了包括第一实施例中的所述建立模块201、获取模块202、配置模块203、分发模块204之外,还包括控制模块205。
所述控制模块205,用于当测试用例执行失败时,控制对应代理节点自动进行失败重跑和失败用例截图。
具体地,由于UI自动化测试的影响因素较多,测试执行中会出现一些异常的情况导致测试用例执行失败,通过在框架的配置文件中设置失败用例重跑次数,执行中失败的测试用例会根据设置的次数进行重新运行。重新运行成功则设置为用例通过,否则设置为用例失败。失败的用例会通过监听器在失败的步骤页面进行截图,最终汇总到测试报告中。
另外,由于同时运行多线程会导致日志收集时非常杂乱,本实施例还将运行日志和测试报告进行结合,每一个测试用例的运行日志信息会被完整的保存在测试报告中,便于出现问题时的定位。
代理节点对本地的测试信息进行收集汇总,包括测试结果、失败用例截图和运行日志等,然后在本地的测试部分完成后发送至主节点。
本实施例提供的UI自动化测试系统,针对UI自动化测试,通过主节点加多个代理节点的分布式测试集群设置,只需要在主节点中运行测试代码,可自由配置测试用例到需要运行的代理节点设备上去执行,从而实现线程安全的多线程并发测试,测试用例执行时不会相互干扰。本实施例支持分布式部署,增加或减少节点设备时,不需要重复搭建环境,且支持不同操作系统和不同浏览器类型的自由组合测试。本实施例还支持在测试用例失败后根据已设置的重跑次数自动重新执行,并进行失败测试用例截图。
参阅图4所示,是本发明UI自动化测试系统200第三实施例的程序模块图。本实施例中,所述的UI自动化测试系统200除了包括第二实施例中的所述建立模块201、获取模块202、配置模块203、分发模块204、控制模块205之外,还包括汇总模块206。
所述汇总模块206,用于接收各代理节点测试信息并汇总输出测试报告。
具体地,主节点接收到各个代理节点针对当前测试的测试信息后,对测试结果、失败用例截图和运行日志等信息进行汇总,生成完整的测试报告。
由于TestNG自带的测试报告不是很易于观看,本实施例使用extendReport对测试报告进行了美化处理。在测试用例执行完成之后就会自动生成非常美观的html测试报告,且带有自动统计功能,报告中可以非常方便地统计各系统模块测试用例的运行情况、错误信息以及失败用例截图。
本实施例提供的UI自动化测试系统,针对UI自动化测试,通过主节点加多个代理节点的分布式测试集群设置,只需要在主节点中运行测试代码,可自由配置测试用例到需要运行的代理节点设备上去执行,从而实现线程安全的多线程并发测试,测试用例执行时不会相互干扰。本实施例支持分布式部署,增加或减少节点设备时,不需要重复搭建环境,且支持不同操作系统和不同浏览器类型的自由组合测试。本实施例还支持在测试用例失败后根据已设置的重跑次数自动重新执行;支持自动收集所有测试用例执行日志和结果到主节点设备上,自动生成测试报告,测试报告支持失败测试用例截图功能;支持通过截图的方式对难以定位的元素进行操作,更大限度的丰富测试场景。
此外,本发明还提出一种UI自动化测试方法。
参阅图5所示,是本发明UI自动化测试方法第一实施例的流程示意图。在本实施例中,根据不同的需求,图5所示的流程图中的步骤的执行顺序可以改变,某些步骤可以省略。该方法包括:
步骤S500,建立分布式的测试集群。
具体地,所述分布式测试集群由一个主节点(hub)和若干个代理节点(node)组成。所述主节点(电子装置2)用于管理各个代理节点的注册信息和状态信息,并且接收远程客户端测试代码的请求调用,然后将请求的测试命令转发给代理节点来执行。所述分布式测试集群可以支持将测试用例分配到多台设备上进行拓展,从一个控制点(主节点)集中管理多个(代理节点)测试环境,非常容易将UI自动化测试运行在广阔的浏览器和操作系统上。并且,所述分布式测试集群易于维护,允许自定义实现测试的方法,可以更加充分的利用虚拟基础设施。
所述分布式测试集群的环境搭建,不需要每一台设备上都去搭建复杂的软件环境,只需要在设备上安装jdk,然后启动一个bat的命令即可;不需要去每台设备上安装maven、IDE、testNg等插件,然后一个个去配置环境变量、插件的设置项;也不用每次测试代码有更新时还要去设备上一个个更新代码。主要软硬件要求为:主节点的设备可以是任何系统(如linux、ubuntu、windows),且需要安装jdk环境以及代码运行环境;代理节点的设备为需要执行UI自动化测试的设备,一般是有操作界面的(如mac、windows、ubuntu),需要安装jdk环境以及启动webdriver程序和代理程序,代理程序中主要是设置浏览器的参数,例如支持启动的浏览器类型和数量、浏览器版本和操作系统。
值得注意的时,当所述分布式测试集群增加或减少节点设备时,不需要重复搭建环境,只需要在代码中增加或减少对应的IP配置即可。例如,当所述分布式测试集群增加一台节点设备时,只需要在该设备上安装jdk,执行bat命令行启动一个端口,然后在测试代码中加上该设备的ip和端口号即可;如果是减少一台节点设备,测试代码中不做处理也不会有影响,在连接不上对应ip的端口时,会默认不分配该节点设备。
步骤S502,接收测试请求并获取对应的测试用例。
具体地,当需要进行UI自动化测试时,需要编写相应的测试用例发送给主节点,或者从之前保存的多个测试用例中查询与该次测试相应的测试用例。主节点接收到UI自动化测试的测试请求后,获取编写好的或者查询到的与该测试请求对应的测试用例。
在本实施例中,所述测试用例分为一般的测试用例和特殊场景的测试用例。
一般的测试用例采用pageFactory模式分层编写,自下而上分别为元素定位层、页面操作层、测试用例层,通过页面元素和逻辑业务操作的分离,使得页面元素得到更好的维护。且相较于传统的元素定位写很长的一串,使用pageFactory只需要一个注解即可,且可以使用缓存,使得二次执行时速度更快。
特殊场景的测试用例是采用图像识别技术(例如sikuli),直接通过截图(例如,点击百度的搜索按钮,若通过代码定位需要找到搜索按钮的id或name、xpath等,而通过sikuli技术可以只对搜索按钮进行截图即可定位)对难以定位的元素进行操作(因为有些产品通过前端元素定位起来会很不稳定或者元素是动态的,每次都不一样,这种情况下通过元素定位就很困难),页面会根据截图去匹配需要使用的区块,对其执行对应的操作,更大限度的丰富测试场景。
步骤S504,根据所述测试用例进行当前测试的节点配置。
具体地,每个代理节点可以实时或定时向主节点反馈当前的机器性能和负载情况等状态信息。当量化所需要进行的UI自动化测试的测试任务后,主节点可以综合分析各代理节点的状态信息,合理分配执行的用例数和兼容的系统、浏览器类型、并发数。也就是说,可以确定是否需要分发代理节点执行或分发哪些代理节点执行哪些测试任务,以及哪些任务需要并发执行。当确定当前测试的节点配置后,在测试代码中设置代理节点的参数。
在其他实施例中,也可以由客户端用户根据各个代理节点的状态信息确定当前测试的节点配置,然后手动在测试代码中设置代理节点的参数。
步骤S506,将测试用例分发到所配置的代理节点进行并发测试。
具体地,主节点可以从测试代码中确定需要执行测试任务的代理节点以及每个代理节点需要执行的测试部分,然后将对应的测试用例分发到相应的代理节点,以使每个代理节点执行被分配的测试部分。主节点通过Selenium-Server-standalone的代理服务,将请求的浏览器操作命令转发至不同代理节点设备上的server服务,间接的操作浏览器。
在本实施例中,各个代理节点不需要运行测试代码,测试代码只需要在主节点一台设备上运行即可,可自由配置测试用例到需要运行的代理节点设备上去执行。
代理节点根据接收到的命令执行被分发到的测试用例时,启动jdk和Selenium-Server-standalone的代理服务即可,不需要进行额外的设置。
本实施例同时支持在各个代理节点上进行并发执行测试,且其支持的多线程是线程安全的,这也就意味着当同时启用多个相同或不同的浏览器时,他们之间是相互隔离的,不会产生浏览器A中的操作跳跃到其他浏览器中去执行的情况,从而保证严格意义上安全的并发测试。
另外,本实施例支持不同操作系统(windows、mac、ubuntu等)和不同浏览器类型(IE、chrome、firefox、safari等)的自由组合,并对该组合进行分布式多线程运行测试。由于不同浏览器类型和不同浏览器版本对应的驱动是不一样的,所以代理节点的操作系统不同、浏览器不同时,需要单独配置对应浏览器和浏览器版本的驱动。
本实施例提供的UI自动化测试方法,针对UI自动化测试,通过主节点加多个代理节点的分布式测试集群设置,只需要在主节点中运行测试代码,可自由配置测试用例到需要运行的代理节点设备上去执行,从而实现线程安全的多线程并发测试,测试用例执行时不会相互干扰。本实施例支持分布式部署,增加或减少节点设备时,不需要重复搭建环境,且支持不同操作系统和不同浏览器类型的自由组合测试。
如图6所示,是本发明UI自动化测试方法的第二实施例的流程示意图。本实施例中,所述UI自动化测试方法的步骤S600-S606与第一实施例的步骤S500-S506相类似,区别在于该方法还包括步骤S608。
该方法包括以下步骤:
步骤S600,建立分布式的测试集群。
具体地,所述分布式测试集群由一个主节点(hub)和若干个代理节点(node)组成。所述主节点(电子装置2)用于管理各个代理节点的注册信息和状态信息,并且接收远程客户端测试代码的请求调用,然后将请求的测试命令转发给代理节点来执行。所述分布式测试集群可以支持将测试用例分配到多台设备上进行拓展,从一个控制点(主节点)集中管理多个(代理节点)测试环境,非常容易将UI自动化测试运行在广阔的浏览器和操作系统上。并且,所述分布式测试集群易于维护,允许自定义实现测试的方法,可以更加充分的利用虚拟基础设施。
所述分布式测试集群的环境搭建,不需要每一台设备上都去搭建复杂的软件环境,只需要在设备上安装jdk,然后启动一个bat的命令即可;不需要去每台设备上安装maven、IDE、testNg等插件,然后一个个去配置环境变量、插件的设置项;也不用每次测试代码有更新时还要去设备上一个个更新代码。主要软硬件要求为:主节点的设备可以是任何系统(如linux、ubuntu、windows),且需要安装jdk环境以及代码运行环境;代理节点的设备为需要执行UI自动化测试的设备,一般是有操作界面的(如mac、windows、ubuntu),需要安装jdk环境以及启动webdriver程序和代理程序,代理程序中主要是设置浏览器的参数,例如支持启动的浏览器类型和数量、浏览器版本和操作系统。
值得注意的时,当所述分布式测试集群增加或减少节点设备时,不需要重复搭建环境,只需要在代码中增加或减少对应的IP配置即可。例如,当所述分布式测试集群增加一台节点设备时,只需要在该设备上安装jdk,执行bat命令行启动一个端口,然后在测试代码中加上该设备的ip和端口号即可;如果是减少一台节点设备,测试代码中不做处理也不会有影响,在连接不上对应ip的端口时,会默认不分配该节点设备。
步骤S602,接收测试请求并获取对应的测试用例。
具体地,当需要进行UI自动化测试时,需要编写相应的测试用例发送给主节点,或者从之前保存的多个测试用例中查询与该次测试相应的测试用例。主节点接收到UI自动化测试的测试请求后,获取编写好的或者查询到的与该测试请求对应的测试用例。
在本实施例中,所述测试用例分为一般的测试用例和特殊场景的测试用例。
一般的测试用例采用pageFactory模式分层编写,自下而上分别为元素定位层、页面操作层、测试用例层,通过页面元素和逻辑业务操作的分离,使得页面元素得到更好的维护。且相较于传统的元素定位写很长的一串,使用pageFactory只需要一个注解即可,且可以使用缓存,使得二次执行时速度更快。
特殊场景的测试用例是采用图像识别技术(例如sikuli),直接通过截图(例如,点击百度的搜索按钮,若通过代码定位需要找到搜索按钮的id或name、xpath等,而通过sikuli技术可以只对搜索按钮进行截图即可定位)对难以定位的元素进行操作(因为有些产品通过前端元素定位起来会很不稳定或者元素是动态的,每次都不一样,这种情况下通过元素定位就很困难),页面会根据截图去匹配需要使用的区块,对其执行对应的操作,更大限度的丰富测试场景。
步骤S604,根据所述测试用例进行当前测试的节点配置。
具体地,每个代理节点可以实时或定时向主节点反馈当前的机器性能和负载情况等状态信息。当量化所需要进行的UI自动化测试的测试任务后,主节点可以综合分析各代理节点的状态信息,合理分配执行的用例数和兼容的系统、浏览器类型、并发数。也就是说,可以确定是否需要分发代理节点执行或分发哪些代理节点执行哪些测试任务,以及哪些任务需要并发执行。当确定当前测试的节点配置后,在测试代码中设置代理节点的参数。
在其他实施例中,也可以由客户端用户根据各个代理节点的状态信息确定当前测试的节点配置,然后手动在测试代码中设置代理节点的参数。
步骤S606,将测试用例分发到所配置的代理节点进行并发测试。
具体地,主节点可以从测试代码中确定需要执行测试任务的代理节点以及每个代理节点需要执行的测试部分,然后将对应的测试用例分发到相应的代理节点,以使每个代理节点执行被分配的测试部分。主节点通过Selenium-Server-standalone的代理服务,将请求的浏览器操作命令转发至不同代理节点设备上的server服务,间接的操作浏览器。
在本实施例中,各个代理节点不需要运行测试代码,测试代码只需要在主节点一台设备上运行即可,可自由配置测试用例到需要运行的代理节点设备上去执行。
代理节点根据接收到的命令执行被分发到的测试用例时,启动jdk和Selenium-Server-standalone的代理服务即可,不需要进行额外的设置。
本实施例同时支持在各个代理节点上进行并发执行测试,且其支持的多线程是线程安全的,这也就意味着当同时启用多个相同或不同的浏览器时,他们之间是相互隔离的,不会产生浏览器A中的操作跳跃到其他浏览器中去执行的情况,从而保证严格意义上安全的并发测试。
另外,本实施例支持不同操作系统(windows、mac、ubuntu等)和不同浏览器类型(IE、chrome、firefox、safari等)的自由组合,并对该组合进行分布式多线程运行测试。由于不同浏览器类型和不同浏览器版本对应的驱动是不一样的,所以代理节点的操作系统不同、浏览器不同时,需要单独配置对应浏览器和浏览器版本的驱动。
步骤S608,当测试用例执行失败时,控制对应代理节点自动进行失败重跑和失败用例截图。
具体地,由于UI自动化测试的影响因素较多,测试执行中会出现一些异常的情况导致测试用例执行失败,通过在框架的配置文件中设置失败用例重跑次数,执行中失败的测试用例会根据设置的次数进行重新运行。重新运行成功则设置为用例通过,否则设置为用例失败。失败的用例会通过监听器在失败的步骤页面进行截图,最终汇总到测试报告中。
另外,由于同时运行多线程会导致日志收集时非常杂乱,本实施例还将运行日志和测试报告进行结合,每一个测试用例的运行日志信息会被完整的保存在测试报告中,便于出现问题时的定位。
代理节点对本地的测试信息进行收集汇总,包括测试结果、失败用例截图和运行日志等,然后在本地的测试部分完成后发送至主节点。
本实施例提供的UI自动化测试方法,针对UI自动化测试,通过主节点加多个代理节点的分布式测试集群设置,只需要在主节点中运行测试代码,可自由配置测试用例到需要运行的代理节点设备上去执行,从而实现线程安全的多线程并发测试,测试用例执行时不会相互干扰。本实施例支持分布式部署,增加或减少节点设备时,不需要重复搭建环境,且支持不同操作系统和不同浏览器类型的自由组合测试。本实施例还支持在测试用例失败后根据已设置的重跑次数自动重新执行,并进行失败测试用例截图。
如图7所示,是本发明UI自动化测试方法的第三实施例的流程示意图。本实施例中,所述UI自动化测试方法的步骤S700-S708与第二实施例的步骤S600-S608相类似,区别在于该方法还包括步骤S710。
该方法包括以下步骤:
步骤S700,建立分布式的测试集群。
具体地,所述分布式测试集群由一个主节点(hub)和若干个代理节点(node)组成。所述主节点(电子装置2)用于管理各个代理节点的注册信息和状态信息,并且接收远程客户端测试代码的请求调用,然后将请求的测试命令转发给代理节点来执行。所述分布式测试集群可以支持将测试用例分配到多台设备上进行拓展,从一个控制点(主节点)集中管理多个(代理节点)测试环境,非常容易将UI自动化测试运行在广阔的浏览器和操作系统上。并且,所述分布式测试集群易于维护,允许自定义实现测试的方法,可以更加充分的利用虚拟基础设施。
所述分布式测试集群的环境搭建,不需要每一台设备上都去搭建复杂的软件环境,只需要在设备上安装jdk,然后启动一个bat的命令即可;不需要去每台设备上安装maven、IDE、testNg等插件,然后一个个去配置环境变量、插件的设置项;也不用每次测试代码有更新时还要去设备上一个个更新代码。主要软硬件要求为:主节点的设备可以是任何系统(如linux、ubuntu、windows),且需要安装jdk环境以及代码运行环境;代理节点的设备为需要执行UI自动化测试的设备,一般是有操作界面的(如mac、windows、ubuntu),需要安装jdk环境以及启动webdriver程序和代理程序,代理程序中主要是设置浏览器的参数,例如支持启动的浏览器类型和数量、浏览器版本和操作系统。
值得注意的时,当所述分布式测试集群增加或减少节点设备时,不需要重复搭建环境,只需要在代码中增加或减少对应的IP配置即可。例如,当所述分布式测试集群增加一台节点设备时,只需要在该设备上安装jdk,执行bat命令行启动一个端口,然后在测试代码中加上该设备的ip和端口号即可;如果是减少一台节点设备,测试代码中不做处理也不会有影响,在连接不上对应ip的端口时,会默认不分配该节点设备。
步骤S702,接收测试请求并获取对应的测试用例。
具体地,当需要进行UI自动化测试时,需要编写相应的测试用例发送给主节点,或者从之前保存的多个测试用例中查询与该次测试相应的测试用例。主节点接收到UI自动化测试的测试请求后,获取编写好的或者查询到的与该测试请求对应的测试用例。
在本实施例中,所述测试用例分为一般的测试用例和特殊场景的测试用例。
一般的测试用例采用pageFactory模式分层编写,自下而上分别为元素定位层、页面操作层、测试用例层,通过页面元素和逻辑业务操作的分离,使得页面元素得到更好的维护。且相较于传统的元素定位写很长的一串,使用pageFactory只需要一个注解即可,且可以使用缓存,使得二次执行时速度更快。
特殊场景的测试用例是采用图像识别技术(例如sikuli),直接通过截图(例如,点击百度的搜索按钮,若通过代码定位需要找到搜索按钮的id或name、xpath等,而通过sikuli技术可以只对搜索按钮进行截图即可定位)对难以定位的元素进行操作(因为有些产品通过前端元素定位起来会很不稳定或者元素是动态的,每次都不一样,这种情况下通过元素定位就很困难),页面会根据截图去匹配需要使用的区块,对其执行对应的操作,更大限度的丰富测试场景。
步骤S704,根据所述测试用例进行当前测试的节点配置。
具体地,每个代理节点可以实时或定时向主节点反馈当前的机器性能和负载情况等状态信息。当量化所需要进行的UI自动化测试的测试任务后,主节点可以综合分析各代理节点的状态信息,合理分配执行的用例数和兼容的系统、浏览器类型、并发数。也就是说,可以确定是否需要分发代理节点执行或分发哪些代理节点执行哪些测试任务,以及哪些任务需要并发执行。当确定当前测试的节点配置后,在测试代码中设置代理节点的参数。
在其他实施例中,也可以由客户端用户根据各个代理节点的状态信息确定当前测试的节点配置,然后手动在测试代码中设置代理节点的参数。
步骤S706,将测试用例分发到所配置的代理节点进行并发测试。
具体地,主节点可以从测试代码中确定需要执行测试任务的代理节点以及每个代理节点需要执行的测试部分,然后将对应的测试用例分发到相应的代理节点,以使每个代理节点执行被分配的测试部分。主节点通过Selenium-Server-standalone的代理服务,将请求的浏览器操作命令转发至不同代理节点设备上的server服务,间接的操作浏览器。
在本实施例中,各个代理节点不需要运行测试代码,测试代码只需要在主节点一台设备上运行即可,可自由配置测试用例到需要运行的代理节点设备上去执行。
代理节点根据接收到的命令执行被分发到的测试用例时,启动jdk和Selenium-Server-standalone的代理服务即可,不需要进行额外的设置。
本实施例同时支持在各个代理节点上进行并发执行测试,且其支持的多线程是线程安全的,这也就意味着当同时启用多个相同或不同的浏览器时,他们之间是相互隔离的,不会产生浏览器A中的操作跳跃到其他浏览器中去执行的情况,从而保证严格意义上安全的并发测试。
另外,本实施例支持不同操作系统(windows、mac、ubuntu等)和不同浏览器类型(IE、chrome、firefox、safari等)的自由组合,并对该组合进行分布式多线程运行测试。由于不同浏览器类型和不同浏览器版本对应的驱动是不一样的,所以代理节点的操作系统不同、浏览器不同时,需要单独配置对应浏览器和浏览器版本的驱动。
步骤S708,当测试用例执行失败时,控制对应代理节点自动进行失败重跑和失败用例截图。
具体地,由于UI自动化测试的影响因素较多,测试执行中会出现一些异常的情况导致测试用例执行失败,通过在框架的配置文件中设置失败用例重跑次数,执行中失败的测试用例会根据设置的次数进行重新运行。重新运行成功则设置为用例通过,否则设置为用例失败。失败的用例会通过监听器在失败的步骤页面进行截图,最终汇总到测试报告中。
另外,由于同时运行多线程会导致日志收集时非常杂乱,本实施例还将运行日志和测试报告进行结合,每一个测试用例的运行日志信息会被完整的保存在测试报告中,便于出现问题时的定位。
代理节点对本地的测试信息进行收集汇总,包括测试结果、失败用例截图和运行日志等,然后在本地的测试部分完成后发送至主节点。
步骤S710,接收各代理节点测试信息并汇总输出测试报告。
具体地,主节点接收到各个代理节点针对当前测试的测试信息后,对测试结果、失败用例截图和运行日志等信息进行汇总,生成完整的测试报告。
由于TestNG自带的测试报告不是很易于观看,本实施例使用extendReport对测试报告进行了美化处理。在测试用例执行完成之后就会自动生成非常美观的html测试报告,且带有自动统计功能,报告中可以非常方便地统计各系统模块测试用例的运行情况、错误信息以及失败用例截图。
本实施例提供的UI自动化测试方法,针对UI自动化测试,通过主节点加多个代理节点的分布式测试集群设置,只需要在主节点中运行测试代码,可自由配置测试用例到需要运行的代理节点设备上去执行,从而实现线程安全的多线程并发测试,测试用例执行时不会相互干扰。本实施例支持分布式部署,增加或减少节点设备时,不需要重复搭建环境,且支持不同操作系统和不同浏览器类型的自由组合测试。本实施例还支持在测试用例失败后根据已设置的重跑次数自动重新执行;支持自动收集所有测试用例执行日志和结果到主节点设备上,自动生成测试报告,测试报告支持失败测试用例截图功能;支持通过截图的方式对难以定位的元素进行操作,更大限度的丰富测试场景。
本发明还提供了另一种实施方式,即提供一种计算机可读存储介质,所述计算机可读存储介质存储有UI自动化测试程序,所述UI自动化测试程序可被至少一个处理器执行,以使所述至少一个处理器执行如上述的UI自动化测试方法的步骤。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。