一种基于多进程的iOS兼容性自动化测试方法与装置与流程

文档序号:26192908发布日期:2021-08-06 18:46阅读:259来源:国知局
一种基于多进程的iOS兼容性自动化测试方法与装置与流程

本发明一般地涉及软件测试领域。更具体地,本发明涉及一种基于多进程的ios兼容性自动化测试方法与装置。



背景技术:

移动客户端是安装在移动设备中的软件,通过移动客户端,企业可以将企业的产品和服务呈现到用户面前。相比于传统的pc客户端,在便捷性、交互性和及时性等方面,移动客户端具有明显的优势。而且随着互联网的不断发展,移动客户端的价值更加凸显,已经成为企业对外服务的重要渠道之一。

由于移动设备、操作系统和平台的差异,移动客户端也存在兼容性问题。例如,由于兼容性缺陷产生的软件闪退、ui异常、无法安装等问题;而且这些问题具有隐蔽性强、测试成本高、对设备影响严重的特点,已经成为当前移动客户端研发亟待解决的难题。因此,为了保证移动客户端质量,使移动客户端能够与各种硬件、软件、操作系统和平台兼容,移动客户端也需要进行兼容性测试。

兼容性测试是指测试软件在特定硬件平台上,不同的应用软件上,不同的操作系统平台上,不同的网络中环境中是否能够友好运行的测试。即测试一个测试软件在不同的手机上、不同的机型上、不同的平台上能否都正常的执行。

对于android系统而言,其具有极强的开源性,而且存在adb(androiddebugbridgeandroid,调试桥接器,是用于管理模拟器或真机状态的万能工具)这种强大的工具,能够进行高效的兼容性测试。

对于ios系统而言,虽然它不像android存在严重的品牌及型号碎片化,但截至目前也推出了二十余款机型(iphone一代至iphone12promax)及多种系统版本(ios4至ios14),各个大的系统版本下又包含了多个小版本,每次版本的升级都带来了新功能和原有功能变更等差异点;而且ios较为封闭,当前并没有应用于ios的类似adb的工具;进行ios兼容性测试需要耗费极大的人力,想要高效地进行兼容性测试存在着较大困难。



技术实现要素:

本发明提供一种基于多进程的ios兼容性自动化测试方法,以解决现有技术ios的兼容性测试效率低的问题;相应地,本发明还提供了一种基于多进程的ios兼容性自动化测试装置。

在第一方面中,为了解决上述技术问题,本发明的实施例提供了一种基于多进程的ios兼容性自动化测试方法,包括:获取连接到pc端的各ios端的识别码;获取测试脚本;pc端编译ios驱动,根据所述各ios端的识别码为各ios端安装应用;pc端运行所述ios驱动,在进程池的各进程中分别调用所述测试脚本进行多个ios端的并发测试。

在一个示例性的实施例中,所述ios驱动采用webdriveragent;所述为各ios端安装的应用为webdriveragentrunner。

在一个示例性的实施例中,所述ios端的识别码包括udid。

在一个示例性的实施例中,所述测试脚本的生成过程包括:录制脚本和优化脚本。

在一个示例性的实施例中,所述优化脚本包括:图像识别与ui控件识别相结合,添加全局等待时间和优化屏幕滑动操作。

在一个示例性的实施例中,所述图像识别与ui控件识别相结合包括:首先采用图像识别方式,若图像识别方式不成功则再采用ui控件识别方式。

在一个示例性的实施例中,所述添加全局等待时间包括:在两步操作之间添加延时,延时时间由全局变量进行定义。

在一个示例性的实施例中,所述优化屏幕滑动操作包括:获取ios端的屏幕尺寸;依据获取的屏幕尺寸的比例进行滑动操作。

在一个示例性的实施例中,pc端为每台ios端分配不同的端口号,所述进程池中的各进程将ios端的udid及端口号作为参数进行传递,根据ios端的udid及端口号来区分各个ios端。

