CN110750463B - 一种小程序测试方法、装置、系统、设备及介质 - Google Patents
一种小程序测试方法、装置、系统、设备及介质 Download PDFInfo
- Publication number
- CN110750463B CN110750463B CN201911039594.6A CN201911039594A CN110750463B CN 110750463 B CN110750463 B CN 110750463B CN 201911039594 A CN201911039594 A CN 201911039594A CN 110750463 B CN110750463 B CN 110750463B
- Authority
- CN
- China
- Prior art keywords
- test
- applet
- code file
- instruction
- control code
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本申请公开了一种小程序测试方法、装置、系统、设备及介质,涉及软件测试技术领域,具体实现方案为:在宿主程序中的待测试小程序处于运行态时,获取待注入的测试引擎主控制代码文件和测试引擎从控制代码文件;通过待测试小程序的主进程运行测试引擎主控制代码文件,以接收外部模块发送的测试指令,并执行测试指令或通知从进程执行测试指令;通过待测试小程序的从进程运行测试引擎从控制代码文件,以接收并执行主进程发送的测试指令。本申请实施例的技术方案提高了对小程序进行自动化测试的便捷度,同时扩大了对小程序进行测试时的可操控范围。
Description
技术领域
本申请涉及计算机技术,尤其涉及软件测试技术领域。
背景技术
小程序是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户通过扫一扫或搜一下即可打开应用。而小程序自动化测试引擎,指的是让小程序拥有被自动化操纵能力的一种技术。
现有技术中小程序的自动化测试引擎基于传统的h5/iOS/android端自动化测试工具appium、selenium等进行封装,或者直接在chrome调试协议的基础之上进行封装。
然而,采用上述方案需要在小程序的宿主程序的源码上开启chrome的远程调试协议开关,否则无法进行小程序自动化测试,同时还会受到chrome调试协议的限制,因此对小程序的操控能力也较为有限。
发明内容
本申请实施例提供了一种小程序测试方法、装置、系统、设备及介质,以提高对小程序进行自动化测试的便捷度,同时扩大对小程序进行测试时的可操控范围。
第一方面,本申请实施例提供了一种小程序测试方法,其特征在于,包括:
在宿主程序中的待测试小程序处于运行态时,获取待注入的测试引擎主控制代码文件和测试引擎从控制代码文件;
通过所述待测试小程序的主进程运行所述测试引擎主控制代码文件,以接收外部模块发送的测试指令,并执行所述测试指令或通知所述从进程执行所述测试指令;
通过所述待测试小程序的从进程运行所述测试引擎从控制代码文件,以接收所述主进程发送的测试指令,并执行所述测试指令。
本申请实施例通过在宿主程序中的待测试小程序处于运行态时,获取待注入的测试引擎主控制代码文件和测试引擎从控制代码文件;通过待测试小程序的主进程运行测试引擎主控制代码文件,以接收外部模块发送的测试指令,并执行测试指令或通知从进程执行测试指令;通过待测试小程序的从进程运行测试引擎从控制代码文件,以接收主进程发送的测试指令,并执行测试指令。上述技术方案通过直接在待测试小程序处于运行态时注入测试引擎控制代码来获取对待测试小程序进行操控的能力,不需要在宿主程序的源码上开启chrome的远程调试协议开关,同时摆脱chrome调试协议对操控操作的限制,提高了对小程序进行自动化测试的便捷度。另外,由于对小程序的操控操作无需受chrome调试协议的限制,从而扩大了对小程序进行测试时的可操控范围。
可选的,获取待注入的测试引擎主控制代码文件和测试引擎从控制代码文件,包括:
下载与所述宿主程序的当前版本相匹配的测试引擎主控制代码文件和测试引擎从控制代码文件;
将所述测试引擎主控制代码文件中的代码注入到所述待测试小程序的主进程中,将所述测试引擎从控制代码文件中的代码注入到所述待测试小程序的从进程中。
上述申请中的一个可选实施方式,通过将测试引擎控制代码文件的获取过程细化为下载与宿主程序的当前版本相匹配的测试引擎主控制代码文件和测试引擎从控制代码文件,并分别将测试引擎主控制代码文件中的代码注入至待测试小程序的主进程,将测试引擎从控制代码文件中的代码注入至待测试小程序的从进程中,从而实现了测试引擎控制代码的动态下发,为小程序的自动化测试奠定了基础,同时通过主从(master-slave)模式的设置,不同注入不同的测试引擎控制代码文件,为小程序测试的有序进行提供保障。
可选的,所述接收外部模块发送的测试指令,并执行所述测试指令或通知所述从进程执行所述测试指令,包括:
接收外部的测试代理模块转发的来自测试驱动模块的测试指令;
判断所述测试指令指示执行的操作是运行时环境操控操作或是页面操控操作;
若是运行时环境操控操作,则执行所述测试指令,若是页面操控操作,则通知从进程执行所述测试指令。
上述申请中的一个可选实施方式,在待测试小程序的主进程运行测试引擎主控制代码文件时,接收外部的测试代理模块转发的来自测试驱动模块的测试指令,并在测试指令指示的操作为运行时环境操控操作时,由主进程进行测试指令的执行;在测试指令指示的操作为页面操控操作时,由主进程通知从进程进行测试指令的执行,通过主从(master-slave)模式的使用,并进一步明确主进程和从进程的操控类别,使得主从进程分工明确,为小程序测试的有序进行提供保障;同时,通过主进程进行运行时环境操控操作,为直接操控小程序的运行时环境提供了可能,使得测试过程中对小程序的操控能力更加全面彻底。
可选的,所述运行时环境操控操作包括:获取并返回所述待测试小程序中当前展现的页面信息、获取并返回所述待测试小程序中当前打开的页面数量、获取小程序基础库版本和获取小程序运行时信息中的至少一个;
所述页面操控操作包括:对页面中的预设控件执行触控操作、页面文档对象模型DOM树结构获取操作和页面元素属性信息获取操作中的至少一个。
其中,触控操作包括点击和/或滑动操作。
上述申请中的一个可选实施方式,通过对主进程所执行的测试指令对应的运行时环境操控操作,以及从进程所执行的测试指令对应的页面操控操作进行细化,进一步明确了主从进程的操控内容,体现了对小程序进行测试时的有序性和操控能力的全面性。
可选的,所述方法还包括:
通过所述从进程监听页面事件,当监听到页面事件时将页面事件信息发送给所述主进程;
通过所述主进程将所述页面事件信息发送给外部的测试代理模块,以通过所述测试代理模块将所述页面事件信息发送给测试驱动模块。
上述申请中的一个可选实施方式,通过追加从进程对页面事件的监听操作,并将所监听的页面事件信息发送至主进程,并由主进程发送至外部的测试代理模块进而转发至测试驱动模块,上述方式通过从进程进行页面事件的采集,并通过主进程和测试代理模块实现页面事件的转发,从而可捕获到用户对小程序的操作事件,进而可以支持测试用例的录制。
可选的,在获取待注入的测试引擎主控制代码文件和测试引擎从控制代码文件之前,所述方法还包括:
判断设置于所述宿主程序中的调试小程序中的调试开关是否被打开;若是,则触发执行获取待注入的测试引擎主控制代码文件和测试引擎从控制代码文件的操作。
上述申请中的一个可选实施方式,通过在获取待注入的测试引擎主控制代码文件和测试引擎从控制代码文件之前,对宿主程序中调试小程序中的调试开关的打开情况加以判断,并在测试开关处于打开状态时触发测试引擎控制代码文件的获取操作,也即通过宿主程序中的调试小程序中的测试开关,代替现有的宿主程序的源码上chrome的远程调试协议开关,对小程序的测试过程加以控制,进一步提高了小程序测试过程的便捷度。
可选的,所述方法还包括:
通过所述宿主程序的操作系统接收外部模块发送的宿主程序操控指令,并执行所述宿主程序操控指令。
上述申请中的一个可选实施方式,追加通过宿主程序的操作系统接收外部模块发送的宿主程序操控指令,并执行宿主程序操控指令,实现对宿主程序的操控操作,进一步丰富了在小程序测试过程中,对宿主程序的操控能力。
可选的,所述宿主程序操控指令包括:针对所述宿主程序生成的用户界面UI执行操作的指令。
上述申请中的一个可选实施方式,通过将宿主程序操控指令细化为针对宿主程序生成的用户界面执行操作的指令,完善了对小程序测试过程中的可操控范围。
可选的,在宿主程序中的待测试小程序处于运行态之前,所述方法还包括:
通过所述宿主程序的操作系统接收外部模块发送的小程序打开指令,并执行所述小程序打开指令,以打开待测试小程序使待测试小程序处于运行态。
上述申请中的一种可选实施方式,通过在获取测试引擎控制代码文件之前,追加通过宿主程序的操作系统接收外部模块发送的小程序打开指令,并执行小程序打开指令,以打开待测试小程序,使待测试小程序处于运行态,使得在进行小程序测试前,使小程序能够自动进入运行态,无需用户手动操作,进一步提高了测试过程的便捷度。
可选的,若所述操作系统为安卓系统,则所述操作系统从外部模块接收的指令是所述外部模块通过集成的adb工具发送的;
若所述操作系统为ios系统,则所述操作系统从外部模块接收的指令是所述外部模块通过集成的wda工具发送的。
上述申请中的各个可选实施方式,通过在外部模块中集成不同的操控工具,以适配安装有小程序的宿主程序对应的操作系统,为小程序测试过程的执行提供保障。
可选的,所述待测试小程序的主进程与外部模块之间通过WEBSocket协议进行通信。
上述申请中的一个可选实施方式,通过设定主进程与外部模块之间的通信协议,为测试引擎与外部模块之间进行双向通信提供了保障。
可选的,外部的测试代理模块在接收到测试驱动模块发送的指令时,根据至少一个终端设备的注册信息,向对应的终端设备发送所述指令。
上述申请中的一个可选实施方式,通过终端设备的注册信息对不同终端设备加以区分,使得在同时对多个终端设备进行测试时,测试代理模块在接收到测试驱动模块发送的指令时,能够对各终端设备加以区分,为多终端设备的同时测试提供了保障。
第二方面,本申请实施例还提供了一种小程序测试装置,包括:
代码文件注入单元,用于在宿主程序中的待测试小程序处于运行态时,获取待注入的测试引擎主控制代码文件和测试引擎从控制代码文件;
主进程运行单元,用于通过所述待测试小程序的主进程运行所述测试引擎主控制代码文件,以接收外部模块发送的测试指令,并执行所述测试指令或通知所述从进程执行所述测试指令;
从进程运行单元,用于通过所述待测试小程序的从进程运行所述测试引擎从控制代码文件,以接收所述主进程发送的测试指令,执行所述测试指令。
第三方面,本申请实施例还提供了一种小程序测试系统,所述系统包括:测试驱动模块、测试代理模块和测试引擎;
所述测试驱动模块与所述测试代理模块通信连接,所述测试代理模块与所述测试引擎通信连接;
所述测试驱动模块,用于生成测试指令;
所述测试引擎,用于在宿主程序中的待测试小程序处于运行态时,获取待注入的测试引擎主控制代码文件和测试引擎从控制代码文件;
所述测试引擎,还用于通过所述待测试小程序的主进程运行所述测试引擎主控制代码文件,以接收所述测试代理模块转发的来自所述测试驱动模块的测试指令,并执行所述测试指令或通知所述从进程执行所述测试指令;
所述测试引擎,还用于通过所述待测试小程序的从进程运行所述测试引擎从控制代码文件,以接收所述主进程发送的测试指令,并执行所述测试指令。
第四方面,本申请实施例还提供了一种电子设备,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如第一方面实施例提供的一种小程序测试方法。
第五方面,本申请实施例还提供了一种存储有计算机指令的非瞬时计算机可读存储介质,所述计算机指令用于使所述计算机执行如第一方面实施例所提供的一种小程序测试方法。
上述可选方式所具有的其他效果将在下文中结合具体实施例加以说明。
附图说明
附图用于更好地理解本方案,不构成对本申请的限定。其中:
图1A是本申请实施例所涉及的小程序测试系统的结构图;
图1B是本申请实施例一中的一种小程序测试方法的流程图;
图2是本申请实施例二中的一种小程序测试方法的流程图;
图3是本申请实施例三中的一种小程序测试方法的流程图;
图4是本申请实施例四中的一种小程序测试方法的流程图;
图5是本申请实施例五中的一种小程序测试系统的结构图;
图6是本申请实施例六中的一种小程序测试装置的结构图;
图7是用来实现本申请实施例的小程序测试方法的电子设备的框图。
具体实施方式
以下结合附图对本申请的示范性实施例做出说明,其中包括本申请实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本申请的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
为了清楚地介绍本申请实施例的技术方案,首先对本申请实施例所涉及的小程序测试系统,进行示例性说明。
图1A为本申请实施例所涉及的小程序测试系统,该系统包括:外部模块10和测试引擎20;
其中外部模块10包括测试驱动模块11和测试代理模块12;
所述测试驱动模块11与所述测试代理模块12通信连接,所述测试代理模块12与所述测试引擎20通信连接;
其中,测试驱动模块11部署在PC端本地,供开发者进行测试脚本的编写,进而基于所编写的测试脚本生成测试指令。
示例性地,测试驱动模块11中可集成一客户端库Client Lib,开发者可以基于Client Lib的API(Application Programming Interface,应用程序编程接口)编写测试脚本,生成测试指令。
其中,测试代理模块12部署在PC端本地,用于集成对终端设备进行测试时的操控工具,并将测试驱动模块11产生的测试指令转发至测试引擎20。示例性地,测试代理模块20中可以针对不同操作系统的终端设备集成不同类别的操控工具。例如,集成adb操控工具,来获取对安卓操作系统的终端设备的操控能力;集成wda操控工具,来获取对ios操作系统的终端设备的操控能力。
其中,移动终端比如手机中安装的宿主程序中加载有至少一个待测试小程序,并在待测试小程序处于运行态时,在小程序运行框架中加载测试引擎20,该测试引擎20用于获取测试代理模块12转发的测试指令,并透出测试过程中对待测试小程序的各项操控能力。
示例性地,测试引擎20遵从“一主多从”的主从模式(master-slave),基于分而治之的思想,将一个小程序测试任务分解为多个页面测试子任务,并通过从进程执行页面测试子任务,由主进程进行各页面测试子任务的协调和测试结果的整合。通过主进程和/或从进程对测试指令的执行,达到对小程序进行测试的目的。
实施例一
图1B是本申请实施例一中的一种小程序测试方法的流程图,本申请实施例适用于对宿主程序中的小程序进行自动测试的情况。该方法由小程序测试装置来执行,该装置通过软件和/或硬件实现,并具体配置于安装有小程序的宿主程序的测试引擎中,该测试引擎可配置于安装有宿主程序的电子设备中。
如图1B所示的一种小程序测试方法,包括:
S101、在宿主程序中的待测试小程序处于运行态时,获取待注入的测试引擎主控制代码文件和测试引擎从控制代码文件。
其中,在终端设备中安装的宿主程序中,加载有至少一个小程序,使得无需在终端设备中下载并安装小程序即可实现小程序的使用。
当需要对待测试小程序进行测试前,需要开启待测试小程序处于运行态,并在待测试小程序处于运行态时,获取待注入的测试引擎控制代码文件。其中,测试引擎控制代码文件包括测试引擎主控制代码和测试引擎从控制代码文件。其中,测试引擎主控制代码供主进程运行使用,以限定主进程的操控权限;测试引擎从控制代码供从进程运行使用,以限定从进程的操控权限。典型的,测试引擎控制代码文件为扩展名为“.js”的代码文件。
其中,测试引擎控制代码文件可以预先存储在宿主程序对应的管理服务器中,并在宿主程序中的待测试小程序处于运行态时,进行测试引擎控制代码文件的获取。
需要说明的是,不同开发阶段的宿主程序,在对该宿主程序中的小程序进行测试时相应的测试引擎控制代码文件会存在一定的差异,因此为了保证测试过程的顺利进行,在进行测试引擎控制代码文件获取时,需要获取与宿主程序当前版本相匹配的测试引擎控制文件。
示例性地,获取待注入的测试引擎主控制代码文件和测试引擎从控制代码文件,可以是下载与宿主程序的当前版本相匹配的测试引擎主控制代码文件和测试引擎从控制代码文件;将测试引擎主控制代码文件中的代码注入到待测试小程序的主进程中,将测试引擎从控制代码文件中的代码注入到待测试小程序的从进程中。可选的,可以通过热加载方式分别向待测试小程序的主进程和从进程中进行代码注入。可选的,可以基于HTTP协议进行测试引擎主控制代码文件和测试引擎从控制代码文件的下载。
可以理解的是,为了便于对代码注入过程加以控制,可以在宿主程序中预先设置一调试开关,当待测试小程序处于运行态时,仅在调试开关处于开启状态,才触发进行测试引擎控制代码文件的获取。
示例性地,可以在宿主程序中加载一调试小程序,该调试小程序中设置有控制宿主程序进行模式切换的调试开关。当调试开关处于开启状态时,宿主程序进入调试模式,当前模式下开发者可以对宿主程序中所加载的各小程序进行测试;当调试开关处于关闭状态时,宿主程序关闭调试模式,当前模式下开发者无法对宿主程序中所加载的小程序进行测试。
其中,调试开关的切换可以由开发者手动触发,还可以在对待测试小程序进行测试之前,通过代码逻辑自动进行调试开关的开启控制。
典型的,可以在获取待注入的测试引擎主控制代码文件和测试引擎从控制代码文件之前,判断设置于所述宿主程序中的调试(Debug)小程序中的调试开关是否被打开;若是,则触发执行获取待注入的测试引擎主控制代码文件和测试引擎从控制代码文件的操作。
S102、通过所述待测试小程序的主进程运行所述测试引擎主控制代码文件,以接收外部模块发送的测试指令,并执行所述测试指令或通知所述从进程执行所述测试指令。
开发者可以基于测试驱动模块中集成的Client Lib的API编写测试脚本,并通过运行测试脚本生成测试指令发送至测试驱动模块;测试驱动模块根据待测试程序对应的宿主程序所安装的终端设备的操作系统确定相应的操控工具,并通过操控工具向测试引擎的主进程转发测试指令。
示例性地,当终端设备为安卓操作系统时,通过集成的adb操控工具向测试引擎的主进程发送测试指令;当终端设备为ios操作系统时,通过集成的wda操控工具人向测试引擎的主进程发送测试指令。
具体的,当测试引擎中的主进程中被注入测试引擎主控制代码文件的代码后,通过主进程运行所注入的代码,以控制待测试小程序中各页面的页面展现逻辑,从而在测试小程序的过程中,实现对不同页面测试的分区域控制。在运行测试引擎主控制代码文件过程中,接收测试代理模块转发的来自测试驱动模块的测试指令。主进程接收到该测试指令之后,可以根据测试指令的类型,自行执行测试指令,以实现对程序层面的测试,或将测试指令转发至从进程加以执行。
需要说明的是,当同时对多个终端设备中的小程序进行测试时,为了对终端设备进行有效区分,可以预先进行终端设备的标识信息(例如终端设备的注册信息)的获取,并存储在测试代理模块中,以便测试代理模块基于终端设备的标识信息针对不同终端设备下发相应的测试指令或其他指令。也即,测试代理模块在接收到测试驱动模块发送的指令时,根据至少一个终端设备的注册信息,向对应的终端设备发送所述指令。
S103、通过所述待测试小程序的从进程运行所述测试引擎从控制代码文件,以接收所述主进程发送的测试指令,并执行所述测试指令。
具体的,当测试引擎中的从进程中被注入测试引擎从控制代码文件的代码后,通过从进程运行所注入的代码,以控制从进程进行页面的渲染展现。在运行测试引擎从控制代码文件过程中,接收主进程发送的测试指令,并执行该测试指令,以实现对页面层面的测试。
可以理解的是,主进程在测试过程中还可以整合各从进行的测试结果,并将整合后的测试结果反馈至开发者,在测试结果反馈过程中,需要通过待测试小程序的主进程与外部的测试代理模块之间通过有线和/或无线的方式进行通信。鉴于待测试小程序的主进程与外部的测试代理模块之间的双向通信的需求,可以将测试引擎与外部的测试代理模块之间的通信协议设置为WEBSocket协议。
本申请实施例通过在宿主程序中的待测试小程序处于运行态时,获取待注入的测试引擎主控制代码文件和测试引擎从控制代码文件;通过待测试小程序的主进程运行测试引擎主控制代码文件,以接收外部模块发送的测试指令,并执行测试指令或通知从进程执行测试指令;通过待测试小程序的从进程运行测试引擎从控制代码文件,以接收主进程发送的测试指令,并执行测试指令。上述技术方案通过直接在待测试小程序处于运行态时注入测试引擎控制代码来获取对待测试小程序进行操控的能力,不需要在宿主程序的源码上开启chrome的远程调试协议开关,同时摆脱chrome调试协议对操控操作的限制,提高了对小程序进行自动化测试的便捷度。另外,由于对小程序的操控操作无需受chrome调试协议的限制,从而扩大了对小程序进行测试时的可操控范围。
实施例二
图2是本申请实施例二中的一种小程序测试方法的流程图,本申请实施例在上述各实施例的技术方案的基础上进行了优化改进。
进一步地,将操作“接收外部模块发送的测试指令,并执行所述测试指令或通知所述从进程执行所述测试指令”细化为“接收外部的测试代理模块转发的来自测试驱动模块的测试指令;判断所述测试指令指示执行的操作是运行时环境操控操作或是页面操控操作;若是运行时环境操控操作,则执行所述测试指令,若是页面操控操作,则通知从进程执行所述测试指令”,以明确主从进程的操控类别,以确保测试过程的有序性和测试内容全面性。
如图2所示的一种小程序测试方法,包括:
S201、在宿主程序中的待测试小程序处于运行态时,获取待注入的测试引擎主控制代码文件和测试引擎从控制代码文件。
S202、通过所述待测试小程序的主进程运行所述测试引擎主控制代码文件,以接收外部的测试代理模块转发的来自测试驱动模块的测试指令。
其中,测试指令包括用于指示对小程序的运行时环境进行操控的操作指令,还包括用于对页面进行操控的操作指令。
S203、判断所述测试指令指示执行的操作是运行时环境操控操作或是页面操控操作。
示例性地,不同测试指令可以预先标注测试类别,以使主进程在接收到测试指令后,根据预先标注的测试类别确定测试指令所指示执行的操作。可选的,测试类别可以由设定数量的字母、数字或符号等组合形成。
S204、若是运行时环境操控操作,则执行所述测试指令,若是页面操控操作,则通知从进程执行所述测试指令。
在本申请一个可选实施方式中,所述运行时环境操控操作包括:获取并返回所述待测试小程序中当前展现的页面信息、获取并返回所述待测试小程序中当前打开的页面数量、获取小程序基础库版本和获取小程序运行时信息中的至少一个。
当确定测试指令指示执行的操作是运行时环境操控操作时,则直接由主进程执行运行时环境操控操作,以获取并返回待测试小程序中当前展现的页面信息、当前打开的页面数量、小程序基础库版本和小程序运行时信息中的至少一个。通过主进程进行运行时环境操控操作,从而可以直接控制小程序运行时环境,使得在小程序测试过程中,对小程序的操控能力更加全面。
在本申请另一可选实施方式中,所述页面操控操作包括:对页面中的预设控件执行触控操作、DOM(Document Object Model,页面文档对象模型)树结构获取操作和页面元素属性信息获取操作中的至少一个;其中,触控操作包括点击和/或滑动操作。
其中,预设控件可以是页面中的普通按钮、选项按钮、列表框以及组合框中的至少一个。页面元素属性信息包括页面的宽、高、位置坐标以及显示内容等中的至少一个。
当确定测试指令指示执行的操作是页面操控操作时,则主进程将测试指令发送至从进程;从进程接收主进程发送的测试指令,并执行对页面中的预设控件执行点击操作、对页面中的预设控件执行滑动操作、DOM树结构获取操作和页面元素属性信息获取操作中的至少一种。通过从进程进行上述各页面的操作或相关信息的获取,丰富了在小程序测试过程中,对小程序的页面的操控能力。
可以理解的是,通过主进程进行运行时环境操控操作,通过从进程进行页面操控操作,使得主从进程分工明确为小程序测试的有序进行提供保障;同时,通过主进程进行运行时环境操控操作,为直接操控小程序的运行时环境提供了可能,使得测试过程中对小程序的操控能力更加全面彻底。
S205、通过所述待测试小程序的从进程运行所述测试引擎从控制代码文件,以接收所述主进程发送的测试指令,并执行所述测试指令。
本申请实施例通过明确主进程进行运行时环境操控操作对应的测试指令的执行,从进程进行页面操控操作对应的测试指令的执行,为小程序测试的有序进行提供保障;同时,通过主进程进行运行时环境操控操作,为直接操控小程序的运行时环境提供了可能,使得测试过程中对小程序的操控能力更加全面彻底。
实施例三
图3是本申请实施例三中的一种小程序测试方法的流程图,本申请实施例在上述各实施例的技术方案的基础上进行了优化改进。
进一步地,在小程序测试过程中追加以下操作“通过所述从进程监听页面事件,当监听到页面事件时将页面事件信息发送给所述主进程;通过所述主进程将所述页面事件信息发送给外部的测试代理模块,以通过所述测试代理模块将所述页面事件信息发送给测试驱动模块”,以进一步丰富待测试小程序的从进程的功能。
如图3所示的一种小程序测试方法,包括:
S301、在宿主程序中的待测试小程序处于运行态时,获取待注入的测试引擎主控制代码文件和测试引擎从控制代码文件。
S302、通过所述待测试小程序的主进程运行所述测试引擎主控制代码文件,以接收外部模块发送的测试指令,并执行所述测试指令或通知所述从进程执行所述测试指令。
S303、通过所述待测试小程序的从进程运行所述测试引擎从控制代码文件,以接收所述主进程发送的测试指令,并执行所述测试指令。
S304、通过所述从进程监听页面事件,当监听到页面事件时将页面事件信息发送给所述主进程。
示例性地,在执行小程序测试过程中,开发者可以在终端设备的页面的设定控件进行触发操作,例如对页面设定控件的点击以及滑动等中的至少一种。当开发者对页面的设定控件进行触发后,从进程会监听到相应的页面事件,并将页面事件信息发送给主进程。
S305、通过所述主进程将所述页面事件信息发送给外部的测试代理模块,以通过所述测试代理模块将所述页面事件信息发送给测试驱动模块。
可以理解的是,由于从进程主要用于负责页面相关操作,并无与终端设备外的其他模块进行通行的能力,因此从进程所监听到的页面事件信息会首先发送给主进程,由主进程发送至测试代理模块,并经由测试代理模块中的操控工具进行页面事件信息的获取,经获取的页面事件信息发送至测试驱动模块进行保存,从而可捕获到用户对小程序的操作事件,进而可以支持测试用例的录制。
本申请实施例通过在对小程序进行测试的过程中,追加通过从进程监听页面事件,并在监听到页面事件时将页面事件信息发送至主进程,由主进程将页面事件信息转发至测试代理模块,以通过测试代理模块将页面事件信息发送至测试驱动模块,从而可捕获到用户对小程序的操作事件,进而可以支持测试用例的录制,为测试脚本的生成提供了数据支撑。
实施例四
图4是本申请实施例四中的一种小程序测试方法的流程图,本申请实施例在上述各实施例的技术方案的基础上进行了优化改进。
进一步地,在进行小程序测试的过程中,追加以下操作:“通过所述宿主程序的操作系统接收外部的测试代理模块转发的来自测试驱动模块的宿主程序操控指令,并执行所述宿主程序操控指令”,以实现对宿主程序自身的操控。
如图4所示的一种小程序测试方法,包括:
S401、在宿主程序中的待测试小程序处于运行态时,获取待注入的测试引擎主控制代码文件和测试引擎从控制代码文件。
S402、通过所述待测试小程序的主进程运行所述测试引擎主控制代码文件,以接收外部模块发送的测试指令,并执行所述测试指令或通知所述从进程执行所述测试指令。
S403、通过所述待测试小程序的从进程运行所述测试引擎从控制代码文件,以接收所述主进程发送的测试指令,并执行所述测试指令。
S404、通过所述宿主程序的操作系统接收外部的测试代理模块转发的来自测试驱动模块的宿主程序操控指令,并执行所述宿主程序操控指令。
在小程序测试过程中,所操控内容仅限于待测试小程序相关内容,为了达到同时对宿主程序进行操控的目的,还可以由开发者通过测试驱动模块进行宿主程序操控脚本的生成,并运行宿主程序操控脚本生成宿主程序操控指令发送至测试代理模块;测试代理模块将宿主程序操控指令转发至终端设备;终端设备通过宿主程序的操作系统接收外部的测试代理模块转发的宿主程序操控指令,并执行该宿主程序操控指令,实现对宿主程序自身的操作控制。
示例性地,宿主程序操控指令包括:针对所述宿主程序生成的UI(UserInterface,用户界面)执行操作的指令。示例性地,可以对宿主程序生成的用户界面中的设定控件执行触控操作、DOM树结构获取操作以及页面元素属性信息获取操作中的至少一个。其中,触控操作包括电机和/或滑动操作。
示例性地,对设定控件执行触控操作可以为打开待测试小程序的操作,或执行其他界面跳转操作等。
在本申请实施例的一个可选实施方式中,在宿主程序中的待测试小程序处于运行态前,可以通过宿主程序的操作系统接收外部的测试代理模块转发的来自测试驱动模块的小程序打开执行,并执行小程序打开指令,以打开待测试小程序,使待测试小程序处于运行态。上述技术方案能够通过小程序打开指令传输和执行的方式自动开启待测试小程序,无需开发者手动开启待测试小程序,即可使待测试小程序处于运行态,减少了测试前开发者的手动操作,从而提高了测试效率。
本申请实施例通过在小程序测试过程中,追加通过宿主程序的操作系统接收外部的测试代理模块转发的来自测试驱动模块的宿主程序操控指令,并执行宿主程序操控指令,实现了对宿主程序自身的操作控制,进一步丰富了在小程序测试过程中的可操控范围。
实施例五
图5是本申请实施例五中的一种小程序测试系统的结构图,本申请实施例在上述各实施例的技术方案的基础上提供了一种优选实施方式。
参加图5,小程序测试系统包括测试驱动模块510、测试代理模块520和测试引擎530。
其中,测试驱动模块510与测试代理模块520通信连接,测试代理模块520与测试引擎530通信连接。
在测试驱动模块510中集成有客户端库Client Lib,并提供相应的API,支持NodeJS引入使用,开发者无需关心底层通信细节,即可编写用于生成待测试小程序的测试指令和/或小程序打开指令的测试脚本,并通过运行测试脚本,生成相应的测试指令和/或小程序打开指令。其中,测试指令包括用于指示执行运行时环境操控操作的指令和用于指示执行页面操控操作的指令。
其中,在测试代理模块520中通过集成adb操控工具521A来获得安卓系统的终端设备的操控能力;通过集成wda操控工具521B来获得ios系统的终端设备的操纵能力,并通过设定通信协议实现与测试引擎530之间的双向通信,获得小程序的操控能力。示例性地,设定通信协议(bat protocol)522可以是WEBsocket协议,或者是通过开发者自定义的其他通信协议。
另外,在测试代理模块520中还设置有核心管理模块523,用于管理多个终端设备以及多个待测试小程序的连接,并依照相同的设定通信协议522从测试驱动模块510中进行小程序打开指令和/或测试指令的接收和解析。
其中,在待测试小程序处于运行态时,将小程序运行框架540加载到宿主程序550中,同时将测试引擎530加载到小程序运行框架540中。小程序裕兴框架540遵从一主多从的框架模式,也即当打开小程序后,由一个主进程531A控制所有页面逻辑,并由多个从进程531B对各个页面组成进行操控。
相应的,当待测试小程序处于运行态时,测试引擎530经编译形成两个模块文件,主控制代码文件(BatEngineMaster.js)532A和从控制代码文件(BatEngineSlave.js)532B。主控制代码文件532A和从控制代码文件532B通过HTTPS API下载与宿主程序当前版本相匹配的代码文件,并将下载好的主控制代码文件532A中的代码通过热加载方式注入至主进程531A中,将从控制代码文件532B通过热加载方式注入至从进程531B中,实现代码文件的动态下发。
例如,通过“http://smartprogram.baidu.com/abtapi/engine?type=1”进行与宿主程序相应版本“1”的测试控制代码文件的下载。
在宿主程序中还设置有一测试小程序,用户通过手动打开测试小程序中的调试开关,测试引擎530便会被热加载到小程序运行框架540中。
通过主进程531A运行主控制代码文件532A,能够唯一代表小程序,并同测试代理模块520建立双向通信,通过设定通信协议522,透出操控能力。
主进程531A在运行主控制代码文件532A时,接收测试代理模块520转发的测试指令,若测试指令指示执行运行时环境操控操作时,由主进程执行运行时环境操控操作,用于获取待测试小程序中当前展现的页面信息、待测试小程序中当前打开的页面数量、小程序基础库版本和小程序运行时信息等中的至少一个,并将获取的信息经有关测试代理模块520转发至测试驱动模块510中,供开发者查看或使用。若测试指令指示执行页面操控操作时,由主进程531A将测试指令下发至相应的从进程531B。
通过从进程531B运行从控制代码文件532B,模拟JS底层事件,支持各个小程序页面的各项操控能力。
从进程531B接收主进程531A下发的测试指令,并执行该测试指令对应的页面操控操作,用于对页面中的预设控件执行点击操作、对页面中的预设控件执行滑动操作、获取页面DOM树结构和获取页面元素属性信息等中的至少一个。并将获取的信息反馈至主进程531A,通过主进程531A发送至测试代理模块520中,经由测试代理模块520回传至测试驱动模块510中,供开发者查看或使用。
需要说明的是,通过小程序作为最小被操控单元,便于自动化操控脚本的编写和执行,提高了测试效率。
当测试代理模块520转发的指令包括小程序打开指令时,由宿主程序550的操作系统进行小程序打开指令的接收,并执行小程序打开指令,从而打开待测试小程序,使小程序处于运行态。
实施例六
图6是本申请实施例六中的一种小程序测试装置的结构图,本申请实施例适用于对宿主程序中的小程序进行自动测试的情况。该装置通过软件和/或硬件实现,并具体配置于安装有小程序的宿主程序的测试引擎中,该测试引擎可配置于安装有宿主程序的电子设备中。
如图6所述的一种小程序测试装置600,包括:代码文件注入单元601、主进程运行单元602和从进程运行单元603。其中,
代码文件注入单元601,用于在宿主程序中的待测试小程序处于运行态时,获取待注入的测试引擎主控制代码文件和测试引擎从控制代码文件;
主进程运行单元602,用于通过所述待测试小程序的主进程运行所述测试引擎主控制代码文件,以接收外部模块发送的测试指令,执行所述测试指令或通知所述从进程执行所述测试指令;
从进程运行单元603,用于通过所述待测试小程序的从进程运行所述测试引擎从控制代码文件,以收所述主进程发送的测试指令,并执行所述测试指令。
本申请实施例通过代码文件注入单元在宿主程序中的待测试小程序处于运行态时,获取待注入的测试引擎主控制代码文件和测试引擎从控制代码文件;采用主进程运行单元通过待测试小程序的主进程运行测试引擎主控制代码文件,以接收外部模块发送的测试指令,执行测试指令或通知从进程执行测试指令;采用从进程运行单元通过待测试小程序的从进程运行测试引擎从控制代码文件,以接收主进程发送的测试指令,并执行测试指令。上述技术方案通过直接在待测试小程序处于运行态时注入测试引擎控制代码来获取对待测试小程序进行操控的能力,不需要在宿主程序的源码上开启chrome的远程调试协议开关,同时摆脱chrome调试协议对操控操作的限制,提高了对小程序进行自动化测试的便捷度。另外,由于对小程序的操控操作无需受chrome调试协议的限制,从而扩大了对小程序进行测试时的可操控范围。
进一步地,该装置还包括,触发单元,具体用于:
在获取待注入的测试引擎主控制代码文件和测试引擎从控制代码文件之前,判断设置于所述宿主程序中的调试小程序中的调试开关是否被打开;若是,则触发执行获取待注入的测试引擎主控制代码文件和测试引擎从控制代码文件的操作。
进一步地,代码文件注入单元601,在执行获取待注入的测试引擎主控制代码文件和测试引擎从控制代码文件时,具体用于:
下载与所述宿主程序的当前版本相匹配的测试引擎主控制代码文件和测试引擎从控制代码文件;
将所述测试引擎主控制代码文件中的代码注入到所述待测试小程序的主进程中,将所述测试引擎从控制代码文件中的代码注入到所述待测试小程序的从进程中。
进一步地,主进程运行单元602,在执行接收外部模块发送的测试指令,执行所述测试指令或通知所述从进程执行所述测试指令时,具体用于:
接收外部的测试代理模块转发的来自测试驱动模块的测试指令;
判断所述测试指令指示执行的操作是运行时环境操控操作或是页面操控操作;
若是运行时环境操控操作,则执行所述测试指令,若是页面操控操作,则通知从进程执行所述测试指令。
进一步地,所述运行时环境操控操作包括:获取并返回所述待测试小程序中当前展现的页面信息、获取并返回所述待测试小程序中当前打开的页面数量、获取小程序基础库版本和获取小程序运行时信息中的至少一个;
所述页面操控操作包括:对页面中的预设控件执行触控操作、页面文档对象模型DOM树结构获取操作和页面元素属性信息获取操作中的至少一个。
其中,触控操作包括点击和/或滑动操作。
进一步地,该装置还包括,页面事件信息获取单元,具体用于:
通过所述从进程监听页面事件,当监听到页面事件时将页面事件信息发送给所述主进程;
通过所述主进程将所述页面事件信息发送给外部的测试代理模块,以通过所述测试代理模块将所述页面事件信息发送给测试驱动模块。
进一步地,该装置还包括,宿主程序操控单元,用于:
通过所述宿主程序的操作系统接收外部的测试代理模块转发的来自测试驱动模块的宿主程序操控指令,并执行所述宿主程序操控指令。
进一步地,所述宿主程序操控指令包括:针对所述宿主程序生成的用户界面UI执行操作的指令。
进一步地,该装置还包括,运行态触发单元,用于:
在宿主程序中的待测试小程序处于运行态之前,通过所述宿主程序的操作系统接收外部的测试代理模块转发的来自测试驱动模块的小程序打开指令,并执行所述小程序打开指令,以打开待测试小程序使待测试小程序处于运行态。
进一步地,若所述操作系统为安卓系统,则所述操作系统从外部的测试代理模块接收的指令是所述测试代理模块通过集成的adb工具发送的;
若所述操作系统为ios系统,则所述操作系统从外部的测试代理模块接收的指令是所述测试代理模块通过集成的wda工具发送的。
进一步地,所述待测试小程序的主进程与外部的测试代理模块之间通过WEBSocket协议进行通信。
进一步地,外部的测试代理模块在接收到测试驱动模块发送的指令时,根据至少一个终端设备的注册信息,向对应的终端设备发送所述指令。
进一步地,外部的测试驱动模块中集成有客户端库Client Lib,测试驱动模块发送给外部的测试代理模块的指令是通过运行测试脚本后发出的,所述测试脚本基于所述Client Lib中的应用程序编程接口API编写。
上述小程序测试装置可执行本申请任意实施例所提供的小程序测试方法,具备执行小程序测试方法相应的功能模块和有益效果。
实施例七
根据本申请的实施例,本申请还提供了一种电子设备和一种可读存储介质。
如图7所示,是执行本申请实施例的小程序测试方法的电子设备的框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本申请的实现。
如图7所示,该电子设备包括:一个或多个处理器701、存储器702,以及用于连接各部件的接口,包括高速接口和低速接口。各个部件利用不同的总线互相连接,并且可以被安装在公共主板上或者根据需要以其它方式安装。处理器可以对在电子设备内执行的指令进行处理,包括存储在存储器中或者存储器上以在外部输入/输出装置(诸如,耦合至接口的显示设备)上显示GUI的图形信息的指令。在其它实施方式中,若需要,可以将多个处理器和/或多条总线与多个存储器和多个存储器一起使用。同样,可以连接多个电子设备,各个设备提供部分必要的操作(例如,作为服务器阵列、一组刀片式服务器、或者多处理器系统)。图7中以一个处理器701为例。
存储器702即为本申请所提供的非瞬时计算机可读存储介质。其中,所述存储器存储有可由至少一个处理器执行的指令,以使所述至少一个处理器执行本申请所提供的小程序测试方法。本申请的非瞬时计算机可读存储介质存储计算机指令,该计算机指令用于使计算机执行本申请所提供的小程序测试方法。
存储器702作为一种非瞬时计算机可读存储介质,可用于存储非瞬时软件程序、非瞬时计算机可执行程序以及模块,如本申请实施例中的小程序测试方法对应的程序指令/模块(例如,附图6所示的包括代码文件注入单元601、主进程运行单元602和从进程运行单元603的小程序测试装置600)。处理器701通过运行存储在存储器702中的非瞬时软件程序、指令以及模块,从而执行服务器的各种功能应用以及数据处理,即实现上述方法实施例中的小程序测试方法。
存储器702可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据小程序测试方法的电子设备的使用所创建的数据等。此外,存储器702可以包括高速随机存取存储器,还可以包括非瞬时存储器,例如至少一个磁盘存储器件、闪存器件、或其他非瞬时固态存储器件。在一些实施例中,存储器702可选包括相对于处理器701远程设置的存储器,这些远程存储器可以通过网络连接至执行小程序测试方法的电子设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
执行小程序测试方法的电子设备还可以包括:输入装置703和输出装置704。处理器701、存储器702、输入装置703和输出装置704可以通过总线或者其他方式连接,图7中以通过总线连接为例。
输入装置703可接收输入的数字或字符信息,以及产生与执行小程序测试方法的电子设备的用户设置以及功能控制有关的键信号输入,例如触摸屏、小键盘、鼠标、轨迹板、触摸板、指示杆、一个或者多个鼠标按钮、轨迹球、操纵杆等输入装置。输出装置704可以包括显示设备、辅助照明装置(例如,LED)和触觉反馈装置(例如,振动电机)等。该显示设备可以包括但不限于,液晶显示器(LCD)、发光二极管(LED)显示器和等离子体显示器。在一些实施方式中,显示设备可以是触摸屏。
此处描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、专用ASIC(专用集成电路)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
这些计算程序(也称作程序、软件、软件应用、或者代码)包括可编程处理器的机器指令,并且可以利用高级过程和/或面向对象的编程语言、和/或汇编/机器语言来实施这些计算程序。如本文使用的,术语“机器可读介质”和“计算机可读介质”指的是用于将机器指令和/或数据提供给可编程处理器的任何计算机程序产品、设备、和/或装置(例如,磁盘、光盘、存储器、可编程逻辑装置(PLD)),包括,接收作为机器可读信号的机器指令的机器可读介质。术语“机器可读信号”指的是用于将机器指令和/或数据提供给可编程处理器的任何信号。
为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。
计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。
本申请实施例的技术方案,通过在宿主程序中的待测试小程序处于运行态时,获取待注入的测试引擎主控制代码文件和测试引擎从控制代码文件;通过待测试小程序的主进程运行测试引擎主控制代码文件,以接收外部模块发送的测试指令,并执行测试指令或通知从进程执行测试指令;通过待测试小程序的从进程运行测试引擎从控制代码文件,以接收主进程发送的测试指令,并执行测试指令。上述技术方案通过直接在待测试小程序处于运行态时注入测试引擎控制代码来获取对待测试小程序进行操控的能力,不需要在宿主程序的源码上开启chrome的远程调试协议开关,同时摆脱chrome调试协议对操控操作的限制,提高了对小程序进行自动化测试的便捷度。另外,由于对小程序的操控操作无需受chrome调试协议的限制,从而扩大了对小程序进行测试时的可操控范围。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发申请中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本申请公开的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本申请保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本申请的精神和原则之内所作的修改、等同替换和改进等,均应包含在本申请保护范围之内。
Claims (14)
1.一种小程序测试方法,其特征在于,包括:
在宿主程序中的待测试小程序处于运行态时,获取待注入的测试引擎主控制代码文件和测试引擎从控制代码文件;
通过所述待测试小程序的主进程运行所述测试引擎主控制代码文件,以接收外部模块发送的测试指令,并执行所述测试指令或通知从进程执行所述测试指令;
通过所述待测试小程序的从进程运行所述测试引擎从控制代码文件,以接收所述主进程发送的测试指令,并执行所述测试指令;
其中,所述待测试小程序的主进程与外部模块之间通过WEBSocket协议进行通信;
其中,所述方法还包括:
外部的测试代理模块在接收到测试驱动模块发送的指令时,根据至少一个终端设备的注册信息,向对应的终端设备发送相应指令。
2.根据权利要求1所述的方法,其特征在于,获取待注入的测试引擎主控制代码文件和测试引擎从控制代码文件,包括:
下载与所述宿主程序的当前版本相匹配的测试引擎主控制代码文件和测试引擎从控制代码文件;
将所述测试引擎主控制代码文件中的代码注入到所述待测试小程序的主进程中,将所述测试引擎从控制代码文件中的代码注入到所述待测试小程序的从进程中。
3.根据权利要求1所述的方法,其特征在于,所述接收外部模块发送的测试指令,并执行所述测试指令或通知所述从进程执行所述测试指令,包括:
接收外部的测试代理模块转发的来自测试驱动模块的测试指令;
判断所述测试指令指示执行的操作是运行时环境操控操作或是页面操控操作;
若是运行时环境操控操作,则执行所述测试指令,若是页面操控操作,则通知从进程执行所述测试指令。
4.根据权利要求3所述的方法,其特征在于:
所述运行时环境操控操作包括:获取并返回所述待测试小程序中当前展现的页面信息、获取并返回所述待测试小程序中当前打开的页面数量、获取小程序基础库版本和获取小程序运行时信息中的至少一个;
所述页面操控操作包括:对页面中的预设控件执行触控操作、页面文档对象模型DOM树结构获取操作和页面元素属性信息获取操作中的至少一个;
其中,触控操作包括点击和/或滑动操作。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
通过所述从进程监听页面事件,当监听到页面事件时将页面事件信息发送给所述主进程;
通过所述主进程将所述页面事件信息发送给外部的测试代理模块,以通过所述测试代理模块将所述页面事件信息发送给测试驱动模块。
6.根据权利要求1所述的方法,其特征在于,在获取待注入的测试引擎主控制代码文件和测试引擎从控制代码文件之前,所述方法还包括:
判断设置于所述宿主程序中的调试小程序中的调试开关是否被打开;若是,则触发执行获取待注入的测试引擎主控制代码文件和测试引擎从控制代码文件的操作。
7.根据权利要求1所述的方法,其特征在于,所述方法还包括:
通过所述宿主程序的操作系统接收外部模块发送的宿主程序操控指令,并执行所述宿主程序操控指令。
8.根据权利要求7所述的方法,其特征在于:所述宿主程序操控指令包括:针对所述宿主程序生成的用户界面UI执行操作的指令。
9.根据权利要求1所述的方法,其特征在于,在宿主程序中的待测试小程序处于运行态之前,所述方法还包括:
通过所述宿主程序的操作系统接收外部模块发送的小程序打开指令,并执行所述小程序打开指令,以打开待测试小程序使待测试小程序处于运行态。
10.根据权利要求7-9任一项所述的方法,其特征在于:
若所述操作系统为安卓系统,则所述操作系统从外部模块接收的指令是所述外部模块通过集成的adb工具发送的;
若所述操作系统为ios系统,则所述操作系统从外部模块接收的指令是所述外部模块通过集成的wda工具发送的。
11.一种小程序测试装置,其特征在于,包括:
代码文件注入单元,用于在宿主程序中的待测试小程序处于运行态时,获取待注入的测试引擎主控制代码文件和测试引擎从控制代码文件;
主进程运行单元,用于通过所述待测试小程序的主进程运行所述测试引擎主控制代码文件,以接收外部模块发送的测试指令,并执行所述测试指令或通知从进程执行所述测试指令;
从进程运行单元,用于通过所述待测试小程序的从进程运行所述测试引擎从控制代码文件,以接收所述主进程发送的测试指令,并执行所述测试指令;
其中,所述待测试小程序的主进程与外部模块之间通过WEBSocket协议进行通信;
其中,外部的测试代理模块在接收到测试驱动模块发送的指令时,根据至少一个终端设备的注册信息,向对应的终端设备发送相应指令。
12.一种小程序测试系统,其特征在于,所述系统包括:测试驱动模块、测试代理模块和测试引擎;
所述测试驱动模块与所述测试代理模块通信连接,所述测试代理模块与所述测试引擎通信连接;
所述测试驱动模块,用于生成测试指令;
所述测试引擎,用于在宿主程序中的待测试小程序处于运行态时,获取待注入的测试引擎主控制代码文件和测试引擎从控制代码文件;
所述测试引擎,还用于通过所述待测试小程序的主进程运行所述测试引擎主控制代码文件,以接收所述测试代理模块转发的来自所述测试驱动模块的测试指令,并执行所述测试指令或通知从进程执行所述测试指令;
所述测试引擎,还用于通过所述待测试小程序的从进程运行所述测试引擎从控制代码文件,以接收所述主进程发送的测试指令,执行所述测试指令;
其中,所述待测试小程序的主进程与外部模块之间通过WEBSocket协议进行通信;
其中,外部的测试代理模块在接收到测试驱动模块发送的指令时,根据至少一个终端设备的注册信息,向对应的终端设备发送相应指令。
13.一种电子设备,其特征在于,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-10中任一项所述的一种小程序测试方法。
14.一种存储有计算机指令的非瞬时计算机可读存储介质,其特征在于,所述计算机指令用于使所述计算机执行权利要求1-10中任一项所述的一种小程序测试方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911039594.6A CN110750463B (zh) | 2019-10-29 | 2019-10-29 | 一种小程序测试方法、装置、系统、设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911039594.6A CN110750463B (zh) | 2019-10-29 | 2019-10-29 | 一种小程序测试方法、装置、系统、设备及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110750463A CN110750463A (zh) | 2020-02-04 |
CN110750463B true CN110750463B (zh) | 2023-06-23 |
Family
ID=69280908
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911039594.6A Active CN110750463B (zh) | 2019-10-29 | 2019-10-29 | 一种小程序测试方法、装置、系统、设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110750463B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111338937B (zh) * | 2020-02-19 | 2023-06-23 | 百度在线网络技术(北京)有限公司 | 一种对小程序干预下线的方法、装置、设备和介质 |
CN112000950A (zh) * | 2020-06-30 | 2020-11-27 | 深圳点猫科技有限公司 | 一种防拦截的程序运行与交互控制方法及装置 |
CN112596760A (zh) * | 2020-12-09 | 2021-04-02 | 武汉联影医疗科技有限公司 | 软件维护方法、装置和设备 |
CN113515446A (zh) * | 2021-05-08 | 2021-10-19 | 上海安畅网络科技股份有限公司 | 一种小程序测试方法、装置、设备及存储介质 |
CN113760762B (zh) * | 2021-09-08 | 2024-03-08 | 贝壳找房(北京)科技有限公司 | 小程序的运行环境模拟方法、电子设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108885528A (zh) * | 2016-03-29 | 2018-11-23 | 微软技术许可有限责任公司 | 针对在用户界面中绘图的引导对象 |
CN109491916A (zh) * | 2018-11-12 | 2019-03-19 | 北京东土科技股份有限公司 | 一种操作系统的测试方法、装置、设备、系统和介质 |
CN109614341A (zh) * | 2018-12-29 | 2019-04-12 | 微梦创科网络科技(中国)有限公司 | 一种代码覆盖率的测试方法及系统 |
CN109933530A (zh) * | 2019-03-14 | 2019-06-25 | 百度在线网络技术(北京)有限公司 | 控件测试方法及装置、设备及存储介质 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106502905A (zh) * | 2016-10-26 | 2017-03-15 | 腾讯科技(深圳)有限公司 | 一种应用程序的测试方法、装置及系统 |
CN107783899B (zh) * | 2017-08-25 | 2020-11-24 | 深圳壹账通智能科技有限公司 | 应用程序中h5页面的测试方法、装置和计算机设备 |
CN107704396A (zh) * | 2017-10-20 | 2018-02-16 | 平安科技(深圳)有限公司 | 应用程序的测试方法及装置 |
US11436131B2 (en) * | 2017-12-13 | 2022-09-06 | Citrix Systems, Inc. | Systems and methods for software testing using a disposable code |
CN108345535B (zh) * | 2017-12-26 | 2022-03-04 | 创新先进技术有限公司 | mock测试方法、装置及设备 |
CN108536594B (zh) * | 2018-04-02 | 2022-03-08 | 腾讯科技(武汉)有限公司 | 页面测试方法、装置及存储设备 |
CN108595329B (zh) * | 2018-04-23 | 2022-08-26 | 腾讯科技(深圳)有限公司 | 一种应用测试方法、装置及计算机存储介质 |
CN109344058B (zh) * | 2018-09-18 | 2021-06-15 | 北京云测信息技术有限公司 | 一种小程序自动化测试方法 |
CN109739754B (zh) * | 2018-12-25 | 2022-03-11 | 北京仁科互动网络技术有限公司 | 基于微信开发的应用程序自动化测试方法及系统 |
-
2019
- 2019-10-29 CN CN201911039594.6A patent/CN110750463B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108885528A (zh) * | 2016-03-29 | 2018-11-23 | 微软技术许可有限责任公司 | 针对在用户界面中绘图的引导对象 |
CN109491916A (zh) * | 2018-11-12 | 2019-03-19 | 北京东土科技股份有限公司 | 一种操作系统的测试方法、装置、设备、系统和介质 |
CN109614341A (zh) * | 2018-12-29 | 2019-04-12 | 微梦创科网络科技(中国)有限公司 | 一种代码覆盖率的测试方法及系统 |
CN109933530A (zh) * | 2019-03-14 | 2019-06-25 | 百度在线网络技术(北京)有限公司 | 控件测试方法及装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN110750463A (zh) | 2020-02-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110750463B (zh) | 一种小程序测试方法、装置、系统、设备及介质 | |
CN111694564B (zh) | Flutter混合模式的编译方法、装置、设备和介质 | |
US20130263090A1 (en) | System and method for automated testing | |
CN111459816B (zh) | 故障注入测试方法、装置、系统及存储介质 | |
US20140359558A1 (en) | System and methods for end-users to graphically program and manage computers and devices | |
Hellman | Android programming: Pushing the limits | |
CN110781085B (zh) | 一种游戏自动化测试方法、装置、终端和计算机存储介质 | |
JP7030177B2 (ja) | テスト方法及び装置 | |
KR101118602B1 (ko) | 장면 기반 테스트 자동화 방법 및 그 시스템 | |
Ridene et al. | A model-driven approach for automating mobile applications testing | |
CN106775692B (zh) | 一种组件编辑方法以及电子设备 | |
CN110928625A (zh) | 应用程序的运行控制方法、装置、电子设备及存储介质 | |
CN106066792A (zh) | 一种基于WiFi的软件无线远程调试更新系统及方法 | |
KR20230088427A (ko) | 파일 송신 방법, 파일 송신 장치 및 전자기기 | |
CN111610972B (zh) | 页面生成方法、装置、设备及存储介质 | |
JP2020030621A (ja) | 情報処理装置およびプログラム | |
CN112506793A (zh) | 嵌入式软件单元测试方法、系统、可读介质及电子设备 | |
CN113377346B (zh) | 集成环境搭建方法、装置、电子设备及存储介质 | |
CN111435328A (zh) | 应用测试方法、装置、电子设备及可读存储介质 | |
CN114416578A (zh) | 测试方法和装置 | |
CN111767170B (zh) | 设备的操作复原方法、装置、设备以及存储介质 | |
CN111858302B (zh) | 小程序的测试方法、装置、电子设备及存储介质 | |
Dutson | Android Development Patterns: Best Practices for Professional Developers | |
Leszczynski | OPC UA App development for Android | |
CN113051122A (zh) | 性能数据获取方法、装置、电子设备和介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |