CN111694729A - 应用测试方法、装置、电子设备和计算机可读介质 - Google Patents

应用测试方法、装置、电子设备和计算机可读介质 Download PDF

Info

Publication number
CN111694729A
CN111694729A CN202010359386.0A CN202010359386A CN111694729A CN 111694729 A CN111694729 A CN 111694729A CN 202010359386 A CN202010359386 A CN 202010359386A CN 111694729 A CN111694729 A CN 111694729A
Authority
CN
China
Prior art keywords
node
java
application
target
data
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.)
Pending
Application number
CN202010359386.0A
Other languages
English (en)
Inventor
王奇
许生模
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Sankuai Online Technology Co Ltd
Original Assignee
Beijing Sankuai Online Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Sankuai Online Technology Co Ltd filed Critical Beijing Sankuai Online Technology Co Ltd
Priority to CN202010359386.0A priority Critical patent/CN111694729A/zh
Publication of CN111694729A publication Critical patent/CN111694729A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3676Test management for coverage analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Computing Systems (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本申请实施例公开了应用测试方法、装置、电子设备和计算机可读介质。该方法的实施例包括:通过待测应用向服务端发送网络请求,接收服务端返回的数据;将数据转换为Java组件;将Java组件转换为多叉树;遍历多叉树中的节点,对于所遍历到的每一个节点,修改该节点中的数据,将修改数据后的多叉树转换为Java组件,并返回至待测应用,以使待测应用基于所接收到的Java组件进行页面刷新;基于刷新后的页面,检测待测应用是否异常。该实施方式提高了应用测试效率以及测试的全面性。

Description

应用测试方法、装置、电子设备和计算机可读介质
技术领域
本申请实施例涉及计算机技术领域,具体涉及应用测试方法、装置、电子设备和计算机可读介质。
背景技术
随着计算机技术的发展,为了满足用户日益增多的需求,应用(Application,APP)的功能也越来越多。在应用发布之前,通常需要进行测试。由于应用的用户界面(UserInterface,UI)展示过程本质上是将数据加以转换并实现可视化的过程,因此在测试过程中,通常会通过mock测试方式来对数据进行修改,以查看应用的UI展示情况以及检测数据出现异常时应用的健壮性。
现有技术中,通常由测试人员构建各类请求对应的接口数据,并手动改变接口数据中的字段值,而后通过代理工具(如Charles工具)将接口指向本地测试设备,如本地PC(Personal Computer,个人计算机)。在待测应用发起请求后,将修改字段后的相应数据进行返回,以测试待测应用的UI展示请求。这种方式由于测试人员手写接口数据耗时较长,且同一个接口每修改一次接口数据,都需要重新操作应用进行验证,因而测试效率较低。同时,随着项目复杂度的提高,接口数据中的字段越来越多,手动修改接口数据难以覆盖所有字段,导致测试不全面。
发明内容
本申请实施例提出了应用测试方法、装置、电子设备和计算机可读介质,以提高测试效率以及测试的全面性。
第一方面,本申请实施例提供了一种应用测试方法,该方法包括:通过待测应用向服务端发送网络请求,接收服务端返回的数据;将数据转换为Java组件;将Java组件转换为多叉树;遍历多叉树中的节点,对于所遍历到的每一个节点,修改该节点中的数据,将修改数据后的多叉树转换为Java组件,并返回至待测应用,以使待测应用基于所接收到的Java组件进行页面刷新;基于刷新后的页面,检测待测应用是否异常。
第二方面,本申请实施例提供了一种应用测试装置,该装置包括:发送单元,被配置成通过待测应用向服务端发送网络请求,接收服务端返回的数据;第一转换单元,被配置成将数据转换为Java组件;第二转换单元,被配置成将Java组件转换为多叉树;遍历单元,被配置成遍历多叉树中的节点,对于所遍历到的每一个节点,修改该节点中的数据,将修改数据后的多叉树转换为Java组件,并返回至待测应用,以使待测应用基于所接收到的Java组件进行页面刷新;检测单元,被配置成基于刷新后的页面,检测待测应用是否异常。
第三方面,本申请实施例提供了一种电子设备,包括:一个或多个处理器;存储装置,其上存储有一个或多个程序,当一个或多个程序被一个或多个处理器执行,使得一个或多个处理器实现如第一方面中所描述的方法。
第四方面,本申请实施例提供了一种计算机可读介质,其上存储有计算机程序,该程序被处理器执行时实现如第一方面中所描述的方法。
本申请实施例提供的应用测试方法、装置、电子设备和计算机可读介质,通过待测应用向服务端发送网络请求,以接收服务端返回的数据;而后将该数据转换为Java组件,并将Java组件转换为多叉树;之后遍历多叉树中的节点,对于所遍历到的每一个节点,修改该节点中的数据,将修改数据后的多叉树转换为Java组件,并返回至待测应用,以使待测应用基于所接收到的Java组件进行页面刷新;从而基于刷新后的页面,检测待测应用是否异常。由此,一方面,由于每遍历到一个节点后,自动对服务端返回的数据进行修改,因而降低了时间成本,提高了测试效率。另一方面,多叉树由服务端返回的数据转化而成,每遍历到多叉树中的一个节点时均进行一次数据修改,由此,可对数据中的各项内容,提高了测试的全面性。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1是根据本申请的应用测试方法的一个实施例的流程图;
图2是根据本申请的遍历多叉树中的节点的过程的流程图;
图3是根据本申请的应用测试装置的一个实施例的结构示意图;
图4是适于用来实现本申请实施例的电子设备的计算机系统的结构示意图。
具体实施方式
下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
请参考图1,其示出了根据本申请的应用测试方法的一个实施例的流程100。该应用测试方法可以应用于测试设备。上述测试设备可以是各种电子设备,如手机、平板电脑、膝上型便携计算机、台式计算机等。该应用测试方法可以包括以下步骤:
步骤101,通过待测应用向服务端发送网络请求,接收服务端返回的数据。
在本实施例中,应用测试方法的执行主体(如上述测试设备)中可以安装有待测应用。上述执行主体可以通过待测应用向服务端发送网络请求,并在网络层中接收服务端返回的数据。此处的网络请求可以是用于请求服务端的各种数据或者服务的请求,本实施例对此不作限定。
此处的服务端可以是硬件,也可以是软件。当服务端为硬件时,可以实现成多个服务器/设备组成的分布式服务器集群/分布式设备集群,也可以实现成单个服务器/单个设备。当服务端为软件时,可以实现成多个软件或软件模块(例如用来提供分布式服务),也可以实现成单个软件或软件模块。在此不做具体限定。
实践中,可由测试人员通过操作待测应用实现网络请求的发送。作为示例,待测应用为点餐类应用。若需要测试输入菜品名称后的用户界面展现情况,则测试人员可以在该应用中输入某菜品名称,并触发待测应用中的搜索按键,实现网络请求的发送。
步骤102,将数据转换为Java组件。
在本实施例中,服务端返回的数据通常为JSON(JavaScript Object Notation,JS对象简谱)格式的数据。上述执行主体可以将服务端返回的数据转换为Java(一种面向对象编程语言)组件,如JavaBean。其中,JavaBean是一种Java语言写成的可重用组件。
以将数据转换为Javabean为例,可以采用各种现有的用于将JSON数据转换为Javabean的转换方式进行转换。作为一个示例,可以通过Java提供的JSONObject来进行转换。其中,JSONObject是Java提供的一个用于进行数据格式转换的包。JSONObject可以很方便的将JSON数据转换成Javabean,也可以很方便的把Javabean等数据转换成JSON数据。作为又一示例,可以采用第三方库(如Fastjson、GSON)等,将服务端返回的数据转换为Java组件。
步骤103,将Java组件转换为多叉树。
在本实施例中,可以预先创建将Java组件转化为多叉树的逻辑的代码。上述执行主体可以在执行步骤102后运行该逻辑应的代码,从而将Java组件转换为多叉树。其中,多叉树是一种树结构,多叉树中的每一个节点有一个数据项,每一个节点可以有一个或多个子节点。
在将Java组件转换为多叉树时,具体可以先将Java组件中的每一个字段作为多叉树的一个节点,而后,基于Java组件中的各字段的从属关系,将各节点进行连接,从而形成多叉树。
需要说明的是,由于网络层位于第三方SDK(Software Development Kit,软件开发工具包)中,第三方SDK是以JAR(Java Archive,Java归档)包的形式提供,其Java源码不可修改。因而,需要操作第三方SDK中的代码以增加Java组件转化为多叉树的逻辑,来实现从Java组件至多叉树的转换。
实践中,JAR包以及Java源码均为Java class文件(.class文件)。Android(安卓)平台构建工具gradle提供了Transfrom API。Transfrom API允许第三方插件在打包dex文件(Android系统的可执行文件,包含应用程序的全部操作指令以及运行时数据)之前的编译过程中操作.class文件,因而Transfrom API可供开发者获取编译过程中的中间产物。由此,可通过Transfrom API构建一个gradle插件,通过该gradle插件采用插桩的方式插入用于将Java组件转换为多叉树的代码,从而实现在网络层将Java组件转换为多叉树。其中,插桩即为在编译后的字节码文件中插入特定代码的操作,可由gradle插件实现。gradle插件是使用Java或groovy(一种基于JVM(Java虚拟机)的敏捷开发语言)编写的一段在构建过程中执行的代码。
在本实施例的一些可选的实现方式中,在插桩过程中,具体可通过如下步骤操作第三方SDK中的代码以增加Java组件转化为多叉树的逻辑,从而实现从Java组件至多叉树的转换:
第一步,查找目标类。目标类为网络层接收服务端返回的数据的类。
第二步,在目标类中查找第一目标方法。第一目标方法为接收服务端返回的数据并向业务层回调的方法。
第三步,在第一目标方法中插入第一目标代码。第一目标代码用于将Java组件转换为多叉树。例如,若Java组件为Javabean,则第一目标代码即可包含将Javabean转换为多叉树的逻辑。
第四步,执行第一目标代码,将Java组件转换为多叉树。需要说明的是,上述第一步至第三步可以预先完成,从而可以在每次接收到服务端返回的数据并将其转换为Java组件后,执行第一目标代码,将Java组件转换为多叉树。
在该实现方式中,可选的,上述第一目标代码可以通过如下步骤将上述Java组件转换为多叉树:
第一步,通过反射(reflection)机制获取Java组件中的各字段。其中,反射即使为Java在运行时获取类信息的机制。通过反射机制,可在程序的运行状态中,构造任意一个类的对象,了解任意一个对象所属的类,了解任意一个类的成员变量和方法,调用任意一个对象的属性和方法。反射机制具有动态获取程序信息以及动态调用对象的功能。
第二步,检测Java组件中的各个字段的类型。
此处,每一个字段可以包含类型和值。字段的类型可以包括Java基础类和自定义类。其中,Java基础类可以包括Java的基本数据类型和Java语言的软件开发工具包(JavaDevelopment Kit,JDK)中的类。Java基本类型可以包括但不限于整数型(如byte,short,int,long)、浮点型(如float,double)、布尔型(如boolean)、字符型(如char)等。Java语言的软件开发工具包中的类可以包括但不限于String类、Object类、Scanner类、System类、Arrays类、Integer类等。
第三步,对于每一个字段,若该字段的类型为Java基础类,则将该字段作为叶子节点,若该字段的类型为自定义类,则将该字段作为非叶子节点。
实践中,由于Java的基本数据类型与Java语言的软件开发工具包中的类中的字段不可再被分割,因此这两种字段为多叉树的叶子节点。由于自定义类的字段可包含一个或多个字段,因而自定义类的字段可作为非叶子节点。
第四步,基于各字段的从属关系对各节点进行连接,生成多叉树。
通过将服务端返回的数据转化为Java组件,再将Java组件按字段转换为多叉树,可以对多叉树中的各节点逐一进行遍历和修改,以测试待测应用的UI界面的表现,提高了测试的全面性。
步骤104,遍历多叉树中的节点,对于所遍历到的每一个节点,修改该节点中的数据,将修改数据后的多叉树转换为Java组件,并返回至待测应用,以使待测应用基于所接收到的Java组件进行页面刷新。
在本实施例中,上述执行主体可以采用深度优先或者广度优先等各种遍历方式,遍历多叉树中的节点。对于所遍历到的每一个节点,可以修改该节点中的数据,将修改数据后的多叉树转换为Java组件,从而将转换后的Java组件返回至待测应用,以使待测应用基于所接收到的Java组件进行页面刷新。由此,可逐一地检测每一个节点的数据被修改时待测应用的UI界面的表现,提高了测试的全面性。
在本实施例的一些可选的实现方式中,每一个节点可以对应Java组件中的一个字段,每一个字段可以包含类型和值。因而,对于所遍历到的每一个节点,可以修改该节点的类型和/或值,以实现对该节点中的数据的修改。例如,某个字段的类型为String,值为“数学”,则可以将字段的类型修改为其他类型,如Scanner。在将修改后的多叉树转换为Java组件并返回至应用层后,即可查看待测应用的UI界面的展示情况。
在本实施例的一些可选的实现方式中,可借助队列的数据结构来遍历多叉树中的节点,读取队列中的节点的过程即为遍历节点的过程,具体参见图2所示的流程图,包括如下子步骤S11至子步骤S16:
子步骤S11,将多叉树中的各节点存入队列,读取队列中的首个节点,将所读取的节点作为目标节点,执行如下列表循环步骤:
子步骤S12,检测目标节点的类型是否为Java基础类。
子步骤S13,响应于目标节点的类型为Java基础类,读取队列中的下一节点,将下一节点作为目标节点,重新执行列表循环步骤(即重新从子步骤S12开始执行)。
子步骤S14,响应于目标节点的类型不为Java基础类,检测目标节点的类型是否为列表(list)类。
子步骤S15,响应于目标节点的类型为列表类,将目标节点中的各字段作为节点存入队列,并读取队列中的下一节点,将下一节点作为目标节点,重新执行列表循环步骤(即重新从子步骤S12开始执行)。
由于列表类的节点中可能包含多个字段,将列表中的各字段分别作为新的节点存入队列,可遍历到列表类的节点中的各个字段,提高了测试的全面性。
子步骤S16,响应于目标节点的类型不为列表类,执行如下步骤:
首先,获取目标节点中的各字段。
而后,对于所获取的每一个字段,若该字段的类型为列表类,则将该字段中的数据的类型设置为泛型类型,构造该字段对应的节点,并将所构造的节点存入上述队列;若该字段的类型不为列表类,则将该字段作为节点存入上述队列。
之后,读取上述队列中的下一节点,将上述下一节点作为目标节点,重新执行上述列表循环步骤(同子步骤S13中响应于目标节点的类型为Java基础类之后所执行的步骤)。
由此,对于多叉树中的类型不为Java基础类且不为list类的节点,可以将该节点中的每一字段构造为一个节点存入队列,从而可遍历到类型不为Java基础类且不为list类的节点中的各个字段,提高了测试的全面性。
步骤105,检测刷新后的页面是否异常。
在本实施例中,由于每更改一次数据,待测应用均刷新一次页面,因而,可以在待测应用每次进行页面刷新后,检测刷新后的页面是否异常。
作为示例,可以检测刷新后的页面是否为所请求的页面,若不是所请求的页面,可认为刷新后的页面异常。
作为又一示例,上述执行主体中可以预先有目标页面。目标页面即为发送相同网络请求后应展现的正确页面。此时,上述执行主体可以将刷新后的页面与目标页面进行比对,并基于比对结果,确定待测应用是否异常。例如,可以将刷新后的页面与目标页面进行相似度计算,若相似度计算结果大于或等于预设值,则可认为刷新后的页面与目标页面相同,此时,可认为待测应用正常。反之,若相似度计算结果小于预设值,则可认为刷新后的页面与目标页面不同,此时,可认为待测应用异常。
在本实施例的一些可选的实现方式中,由于数据修改后可能会造成崩溃(crash),如程序停止工作、宕机等,因而,需要防止测试过程中待测应用进程终止。上述执行主体可以在上述第一目标方法(即向业务层回调的方法)中添加第二目标代码,上述第二目标代码用于指示在运行异常时跳过异常代码并收集异常信息。实践中,上述第二目标代码可以是try-catch代码。try-catch代码的原理为:如果try中的代码没有出错,则程序正常运行try中的内容后,不会执行catch中的内容;如果try中的代码出错,程序立即跳入catch中去执行代码,那么try中出错代码后的所有代码就不再执行了。由此,可以防止同一个栈帧(Stack Frame)执行过程中发生crash时待测应用进程终止。
在本实施例的一些可选的实现方式中,由于Android是消息队列驱动的系统,页面的生命周期方法、视图的交互与渲染、列表的滑动等都是将事件消息放入队列中再依次取出,如果这些核心方法中出现crash将会打断兼容性测试的流程。因此,为防止测试过程中待测应用进程终止,上述执行主体还可以在业务层添加第三目标代码,第三目标代码也可以为try-catch代码。上述第三目标代码可以用于指示在运行异常时收集异常信息并执行上述第二目标方法。上述第二目标方法可以包括以下至少一项:页面的生命周期方法、自定义视图的测量方法、自定义视图的定位方法、自定义视图的渲染方法、自定义视图的列表的数据绑定方法。由此,可避免跨栈帧调用发生crash时待测应用进程终止。
在本实施例的一些可选的实现方式中,上述执行主体还可以将所收集到的异常信息汇总为文件,并将上述文件上传至统计平台。通过统计平台,可将该文件发送给相应的开发人员进行处理。
本申请的上述实施例提供的方法,通过待测应用向服务端发送网络请求,以接收服务端返回的数据;而后将该数据转换为Java组件,并将Java组件转换为多叉树;之后遍历多叉树中的节点,对于所遍历到的每一个节点,修改该节点中的数据,将修改数据后的多叉树转换为Java组件,并返回至上述待测应用,以使上述待测应用基于所接收到的Java组件进行页面刷新;从而基于刷新后的页面,检测上述待测应用是否异常。由此,一方面,由于每遍历到一个节点后,自动对服务端返回的数据进行修改,因而降低了时间成本,提高了测试效率。另一方面,多叉树由服务端返回的数据转化而成,每遍历到多叉树中的一个节点时均进行一次数据修改,由此,可对数据中的各项内容,提高了测试的全面性。
进一步参考图3,作为对上述各图所示方法的实现,本申请提供了一种应用测试装置的一个实施例,该装置实施例与图1所示的方法实施例相对应,该装置具体可以应用于各种电子设备中。
如图3所示,本实施例所述的应用测试装置300包括:发送单元301,被配置成通过待测应用向服务端发送网络请求,接收服务端返回的数据;第一转换单元302,被配置成将上述数据转换为Java组件;第二转换单元303,被配置成将上述Java组件转换为多叉树;遍历单元304,被配置成遍历上述多叉树中的节点,对于所遍历到的每一个节点,修改该节点中的数据,将修改数据后的多叉树转换为Java组件,并返回至上述待测应用,以使上述待测应用基于所接收到的Java组件进行页面刷新;检测单元305,被配置成基于刷新后的页面,检测上述待测应用是否异常。
在本实施例的一些可选的实现方式中,上述第二转换单元303,进一步被配置成:查找目标类,上述目标类为网络层接收上述服务端返回的数据的类;在上述目标类中查找第一目标方法,上述第一目标方法为接收服务端返回的数据并向业务层回调的方法;在上述第一目标方法中插入第一目标代码,上述第一目标代码用于将上述Java组件转换为多叉树;执行上述第一目标代码,将上述Java组件转换为多叉树。
在本实施例的一些可选的实现方式中,上述第二转换单元303,进一步被配置成:通过反射机制获取上述Java组件中的各字段;检测上述Java组件中的各个字段的类型;对于每一个字段,若该字段的类型为Java基础类,则将该字段作为叶子节点,若该字段的类型为自定义类,则将该字段作为非叶子节点,其中,上述Java基础类包括Java的基本数据类型和Java语言的软件开发工具包中的类;基于各字段的从属关系对各节点进行连接,生成多叉树。
在本实施例的一些可选的实现方式中,上述第二转换单元303,进一步被配置成:对于所遍历到的每一个节点,修改该节点的类型和/或值。
在本实施例的一些可选的实现方式中,上述遍历单元304,进一步被配置成:将上述多叉树中的各节点存入队列,读取上述队列中的首个节点,将所读取的节点作为目标节点,执行如下列表循环步骤:检测上述目标节点的类型是否为Java基础类;响应于上述目标节点的类型为Java基础类,读取上述队列中的下一节点,将上述下一节点作为目标节点,重新执行上述列表循环步骤;响应于上述目标节点的类型不为Java基础类,检测上述目标节点的类型是否为列表类;响应于上述目标节点的类型为列表类,将上述目标节点中的各字段作为节点存入上述队列,并读取上述队列中的下一节点,将上述下一节点作为目标节点,重新执行上述列表循环步骤;响应于上述目标节点的类型不为列表类,执行如下步骤:获取上述目标节点中的各字段;对于所获取的每一个字段,若该字段的类型为列表类,则将该字段中的数据的类型设置为泛型类型,构造该字段对应的节点,并将所构造的节点存入上述队列,若该字段的类型不为列表类,则将该字段作为节点存入上述队列;读取上述队列中的下一节点,将上述下一节点作为目标节点,重新执行上述列表循环步骤。
在本实施例的一些可选的实现方式中,上述装置还包括:第一添加单元,被配置成在上述第一目标方法中添加第二目标代码,上述第二目标代码用于指示在运行异常时跳过异常代码并收集异常信息;第二添加单元,被配置成在业务层添加第三目标代码,上述第三目标代码用于指示在运行异常时收集异常信息并执行上述第二目标方法,上述第二目标方法包括以下至少一项:页面的生命周期方法、自定义视图的测量方法、自定义视图的定位方法、自定义视图的渲染方法、自定义视图的列表的数据绑定方法。
在本实施例的一些可选的实现方式中,上述装置还包括:上传单元,被配置成将所收集到的异常信息汇总为文件;将上述文件上传至统计平台。
在本实施例的一些可选的实现方式中,上述检测单元305,进一步被配置成:将刷新后的页面与目标页面进行比对;基于比对结果,确定待测应用是否异常。
本申请的上述实施例提供的装置,通过待测应用向服务端发送网络请求,以接收服务端返回的数据;而后将该数据转换为Java组件,并将Java组件转换为多叉树;之后遍历多叉树中的节点,对于所遍历到的每一个节点,修改该节点中的数据,将修改数据后的多叉树转换为Java组件,并返回至上述待测应用,以使上述待测应用基于所接收到的Java组件进行页面刷新;从而基于刷新后的页面,检测上述待测应用是否异常。由此,一方面,由于每遍历到一个节点后,自动对服务端返回的数据进行修改,因而降低了时间成本,提高了测试效率。另一方面,多叉树由服务端返回的数据转化而成,每遍历到多叉树中的一个节点时均进行一次数据修改,由此,可对数据中的各项内容,提高了测试的全面性。
下面参考图4,其示出了适于用来实现本申请实施例的电子设备的计算机系统400的结构示意图。图4示出的电子设备仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图4所示,计算机系统400包括中央处理单元(CPU)401,其可以根据存储在只读存储器(ROM)402中的程序或者从存储部分408加载到随机访问存储器(RAM)403中的程序而执行各种适当的动作和处理。在RAM 403中,还存储有系统400操作所需的各种程序和数据。CPU401、ROM 402以及RAM 403通过总线404彼此相连。输入/输出(I/O)接口405也连接至总线404。
以下部件连接至I/O接口405:包括键盘、鼠标等的输入部分406;包括诸如液晶显示器(LCD)等以及扬声器等的输出部分407;包括硬盘等的存储部分408;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分409。通信部分409经由诸如因特网的网络执行通信处理。驱动器410也根据需要连接至I/O接口405。可拆卸介质411,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器410上,以便于从其上读出的计算机程序根据需要被安装入存储部分408。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分409从网络上被下载和安装,和/或从可拆卸介质411被安装。在该计算机程序被中央处理单元(CPU)401执行时,执行本申请的方法中限定的上述功能。需要说明的是,本申请所述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本申请实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元也可以设置在处理器中,其中,这些单元的名称在某种情况下并不构成对该单元本身的限定。
作为另一方面,本申请还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的装置中所包含的;也可以是单独存在,而未装配入该装置中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该装置执行时,使得该装置:通过待测应用向服务端发送网络请求,并获取服务端返回的数据;将数据转换为Java组件;将Java组件转换为多叉树;遍历多叉树中的节点,对于所遍历到的每一个节点,修改该节点中的数据,将修改数据后的多叉树转换为Java组件,并返回至待测应用,以使待测应用基于所接收到的Java组件进行页面刷新;基于刷新后的页面,检测待测应用是否异常。
以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。

Claims (11)

1.一种应用测试方法,其特征在于,所述方法包括:
通过待测应用向服务端发送网络请求,接收服务端返回的数据;
将所述数据转换为Java组件;
将所述Java组件转换为多叉树;
遍历所述多叉树中的节点,对于所遍历到的每一个节点,修改该节点中的数据,将修改数据后的多叉树转换为Java组件,并返回至所述待测应用,以使所述待测应用基于所接收到的Java组件进行页面刷新;
检测刷新后的页面是否异常。
2.根据权利要求1所述的方法,其特征在于,所述将所述Java组件转换为多叉树,包括:
查找目标类,所述目标类为网络层接收所述服务端返回的数据的类;
在所述目标类中查找第一目标方法,所述第一目标方法为接收所述服务端返回的数据并向业务层回调的方法;
在所述第一目标方法中插入第一目标代码,所述第一目标代码用于将所述Java组件转换为多叉树;
执行所述第一目标代码,将所述Java组件转换为多叉树。
3.根据权利要求2所述的方法,其特征在于,所述第一目标代码通过如下步骤将所述Java组件转换为多叉树:
通过反射机制获取所述Java组件中的各字段;
检测所述Java组件中的各个字段的类型;
对于每一个字段,若该字段的类型为Java基础类,则将该字段作为叶子节点,若该字段的类型为自定义类,则将该字段作为非叶子节点,其中,所述Java基础类包括Java的基本数据类型和Java语言的软件开发工具包中的类;
基于各字段的从属关系对各节点进行连接,生成多叉树。
4.根据权利要求3所述的方法,其特征在于,所述对于所遍历到的每一个节点,修改该节点中的数据,包括:
对于所遍历到的每一个节点,修改该节点的类型和/或值。
5.根据权利要求3所述的方法,其特征在于,所述遍历所述多叉树中的节点,包括:
将所述多叉树中的各节点存入队列,读取所述队列中的首个节点,将所读取的节点作为目标节点,执行如下列表循环步骤:
检测所述目标节点的类型是否为Java基础类;
响应于所述目标节点的类型为Java基础类,读取所述队列中的下一节点,将所述下一节点作为目标节点,重新执行所述列表循环步骤;
响应于所述目标节点的类型不为Java基础类,检测所述目标节点的类型是否为列表类;
响应于所述目标节点的类型为列表类,将所述目标节点中的各字段作为节点存入所述队列,并读取所述队列中的下一节点,将所述下一节点作为目标节点,重新执行所述列表循环步骤;
响应于所述目标节点的类型不为列表类,执行如下步骤:获取所述目标节点中的各字段;对于所获取的每一个字段,若该字段的类型为列表类,则将该字段中的数据的类型设置为泛型类型,构造该字段对应的节点,并将所构造的节点存入所述队列,若该字段的类型不为列表类,则将该字段作为节点存入所述队列;读取所述队列中的下一节点,将所述下一节点作为目标节点,重新执行所述列表循环步骤。
6.根据权利要求2所述的方法,其特征在于,所述方法还包括:
在所述第一目标方法中添加第二目标代码,所述第二目标代码用于指示在运行异常时跳过异常代码并收集异常信息;
在业务层添加第三目标代码,所述第三目标代码用于指示在运行异常时收集异常信息并执行所述第二目标方法,所述第二目标方法包括以下至少一项:页面的生命周期方法、自定义视图的测量方法、自定义视图的定位方法、自定义视图的渲染方法、自定义视图的列表的数据绑定方法。
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
将所收集到的异常信息汇总为文件;
将所述文件上传至统计平台。
8.根据权利要求1所述的方法,其特征在于,所述检测刷新后的页面是否异常,包括:
将刷新后的页面与目标页面进行比对;
基于比对结果,确定待测应用是否异常。
9.一种应用测试装置,其特征在于,所述装置包括:
发送单元,被配置成通过待测应用向服务端发送网络请求,接收服务端返回的数据;
第一转换单元,被配置成将所述数据转换为Java组件;
第二转换单元,被配置成将所述Java组件转换为多叉树;
遍历单元,被配置成遍历所述多叉树中的节点,对于所遍历到的每一个节点,修改该节点中的数据,将修改数据后的多叉树转换为Java组件,并返回至所述待测应用,以使所述待测应用基于所接收到的Java组件进行页面刷新;
检测单元,被配置成基于刷新后的页面,检测所述待测应用是否异常。
10.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,其上存储有一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-8中任一所述的方法。
11.一种计算机可读介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-8中任一所述的方法。
CN202010359386.0A 2020-04-29 2020-04-29 应用测试方法、装置、电子设备和计算机可读介质 Pending CN111694729A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010359386.0A CN111694729A (zh) 2020-04-29 2020-04-29 应用测试方法、装置、电子设备和计算机可读介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010359386.0A CN111694729A (zh) 2020-04-29 2020-04-29 应用测试方法、装置、电子设备和计算机可读介质

Publications (1)

Publication Number Publication Date
CN111694729A true CN111694729A (zh) 2020-09-22

Family

ID=72476855

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010359386.0A Pending CN111694729A (zh) 2020-04-29 2020-04-29 应用测试方法、装置、电子设备和计算机可读介质

Country Status (1)

Country Link
CN (1) CN111694729A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114666301A (zh) * 2020-12-22 2022-06-24 深圳Tcl新技术有限公司 一种基于mock服务器的APP测试方法及系统

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090172636A1 (en) * 2006-03-31 2009-07-02 Tim Griffith Interactive development tool and debugger for web services
CN101699397A (zh) * 2009-10-09 2010-04-28 上海宝信软件股份有限公司 实现Java与XML数据绑定的方法
CN105138448A (zh) * 2014-06-05 2015-12-09 北京畅游天下网络技术有限公司 一种在前端测试页面的方法和装置
CN106649118A (zh) * 2016-12-28 2017-05-10 南京大学 一种基于AST的Java代码SSA单路径的生成方法
CN107741911A (zh) * 2017-11-01 2018-02-27 广州爱九游信息技术有限公司 接口测试方法、装置、客户端及计算机可读存储介质
CN110554962A (zh) * 2019-08-14 2019-12-10 平安普惠企业管理有限公司 回归测试的流程覆盖方法、服务器及计算机可读存储介质
CN111026629A (zh) * 2018-10-09 2020-04-17 北京京东尚科信息技术有限公司 一种测试脚本自动生成的方法和装置

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090172636A1 (en) * 2006-03-31 2009-07-02 Tim Griffith Interactive development tool and debugger for web services
CN101699397A (zh) * 2009-10-09 2010-04-28 上海宝信软件股份有限公司 实现Java与XML数据绑定的方法
CN105138448A (zh) * 2014-06-05 2015-12-09 北京畅游天下网络技术有限公司 一种在前端测试页面的方法和装置
CN106649118A (zh) * 2016-12-28 2017-05-10 南京大学 一种基于AST的Java代码SSA单路径的生成方法
CN107741911A (zh) * 2017-11-01 2018-02-27 广州爱九游信息技术有限公司 接口测试方法、装置、客户端及计算机可读存储介质
CN111026629A (zh) * 2018-10-09 2020-04-17 北京京东尚科信息技术有限公司 一种测试脚本自动生成的方法和装置
CN110554962A (zh) * 2019-08-14 2019-12-10 平安普惠企业管理有限公司 回归测试的流程覆盖方法、服务器及计算机可读存储介质

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114666301A (zh) * 2020-12-22 2022-06-24 深圳Tcl新技术有限公司 一种基于mock服务器的APP测试方法及系统

Similar Documents

Publication Publication Date Title
WO2021098148A1 (zh) 一种软件编译方法、装置及电子设备和存储介质
KR101645052B1 (ko) 디버깅 파이프라인
US11675575B2 (en) Checking source code validity at time of code update
JP2019516167A (ja) リアルタイムデータフロープログラミング言語のためのツールおよび方法
CN110865889B (zh) 组件间传递事件的方法和装置
Bulej et al. Unit testing performance with stochastic performance logic
CN110673837B (zh) 代码修复方法及装置、电子设备、计算机可读存储介质
CN117112060A (zh) 组件库构建方法、装置、电子设备及存储介质
CN114116505A (zh) 代码测试方法及装置
CN111666201A (zh) 回归测试方法、装置、介质及电子设备
US10698666B2 (en) Automatically building software projects
CN112988578A (zh) 一种自动化测试方法和装置
CN111694729A (zh) 应用测试方法、装置、电子设备和计算机可读介质
CN111258802A (zh) 捕获应用程序崩溃信息的方法及相关设备
US11182272B2 (en) Application state monitoring
CN116578282A (zh) 代码生成方法、装置、电子设备及介质
US11947966B2 (en) Identifying computer instructions enclosed by macros and conflicting macros at build time
US11740875B2 (en) Type inference in dynamic languages
US11755458B2 (en) Automatic software behavior identification using execution record
Wannipurage et al. A Framework to capture and reproduce the Absolute State of Jupyter Notebooks
CN112286802B (zh) 一种测试程序性能方法、装置和电子设备
CN115509913A (zh) 软件自动化测试方法、装置、机器可读介质及设备
Lim et al. R High Performance Programming
JP7410269B2 (ja) テスト・ベクタを使用した高水準コンストラクトの最適化の自動検証
CN113220586A (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