在第二方面中,本发明的实施例还提供了一种基于多进程的ios兼容性自动化测试装置,其中包括通讯接口,处理器和存储器,所述通讯接口用于连接多个ios端;所述存储器用于存储计算机程序,所述处理器执行所述计算机程序以实现上述第一方面中任一实施例所描述的方法的步骤。

本发明实施例的基于多进程的ios兼容性自动化测试方法,采用ios驱动来连接pc端和ios端,使得可以在pc端执行测试脚本,同时借助于进程池技术,可以由多进程分别调用测试脚本进行多个ios端并发的兼容性测试,极大地提高了ios兼容性测试的效率,节省了大量的人力成本和时间成本。

附图说明

通过参考附图阅读下文的详细描述,本发明示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本发明的若干实施方式,并且相同或对应的标号表示相同或对应的部分,其中:

图1为根据本发明一种实施例的自动化兼容性测试系统构成示意图;

图2为根据本发明一种实施例的自动化兼容性测试方法流程示意图;

图3为根据本发明另一种实施例的自动化兼容性测试方法流程示意图;

图4为根据本发明一种实施例的测试架构示意图;

图5为步骤s1的详细流程示意图;

图6为步骤s3的详细流程示意图;以及

图7为步骤s4的详细流程示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本公开一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

基于多进程的ios兼容性自动化测试系统如图1所示,包括一台苹果pc(基于macos)和若干台ios终端设备,如iphone、ipodtouch、ipad等ios终端设备。上述ios终端设备即苹果移动设备,或者ios真机,为了方便表述和便于区分苹果pc和苹果移动设备,将上述苹果pc称为pc端,将ios终端设备称为ios端。

图1中,pc端通过usb接口连接一个hub(多端口转发器),该hub连接多个ios端,本实施例中包括两台iphone,一台ipodtouch和一台ipad,其中的两台iphone的型号可以是相同的,也可以是不同的。在其他实施例中,还可以连接更多的ios端,例如第一ios端、第二ios端、第三ios端和第四ios设备等。为了保证测试的流畅性,所连接的ios终端设备的数量不宜超过10台。在一个实际应用场景中,为了便于体现测试效果,优选采用一台苹果pc连接多台iphone手机,各iphone手机的型号及ios系统版本可以相同或者不同;例如一台苹果pc可以连接两台基于相同ios系统版本的iphone8,三台基于不同ios系统版本的iphone11,一台iphone12。本实施例中的hub为usbhub,其能够将一个usb接口扩展为多个,并可以使这些接口同时使用。采用该设备的原因是pc端本身不具备与ios端对应数量的通讯接口,需要通过hub进行通讯接口的扩展。在其他实施例中,也可以采用usb以外的其他串行通讯接口来实现pc端与ios端的连接,换言之,对于pc端与ios端之间的物理接口方式,本发明不作限制。

如图2所示出的一种基于多进程的ios兼容性自动化测试方法,步骤包括:首先,获取待测ios端的识别码21;然后,获取测试脚本22;接着,pc端编译ios驱动,并且根据上述获取的各ios端的识别码为各个ios端安装应用23;最后,pc端运行ios驱动,调用测试脚本进行多ios端的并发测试24。上述步骤中,获取待测ios端的识别码21也可以在获取测试脚本22之后进行,本发明对此不进行限定。

本发明实施例的基本原理是:基于上述ios驱动,安装在ios端的应用能够调用ios的api对待测试的ios端进行操作。在pc端运行ios驱动时,会在pc端启动一个服务器,并在ios端启动上述应用。利用脚本来描述期望ios端执行的测试项目,上述服务器可以与安装在ios端的应用进行通信,该应用根据脚本的描述可以生成模拟指令来实现对ios端的操作,从而完成脚本所描述的测试项目。

根据以上原理可知,采用ios驱动来连接pc端和ios端可以在pc端执行测试脚本,采用进程池技术可以由多进程分别调用测试脚本进行多个ios端并发的兼容性测试,从而极大地提高了ios兼容性测试的效率,解决了兼容性测试效率低下的问题。

进一步地,在一个实施例中,如图3所示出的,测试过程包括s1、s2、s3、s4、s5和s6这几个步骤,下面进行介绍。

步骤s1,在pc端安装xcode,部署wda,wda作为ios端的驱动,用于连接pc端和ios端。

xcode是运行在操作系统macosx上的集成开发工具(ide,integrateddevelopmentenvironment),由appleinc开发。xcode是开发macos和ios应用程序的方式。上述的wda是webdriveragent的简称。它是facebook开发的在ios上支持webdriver协议的服务,可以用来启动/终止应用,点击/滑动页面。而webdriver协议是一套基于http协议的json格式规范,协议规定了不同操作对应的格式。wda是在ios上实现webdriver协议的驱动。wda在被测ios端上安装了一个wdaapp(webdriveragentrunner),该wdaapp能够连接底层驱动,以调用ios的api来对待测试的ios设备进行操作。在pc端运行wda时,会在pc端启动wda服务器,并在ios端启动上述wdaapp。利用脚本来描述期望ios端执行的动作,即期望ios端执行的测试项目,并且通过脚本与wda服务器通信;wda服务器与安装在ios端的wdaapp进行通信,wdaapp根据脚本的描述可以生成模拟指令来实现对ios端的操作,从而完成脚本所描述的测试项目。

步骤s2,获取所有待测ios端的udid列表。udid的全称是uniquedeviceidentifier,它是苹果ios设备的唯一识别码,它由40个字符的字母和数字组成。pc端通过相关指令获取每个连接的待测ios端的udid,即得到所有ios端的udid列表;上述相关指令可以包括idevice_id指令,idevice_id指令用于获取当前已连接设备的udid。

步骤s3,在pc端安装第三方库airtest和pocoui,以及python3,用于脚本录制及执行。airtest是一个跨平台的ui自动化测试编辑器,适用于游戏和应用,是基于图像识别的自动化框架,支持自动化脚本录制、一键回放、报告查看等功能。与基于图像识别的airtest不同,pocoui是一款基于ui控件搜索的自动化框架。python3是指python3.5及以上版本。在脚本录制过程中,需兼顾提高点击精确度和异常情况处理等情况,并且进行脚本优化。

步骤s4,在pc端编译wda,根据获取的udid为各台ios端安装上述的wdaapp,为每台手机分配不同的端口号进行端口转发。

步骤s5,使用进程池技术进行多ios端的并发测试,在各进程中分别调用录制并优化后的脚本对ios端进行测试,各进程根据ios端udid及分配的端口号区分多个ios端。

总结来说,本实施例的测试流程的基本架构如图4所示,包括:创建进程池,进程池中包括若干子进程;通过wda在各个ios终端上安装相应的应用;测试时,将ios端的udid及分配的端口作为参数进行传递,在多个子进程中同时调用测试脚本,对多台ios端进行并发测试。测试脚本是经过优化的,优化的方式包括但不限于:图像与ui控件识别相结合,添加全局等待时间,按屏幕比例执行滑动操作。

具体地,在一个应用场景中,如图5所示出的,步骤s1包括:

步骤s11,在pc端上安装xcode,部署ios-target。上述ios-target是基于wda的,并为了适用airtest而进行了定制,并且删除了不必要的内容。本实施例中,选择ios-target的原因是为了适用第三方库airtest及pocoui。在其他实施例中,根据所适用的库,可以选择其他类型wda框架。

步骤s12,配置ios-target,使用xcode打开webdriveragent.xcodeproj文件,进行证书及平台配置,以使wda能够正确编译并在ios端中正常运行。

上述步骤s11,步骤s12为实施测试所对应的准备工作,本领域技术人员应当理解,根据实际应用的硬件和软件条件,可以在上述步骤的基础上进行适应性的调整。由于ios-target仍然属于wda,为了容易理解和表述,不论是wda还是ios-target,下文中均称为wda。

具体地,在一个实际应用场景中,如图6所示出的,步骤s3包括:

步骤s31,安装库。执行相关指令安装airtest及pocoui库,用于后续图像比对及ui控件比对。上述相关指令包括pip3install指令。本实施例采用python3脚本,因此还需要安装python3。

步骤s32,脚本录制。脚本可以手动编写,或者是通过测试工具提供的录制功能,运行程序自动录制生成脚本。通过录制生成脚本的方式较为简单,但仅靠自动录制脚本,一般无法满足用户的复杂要求,因此通常需要手工添加设置,增强脚本的实用性。本实施例中,首先依靠软件录制功能录制脚本,然后再对脚本进行优化。优化方式包括步骤s33、步骤s34和步骤s35所描述的方式,下面具体叙述。需要说明的是,除了采用步骤s33、步骤s34和步骤s35这三种方式的组合,还可以加入更多的优化方式,当然也可以采用一种方式或者两种方式的组合,例如仅采用步骤s33的方式,或者采用步骤s33与步骤s35的组合。

步骤s33,每步操作均采用图像识别与ui控件识别相结合的方式,当图像识别不成功时,再使用ui控件识别方式进行再次识别,以提高操作的成功率。采用图像识别与ui控件识别相结合的方式的代码示例如下。

其中,touch()是图像识别的方式中的点击操作,poco.click()是ui控件识别方式的点击操作。例如一条ifnot语句就表达了若图像识别方式不成功时则使用ui控件识别方式进行识别。

步骤s34,添加全局等待时间。由于在进行脚本运行时,有时成功执行了点击操作,但页面还在加载中,就会使这一步点击操作被跳过,从而引起一系列错误。为了解决该问题,可以采用添加全局变量的方式,在两步操作之间添加延时,使每步操作后进行等待。添加全局等待时间的代码如下所示。

st.opdelay=3.0#设置全局变量,每个操作后等待3s

其中,st.opdelay为全局变量,并且赋值为3,使每步操作后等待3s,从而避免某一步操作被跳过。在其他实施例中,该全局变量的值可以根据需要进行设置,例如设置为2s、4s或者5s。

步骤s35,优化屏幕滑动操作。需要注意的是,本文中,滑动操作也涵盖了拖拽操作,因此不再介绍拖拽操作。在进行测试时,经常会有滑动操作。滑动操作可以按照图片到图片、图片到坐标或者坐标到坐标的方式进行。但是,由于本实施例需要同时对多个ios端进行测试,而这些ios端的屏幕大小和分辨率却是各不相同的。如果按照图片到图片、图片到坐标或者坐标到坐标的方式进行滑动,在屏幕大小和分辨率不同的多台ios端上同时执行时,某些ios端可能移动不到位,而某些ios端可能移动超过要求的位置。因此,本实施例采用按照屏幕比例进行滑动操作的方式,从而避免产生上述问题。具体地,操作前,先实时获取屏幕的尺寸,然后按照比例进行滑动。优化屏幕滑动操作的相关代码如下所示。

其中,语句width,height=device().get_current_resolution()表示获取ios端的屏幕宽、高;up_swipe(width,height)表示根据获取的屏幕尺寸进行滑动。start_pt=(width/2,height*0.7),end_pt=(width/2,height*0.7)表示滑动的起止位置,其中的起止位置用获取的屏幕尺寸进行表示,从而解决了用同一个脚本无法适应于不同屏幕滑动操作的问题。

根据以上实施例的描述可知,通过对脚本进行优化,能够进一步提高测试的性能和效率,提高测试的准确度。例如,采用图像识别与ui控件识别相结合的方式能够提高测试准确度,添加全局等待时间和优化屏幕滑动操作可以提升测试的性能和测试效率。

具体地,在一个应用场景中,如图7所示出的,步骤s4包括:

步骤s41,pc端编译wda,令ios端安装webdriveragentrunner。相关代码如下所示。

其中,设置了循环体来对所有ios端进行依次编译。在pc端执行xcodebuild-projectwebdriveragent.xcodeproj-schemewebdriveragentrunner-destination"id=udid[i]"test来编译wda,udid[i]为pc端所获取的所有ios端的udid列表。

步骤s42,pc端为每台ios端分配不同的端口号进行端口转发。如上面的代码示例中,通过循环体和iproxyproxy8100udid[i]为各台手机依次分配的不同的端口号进行端口转发,端口号从8100开始依次加1。

步骤s41和步骤s42中,编译wda和端口转发采用不同的进程进行处理。各台ios端执行wda编译时需添加等待时间,如上面的代码示例中time.sleep(15)表示进行等待,15指示了预设的等待时间的长短。

具体地,在一个应用场景中,步骤s5包括:在开始进行兼容性测试时,启动wda,使用进程池技术进行多台ios端的并发测试,在各进程中分别调用录制并优化后的脚本对ios端进行并发测试,各进程将ios端的udid及分配的端口号作为参数进行传递,根据ios端的udid及分配的端口号来区分各个ios端。

上述进程池是由服务器预先创建的一组子进程,这些子进程的数目可以根据cpu的数量和任务需求确定,例如可以为3至10个子进程。进程池中的所有子进程都运行着相同的代码,并具有相同的属性,比如优先级等。当有新的任务来到时,主进程将选择进程池中的某一个子进程来为之服务。换言之,进程池技术预先建立若干子进程,在需要使用的时候直接调用,在用完之后再把子进程归还给进程池,相比于动态创建子进程的方式,省去了子进程的创建和销毁的开销,也不需要对子进程进行管理,因此能够提高处理效率。主进程可以使用随机算法、轮流算法等来主动选择子进程,主进程可以通过与子进程之间的管道进行数据的传递以提高数据传递的效率。如下示出了采用进程池技术进行并发测试的代码示例,其中pool.close(),pool.join()表示进程池的相关方法。

本发明的另一个实施例为一种基于多进程的ios兼容性自动化测试装置,包括通讯接口、处理器和存储器,处理器连接储存器和通讯接口,通讯接口用于连接ios端,例如可以是usb接口,还可以参照图1所示的接口扩展的方式来连接多个ios端;存储器存储计算机程序,处理器调用计算机程序进行处理,以实现前述各实施例的方法。在一些实现场景中,计算机程序可以以软件程序的形式存储在存储器中。前述的存储器可以包括但不限于随机存取存储器(ram)、只读存储器(rom)、u盘、闪存盘、硬盘、磁盘、光盘等各种可以存储程序代码的介质。

本发明的测试装置可以采用pc,在其他实施方式中,也可以是基于macos的其他设备,包括但不限于服务器、服务器集群等。在一个或多个实施例中,本发明的测试装置还可以用于互联网或物联网中,以实现更进一步的网络功能。

在本说明书的上述描述中,除非另有明确的规定和限定,术语“固定”、“安装”、“相连”或“连接”等术语应该做广义的理解。例如,就术语“连接”来说,本文中表示电连接,可以是直接相连,也可以通过中间媒介间接相连,或者可以是两个元件内部的连通或两个元件的相互作用关系。因此,除非本说明书另有明确的限定,本领域技术人员可以根据具体情况理解上述术语在本发明中的具体含义。

另外,本说明书中所使用的术语“第一”或“第二”等用于指代编号或序数的术语仅用于描述目的,而不能理解为明示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”或“第二”的特征可以明示或者隐含地包括至少一个该特征。在本说明书的描述中,“多个”的含义是至少两个,例如两个,三个或更多个,除非另有明确具体地限定。

虽然本说明书已经示出和描述了本发明的多个实施例,但对于本领域技术人员显而易见的是,这样的实施例只是以示例的方式提供的。本领域技术人员会在不偏离本发明思想和精神的情况下想到许多更改、改变和替代的方式。应当理解的是在实践本发明的过程中,可以采用本文所描述的本发明实施例的各种替代方案。所附权利要求书旨在限定本发明的保护范围,并因此覆盖这些权利要求保护范围内的模块组成、等同或替代方案。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1