CN111563035B - 测试结果展示方法、装置、设备及存储介质 - Google Patents
测试结果展示方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN111563035B CN111563035B CN202010322405.2A CN202010322405A CN111563035B CN 111563035 B CN111563035 B CN 111563035B CN 202010322405 A CN202010322405 A CN 202010322405A CN 111563035 B CN111563035 B CN 111563035B
- Authority
- CN
- China
- Prior art keywords
- test result
- function
- method function
- name
- method name
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Digital Computer Display Output (AREA)
Abstract
本申请实施例公开了一种测试结果展示方法、装置、设备及存储介质,属于计算机技术领域。方法包括:通过方法名称管理界面获取输入的关键字符;通过方法名称管理界面,显示应用程序的代码文件中与关键字符匹配的至少一个方法名称,代码文件包括至少一个方法函数和至少一个方法函数的方法名称;响应于对方法名称管理界面中的第一方法名称的测试结果获取指令,显示第一测试结果展示界面,第一测试结果展示界面包括第一方法名称对应的第一方法函数的测试结果。上述方案通过提供方法名称管理界面,加快了查找方法函数的速度,从而加快了验证方法函数是否存在问题的速度,进而提高了查找到出现问题的方法函数的效率。
Description
技术领域
本申请涉及计算机技术领域,特别涉及一种测试结果展示方法、装置、设备及存储介质。
背景技术
随着计算机技术的不断发展,多种应用程序逐渐兴起,人们对应用程序的性能要求也越来越高。为了确保应用程序的性能,需要对应用程序进行测试。
若应用程序的性能较差,可能是该应用程序的代码文件中的某个方法函数出现问题而导致的,技术人员可以手动在代码文件中查找可能出现问题的方法函数,对该方法函数进行测试。
如果测试结果表示该方法函数没有问题,则需要重新查找另一个可能出现问题的方法函数,直至查找到真正出现问题的方法函数。由于代码文件中包括多个方法函数,技术人员在代码文件中查找出现问题的方法函数时,会花费较多时间,测试效率低下。
发明内容
本申请实施例提供了一种测试结果展示方法、装置、设备及存储介质,可以加快查找方法函数的速度,从而提高测试效率。所述技术方案如下:
一方面,提供了一种测试结果展示方法,所述方法包括:
通过方法名称管理界面获取输入的关键字符;
通过所述方法名称管理界面,显示应用程序的代码文件中与所述关键字符匹配的至少一个方法名称,所述代码文件包括至少一个方法函数和所述至少一个方法函数的方法名称;
响应于对所述方法名称管理界面中的第一方法名称的测试结果获取指令,显示第一测试结果展示界面,所述第一测试结果展示界面包括所述第一方法名称对应的第一方法函数的测试结果。
可选地,所述响应于所述测试结果获取指令,运行所述第一方法函数,得到所述第一方法函数的测试结果之前,所述方法还包括:
对每个方法函数进行插桩处理,得到位于所述每个方法函数之前的起始插桩点和位于所述每个方法函数之后的终止插桩点;
所述响应于所述测试结果获取指令,运行所述第一方法函数,得到所述第一方法函数的测试结果,包括:
响应于所述测试结果获取指令,运行所述第一方法函数,获取所述第一方法函数的起始插桩点对应的起始运行状态参数和所述第一方法函数的终止插桩点对应的终止运行状态参数;
根据所述起始运行状态参数和所述终止运行状态参数之间的差异,获取所述第一方法函数的测试结果。
可选地,所述通过所述方法名称管理界面,显示应用程序的代码文件中与所述关键字符匹配的至少一个方法名称,包括:
从所述代码文件中的至少一个方法函数的方法名称中,检索包括所述关键字符的至少一个方法名称。
可选地,所述通过方法名称管理界面获取输入的关键字符,包括:
通过所述方法名称管理界面,显示输入框和所述至少一个方法函数的方法名称;
获取所述输入框中输入的关键字符。
可选地,所述至少一个方法函数的方法名称包括第三方法名称,所述通过所述方法名称管理界面,显示输入框和所述至少一个方法函数的方法名称之后,所述方法还包括:
响应于对所述第三方法名称的测试结果获取指令,显示第二测试结果展示界面,所述第二测试结果展示界面包括所述第三方法名称对应的第三方法函数的测试结果。
另一方面,提供了一种测试结果展示装置,所述装置包括:
获取模块,用于通过方法名称管理界面获取输入的关键字符;
显示模块,用于通过所述方法名称管理界面,显示应用程序的代码文件中与所述关键字符匹配的至少一个方法名称,所述代码文件包括至少一个方法函数和所述至少一个方法函数的方法名称;
所述显示模块,用于响应于对所述方法名称管理界面中的第一方法名称的测试结果获取指令,显示第一测试结果展示界面,所述第一测试结果展示界面包括所述第一方法名称对应的第一方法函数的测试结果。
可选地,所述方法名称管理界面还包括测试结果获取按钮,所述显示模块,还用于响应于对所述第一方法名称的测试结果获取按钮的触发操作,显示所述第一测试结果展示界面。
可选地,所述装置还包括:
替换模块,用于将所述测试结果获取按钮替换为测试结果关闭按钮。
可选地,所述方法名称管理界面还包括测试结果关闭按钮,所述装置还包括:
关闭模块,用于响应于对所述第一方法名称的测试结果关闭按钮的触发操作,关闭所述第一测试结果展示界面。
可选地,所述显示模块,包括:
确定单元,用于响应于对所述第一方法名称的测试结果获取指令,确定所述第一方法函数调用的至少一个第二方法函数;
显示单元,用于显示所述第一测试结果展示界面,所述第一测试结果展示界面还包括所述至少一个第二方法函数的测试结果。
可选地,所述确定单元,还用于响应于对所述第一方法名称的测试结果获取指令,根据方法函数调用关系,确定所述第一方法函数调用的至少一个第二方法函数,所述方法函数调用关系包括所述代码文件中的多个方法函数之间的调用关系。
可选地,所述装置还包括:
生成模块,用于根据语法规则对所述代码文件进行语法解析,生成所述代码文件对应的语法树;
构成模块,用于根据所述语法树获取所述多个方法函数之间的调用关系,构成所述方法函数调用关系。
可选地,所述生成模块,还用于根据所述语法规则对所述代码文件中的每个类文件进行语法解析,生成所述每个类文件对应的语法树。
可选地,所述显示模块,包括:
获取单元,用于响应于所述测试结果获取指令,根据所述第一方法名称,从所述代码文件对应的测试结果集合中,获取与所述第一方法名称对应存储的测试结果,所述测试结果集合中包括所述至少一个方法函数的方法名称和测试结果;
显示单元,用于根据与所述第一方法名称对应存储的测试结果,显示所述第一测试结果展示界面。
可选地,所述装置还包括:
运行模块,用于运行所述至少一个方法函数,得到所述至少一个方法函数的测试结果;
存储模块,用于在所述测试结果集合中,将每个方法函数的方法名称与测试结果对应存储。
可选地,所述装置还包括:
插桩模块,用于对每个方法函数进行插桩处理,得到位于所述每个方法函数之前的起始插桩点和位于所述每个方法函数之后的终止插桩点;
所述运行模块,包括:
参数获取单元,用于对于每个方法函数,运行所述方法函数,获取所述方法函数的起始插桩点对应的起始运行状态参数和所述方法函数的终止插桩点对应的终止运行状态参数;
测试结果获取单元,用于根据所述起始运行状态参数和所述终止运行状态参数之间的差异,获取所述方法函数的测试结果。
可选地,所述显示模块,包括:
运行单元,用于响应于所述测试结果获取指令,运行所述第一方法函数,得到所述第一方法函数的测试结果;
显示单元,用于根据所述第一方法函数的测试结果,显示所述第一测试结果展示界面。
可选地,所述装置还包括:
插桩模块,用于对每个方法函数进行插桩处理,得到位于所述每个方法函数之前的起始插桩点和位于所述每个方法函数之后的终止插桩点;
所述运行单元,还用于响应于所述测试结果获取指令,运行所述第一方法函数,获取所述第一方法函数的起始插桩点对应的起始运行状态参数和所述第一方法函数的终止插桩点对应的终止运行状态参数;
所述运行单元,还用于根据所述起始运行状态参数和所述终止运行状态参数之间的差异,获取所述第一方法函数的测试结果。
可选地,所述显示模块,还用于从所述代码文件中的至少一个方法函数的方法名称中,检索包括所述关键字符的至少一个方法名称。
可选地,所述获取模块,包括:
显示单元,用于通过所述方法名称管理界面,显示输入框和所述至少一个方法函数的方法名称;
获取单元,用于获取所述输入框中输入的关键字符。
可选地,显示模块,还用于响应于对所述第三方法名称的测试结果获取指令,显示第二测试结果展示界面,所述第二测试结果展示界面包括所述第三方法名称对应的第三方法函数的测试结果。
再一方面,提供了一种计算机设备,所述计算机设备包括处理器和存储器,所述存储器中存储有至少一条指令,所述至少一条指令由所述处理器加载并执行上述方面所述的测试结果展示方法中所执行的操作。
再一方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有至少一条指令,所述至少一条指令由处理器加载并执行以实现如所述的测试结果展示方法中所执行的操作。
本申请实施例提供的技术方案带来的有益效果至少包括:
本申请实施例提供的测试结果展示方法、装置、设备及存储介质,通过方法名称管理界面可以获取输入的关键字符,显示代码文件中与该关键字符匹配的至少一个方法名称;响应于对方法名称管理界面中的第一方法名称的测试结果获取指令,显示该第一方法名称对应的第一方法函数的测试结果,本申请实施例无需用户手动从代码文件中查找方法函数,只需用户在方法名称获取界面中输入关键字符,即可直接根据输入的关键字符查找到代码文件中对应的方法函数,加快了查找方法函数的速度,从而加快了验证方法函数是否存在问题的速度,提高了方法函数的测试效率。
另外,本申请实施例在对代码文件中的多个类文件进行插桩处理时,会采用多个线程来并行处理,加快了插桩处理的处理速度,并且,该插桩处理无需用户手动进行,节约了人力成本,提高了插桩效率。
另外,本申请实施例可以在运行代码文件中的至少一个方法函数之后,在测试结果集合中,存储该至少一个方法函数的测试结果,从而,在获取第一方法函数对应的测试结果时,可以直接从测试结果集合中获取,无需再次运行该第一方法函数,提高了展示测试结果的效率。
另外,本申请实施例还可以根据第一方法名称自动执行对应的触发操作,以使第一方法函数运行,从而对方法函数的测试过程更加自动化和智能化,简化了用户的操作,提高了测试效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种实施环境的示意图;
图2是本申请实施例提供的一种测试结果展示方法的流程图;
图3是本申请实施例提供的另一种测试结果展示方法的流程图;
图4是本申请实施例提供的一种方法名称管理界面的示意图;
图5是本申请实施例提供的另一种方法名称管理界面的示意图;
图6是本申请实施例提供的另一种方法名称管理界面的示意图;
图7是本申请实施例提供的另一种方法名称管理界面的示意图;
图8是本申请实施例提供的另一种方法名称管理界面的示意图;
图9是本申请实施例提供的一种测试结果展示界面的示意图;
图10是本申请实施例提供的一种第一测试结果展示界面的示意图;
图11是本申请实施例提供的一种方法名称管理界面的示意图;
图12是本申请实施例提供的一种方法函数测试方法的流程图;
图13是本申请实施例提供的一种资源消耗结果展示界面的示意图;
图14是本申请实施例提供的另一种资源消耗结果展示界面的示意图;
图15是本申请实施例提供的一种测试结果展示装置的结构示意图;
图16是本申请实施例提供的另一种测试结果展示装置的结构示意图;
图17是本申请实施例提供的一种终端的结构框图;
图18是本申请实施例提供的一种服务器的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
可以理解,本申请所使用的术语“第一”、“第二”等可在本文中用于描述各种概念,但除非特别说明,这些概念不受这些术语限制。这些术语仅用于将一个概念与另一个概念区分。举例来说,在不脱离本申请的范围的情况下,可以将第一方法函数称为第二方法函数,且类似地,可将第二方法函数称为第一方法函数。
本申请所使用的术语“至少一个”、“多个”、“每个”、“任一”,至少一个包括一个、两个或者两个以上,多个包括两个或者两个以上,而每个是指对应的多个中的每一个,任一是指多个中的任意一个,举例来说,多个方法函数包括3个方法函数,而每个是指这3个方法函数中的每一个方法函数,任一是指这3个方法函数中的任意一个,可以是第一个,也可以是第二个,还可以是第三个。
本申请实施例提供的测试结果展示方法,可以应用于计算机设备中,在一种可能实现方式中,该计算机设备为终端。该终端可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。
在另一种可能实现方式中,该计算机设备包括终端和服务器。图1是本申请实施例提供的一种实施环境的示意图,参见图1,该实施环境包括:终端101和服务器102。
其中,服务器102可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(Content Delivery Network,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云服务器。终端101可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。
其中,终端101上可以安装有应用程序,服务器102是为该应用程序提供服务的服务器,终端101在对应用程序中的方法函数进行测试时,可以向服务器102发送请求指令,从服务器102中获取请求结果,以使应用程序中的方法函数运行,从而得到该方法函数的测试结果。
本申请实施例提供的测试结果展示方法可以应用于对应用程序进行测试的场景下:
例如,在开发出应用程序后,为了保证应用程序的性能良好,可以在应用程序上线之前,对该应用程序进行测试,如测试结果指示应用程序的性能较差,可能是该应用程序的代码文件中的某个方法函数出现问题而导致的,如果采用本申请实施例提供的测试结果展示方法,可以快速展示代码文件中任一方法函数的测试结果,从而根据该测试结果可以确定该方法函数是否为真正出现问题的方法函数,如果该方法函数为真正出现问题的方法函数,则对该方法函数进行修改,以提高应用程序的性能;如果该方法函数不是真正出现问题的方法函数,则重新查找另一方法函数,直至查找出真正出现问题的方法函数。
由于本申请实施例可以通过在方法名称管理界面中输入关键字符,快速查找到代码文件中对应的方法函数,加快了查找方法函数的速度,从而加快了验证方法函数是否存在问题的速度,提高了方法函数的效率。
图2是本申请实施例提供的一种测试结果展示方法的流程图。本申请实施例的执行主体为终端,本申请实施例对测试结果展示的过程进行说明,参见图2,该方法包括:
201、通过方法名称管理界面获取输入的关键字符。
其中,关键字符可以是任一种类型的字符,如英文字符、汉字字符、阿拉伯数字字符、运算符号字符等。
202、通过方法名称管理界面,显示应用程序的代码文件中与关键字符匹配的至少一个方法名称。
其中,方法名称管理界面为用于对代码文件中的方法名称进行管理的界面,用户可以在该方法名称管理界面中输入关键字符,终端根据该输入的关键字符,从代码文件中查找到与该关键字符匹配的至少一个方法名称,通过方法名称管理界面显示该至少一个方法名称。
203、响应于对方法名称管理界面中的第一方法名称的测试结果获取指令,显示第一测试结果展示界面,第一测试结果展示界面包括第一方法名称对应的第一方法函数的测试结果。
其中,第一方法名称为方法名称管理界面中显示的任一方法名称。其中,第一方法函数的测试结果可以是对第一方法函数的运行过程的描述信息,可以通过运行该第一方法函数来得到。如,测试结果为运行第一方法函数的耗时,或者,为运行第一方法函数所占用的内存等。
本申请实施例提供的测试结果展示方法,通过方法名称管理界面可以获取输入的关键字符,显示代码文件中与该关键字符匹配的至少一个方法名称;响应于对方法名称管理界面中的第一方法名称的测试结果获取指令,显示该第一方法名称对应的第一方法函数的测试结果,本申请实施例无需用户手动从代码文件中查找方法函数,只需用户在方法名称获取界面中输入关键字符,即可直接根据输入的关键字符查找到代码文件中对应的方法函数,加快了查找方法函数的速度,从而加快了验证方法函数是否存在问题的速度,提高了方法函数的测试效率。
可选地,方法名称管理界面还包括测试结果获取按钮,响应于对方法名称管理界面中的第一方法名称的测试结果获取指令,显示第一测试结果展示界面,包括:响应于对第一方法名称的测试结果获取按钮的触发操作,显示第一测试结果展示界面。
其中,方法名称管理界面中显示的每个方法名称可以对应有一个测试结果获取按钮,方法名称的测试结果按钮用于获取该方法名称对应的方法函数的测试结果,通过该测试结果按钮可以直接展示任一方法名称对应的方法函数的测试结果,方便了用户查看测试结果,提高了测试效率。
可选地,响应于对第一方法名称的测试结果获取按钮的触发操作,显示第一测试结果展示界面之后,方法还包括:
将测试结果获取按钮替换为测试结果关闭按钮。
在对测试结果获取按钮进行触发操作之后,该测试结果获取按钮会替换为测试结果关闭按钮,方法名称对应的测试结果关闭按钮用于关闭该方法名称对应的方法函数的测试结果展示界面,由于在展示测试结果之后,会暂时不需要该测试结果对应的测试结果获取按钮所提供的功能,并且,只有在展示测试结果之后,用户才会有停止展示该测试结果的需求,因此,可以在对测试结果获取按钮进行触发操作之后,将该测试结果获取按钮替换为测试结果关闭按钮,在对测试结果关闭按钮进行触发操作后,将该测试结果关闭按钮替换为测试结果获取按钮,从而不仅节约了方法名称管理界面的界面空间,也减少了用户的误操作问题。
可选地,方法名称管理界面还包括测试结果关闭按钮,响应于对至少一个方法名称中的第一方法名称的测试结果获取指令,显示第一测试结果展示界面之后,方法还包括:
响应于对第一方法名称的测试结果关闭按钮的触发操作,关闭第一测试结果展示界面。
在对任一方法名称的测试结果关闭按钮进行触发操作之后,可以停止显示该方法名称对应的方法函数的测试结果,从而避免了展示多个方法函数的测试结果时,界面信息杂乱的问题,用户可以更有针对性地查看方法函数的测试结果。
可选地,响应于对至少一个方法名称中的第一方法名称的测试结果获取指令,显示第一测试结果展示界面,包括:
响应于对第一方法名称的测试结果获取指令,确定第一方法函数调用的至少一个第二方法函数;
显示第一测试结果展示界面,第一测试结果展示界面还包括至少一个第二方法函数的测试结果。
由于方法函数之间存在调用关系,在运行某一方法函数的过程中,可能会调用其他方法函数,从而可以调用其他方法函数,如果某个方法函数的测试结果指示该方法函数存在问题,可能是该方法函数存在问题,也可能是该方法函数调用的其他方法函数存在问题,因此,在获取第一方法函数的测试结果时,还可以获取该第一方法函数调用的至少一个第二方法函数的测试结果,以便找出真正存在问题的方法函数。
可选地,响应于对第一方法名称的测试结果获取指令,确定第一方法函数调用的至少一个第二方法函数,包括:
响应于对第一方法名称的测试结果获取指令,根据方法函数调用关系,确定第一方法函数调用的至少一个第二方法函数,方法函数调用关系包括代码文件中的多个方法函数之间的调用关系。
在获取第一方法函数调用的至少一个第二方法函数时,可以根据方法函数调用关系,来确定第一方法函数调用的至少一个第二方法函数,从而可以更加全面地获取到第二方法函数的测试结果。
可选地,响应于对第一方法名称的测试结果获取指令,根据方法函数调用关系,确定第一方法函数调用的至少一个第二方法函数之前,方法还包括:
根据语法规则对代码文件进行语法解析,生成代码文件对应的语法树;
根据语法树获取多个方法函数之间的调用关系,构成方法函数调用关系。
根据语法规则对代码文件进行语法解析,可以获知代码文件中的代码语句的语句结构,该语法树为该语句结构的图形标识,代表了语句的推导结果,可以用于获取语法结构之间的层次。由于方法函数之间的调用关系是通过方法函数中的调用语句来实现的,因此,可以根据语法结构之间的层次可以获取方法函数之间的调用关系。
可选地,根据语法规则对代码文件进行语法解析,生成代码文件对应的语法树,包括:
根据语法规则对代码文件中的每个类文件进行语法解析,生成每个类文件对应的语法树。
代码文件中可以包括至少一个类文件,在生成代码文件对应的语法树时,可以分别针对每个类文件,生成每个类文件对应的语法树。并且,在生成每个类文件对应的语法树时,可以同时对多个类文件进行语法解析,生成该多个类文件分别对应的语法树,加快了生成语法树的速度。
可选地,响应于对至少一个方法名称中的第一方法名称的测试结果获取指令,显示第一测试结果展示界面,包括:
响应于测试结果获取指令,根据第一方法名称,从代码文件对应的测试结果集合中,获取与第一方法名称对应存储的测试结果,测试结果集合中包括至少一个方法函数的方法名称和测试结果;
根据与第一方法名称对应存储的测试结果,显示第一测试结果展示界面。
在获取测试结果时,可以从已存储的测试结果集合中直接获取,无需重新运行该第一方法函数,充分利用了已运行的方法函数的测试结果,节约了系统资源,加快了测试结果获取的速度,提高了测试效率。
可选地,根据第一方法名称,从代码文件对应的测试结果集合中,获取第一方法函数对应的测试结果之前,方法还包括:
运行至少一个方法函数,得到至少一个方法函数的测试结果;
在测试结果集合中,将每个方法函数的方法名称与测试结果对应存储。
在运行方法函数时,会获取该方法函数的测试结果,将该测试结果与该测试结果对应的方法函数的方法名称对应存储到测试结果集合中,这样,在用户需要查看该方法函数的测试结果时,无需再次运行,可以直接从测试结果集合中获取。
可选地,运行至少一个方法函数,得到至少一个方法函数的测试结果之前,方法还包括:
对每个方法函数进行插桩处理,得到位于每个方法函数之前的起始插桩点和位于每个方法函数之后的终止插桩点;
运行至少一个方法函数,得到至少一个方法函数的测试结果,包括:
对于每个方法函数,运行方法函数,获取方法函数的起始插桩点对应的起始运行状态参数和方法函数的终止插桩点对应的终止运行状态参数;
根据起始运行状态参数和终止运行状态参数之间的差异,获取方法函数的测试结果。
其中,方法函数的起始插桩点位于方法函数的起始位置,方法函数的终止插桩点位于该方法函数的终止位置,因此,起始插桩点对应的起始运行状态参数为运行该方法函数之前的运行状态参数,终止插桩点对应的终止运行状态参数为运行该方法函数之后的运行状态参数,因此,起始运行状态参数和终止运行状态参数之间的差异,是运行该方法函数导致的,从而可以根据起始运行状态参数和终止运行状态参数之间的差异,获取该方法函数的测试结果。
由于对每个方法函数进行了插桩处理,因此,在运行任一个方法函数时,均可以根据该方法函数的插桩点来获取该方法函数的测试结果。
可选地,响应于对至少一个方法名称中的第一方法名称的测试结果获取指令,显示第一测试结果展示界面,包括:
响应于测试结果获取指令,运行第一方法函数,得到第一方法函数的测试结果;
根据第一方法函数的测试结果,显示第一测试结果展示界面。
另外,在获取第一方法函数的测试结果时,计算机设备可以响应于该测试结果获取指令,自动运行该第一方法函数,得到第一方法函数的测试结果,减少了用户的操作,使得该测试结果的获取更加自动化和智能化,提高了测试效率。
可选地,响应于测试结果获取指令,运行第一方法函数,得到第一方法函数的测试结果之前,方法还包括:
对每个方法函数进行插桩处理,得到位于每个方法函数之前的起始插桩点和位于每个方法函数之后的终止插桩点;
响应于测试结果获取指令,运行第一方法函数,得到第一方法函数的测试结果,包括:
响应于测试结果获取指令,运行第一方法函数,获取第一方法函数的起始插桩点对应的起始运行状态参数和第一方法函数的终止插桩点对应的终止运行状态参数;
根据起始运行状态参数和终止运行状态参数之间的差异,获取第一方法函数的测试结果。
由于对每个方法函数进行了插桩处理,因此,在运行任一个方法函数时,均可以根据该方法函数的插桩点来获取该方法函数的测试结果。
可选地,通过方法名称管理界面,显示应用程序的代码文件中与关键字符匹配的至少一个方法名称,包括:
从代码文件中的至少一个方法函数的方法名称中,检索包括关键字符的至少一个方法名称。
其中,与关键字符匹配的至少一个方法名称可以是包括该关键字符的至少一个方法名称,这样,用户可以只输入方法名称中的部分字符,即可从显示的至少一个方法名称中找到对应的方法名称,用户无需记住方法名称中的全部字符,提高了用户体验。
可选地,通过方法名称管理界面获取输入的关键字符,包括:
通过方法名称管理界面,显示输入框和至少一个方法函数的方法名称;
获取输入框中输入的关键字符。
在方法名称管理界面中,不仅可以显示输入框,以便用户在输入框中输入关键字符,还可以显示至少一个方法函数的方法名称,以便用户可以从至少一个方法函数的方法名称中直接选取,或者,用户在忘记方法名称中的字符时,显示的该至少一个方法名称还可以起到提示的作用。
可选地,至少一个方法函数的方法名称包括第三方法名称,通过方法名称管理界面,显示输入框和至少一个方法函数的方法名称之后,方法还包括:
响应于对第三方法名称的测试结果获取指令,显示第二测试结果展示界面,第二测试结果展示界面包括第三方法名称对应的第三方法函数的测试结果。
用户可以直接对方法名称管理界面中显示的至少一个方法名称进行获取结果操作,计算机设备会响应于对该至少一个方法名称中的任一方法名称的测试结果获取指令,显示该方法名称的测试结果。
上述所有可选技术方案,可以采用任意结合形成本申请的可选实施例,在此不再一一赘述。
图3是本申请实施例提供的一种测试结果展示方法的流程图。本申请实施例的执行主体为终端,本申请实施例对测试结果展示的过程进行说明,参见图3,该方法包括:
301、对代码文件中的每个方法函数进行插桩处理,得到位于该每个方法函数之前的起始插桩点和位于该每个方法函数之后的终止插桩点。
其中,代码文件可以是任一应用程序的代码文件,该代码文件中包括至少一个方法函数,在运行应用程序的过程中,该可能会运行代码文件中的至少一个方法函数,从而该至少一个方法函数可以影响应用程序的性能好坏。如果对应用程序的方法函数进行测试,修正存在问题的方法函数,可以提高应用程序的性能。其中,应用程序的性能可以由应用程序的运行速度或者应用程序运行过程中所占用内存等中的至少一项参数确定。其中,应用程序的运行速度越快,应用程序的性能越好;应用程序运行过程中所占用内存越小,应用程序的性能越好。
如果代码文件中包括多个方法函数,在运行代码文件时,终端可能无法获取每个方法函数独立的测试结果,仅能获取多个方法函数整体的测试结果,从而无法确定多个方法函数中真正存在问题的方法函数。为了能够获取每个方法函数独立的测试结果,本申请实施例通过上述步骤301,对代码文件中的每个方法函数进行了插桩处理,得到了位于该每个方法函数之前的起始插桩点和位于该每个方法函数之后的终止插桩点,后续通过每个方法函数的起始插桩点和终止插桩点可以获取每个方法函数独立的测试结果。
可选地,在对每个方法函数进行插桩处理时,可以在方法函数的起始点和终止点进行插桩处理,因此,对代码文件中的每个方法函数进行插桩处理,得到位于该每个方法函数之前的起始插桩点和位于该每个方法函数之后的终止插桩点,可以包括:确定代码文件中每个方法函数的起始点和终止点,在每个方法函数的起始点进行插桩处理,得到位于每个方法函数之前的起始插桩点,在每个方法函数的终止点进行插桩处理,得到位于每个方法函数之后的终止插桩点。
由于本申请实施例是在方法函数的起始点和终止点进行插桩,能够准确地将方法函数标记出来,因此,在后续根据起始插桩点和终止插桩点获取方法函数的测试结果时,能够保证测试结果的准确性。
可选地,代码文件中的多个方法函数是按照一定的规则进行排布的,因此,可以根据方法函数之间的排布规则,确定代码文件中每个方法函数的起始点和终止点。
例如,该排布规则可以指示每个方法函数的起始点的形式和终止点的形式。在根据排布规则,确定代码文件中的第一方法函数的起始点时,可以根据方法函数的起始点的形式,确定第一方法函数的起始点;在根据排布规则,确定代码文件中的第一方法函数的终止点时,可以根据方法函数的终止点的形式,确定第一方法函数的终止点。
可选地,方法函数中的第一条语句可以是描述该方法函数的属性信息的语句,该排布规则指示方法函数中第一条语句的语句形式,从而根据该排布规则可以从代码文件中确定每个方法函数的第一条语句,并根据第一条语句确定该方法函数的起始点。例如,将第一条语句之前的位置点作为方法函数的起始点,或者,将第一条语句中的第一个词语的位置点作为方法函数的起始点等。
可选地,每个方法函数都可以包括一个开始标识和一个终止标识,该排布规则用于指示方法函数的开始标识和终止标识,根据该排布规则可以识别代码文件中每个方法函数的开始标识和终止标识,从而确定每个方法函数的起始点和终止点。
例如,该排布规则指示大括号“{}”中的“{”为方法函数的开始标识,“}”为方法函数的终止标识,可以将“{”所在的位置作为方法函数的起始点,将“}”所在的位置作为方法函数的终止点。
可选地,可以通过插入探针的方式,对每个方法函数进行插桩处理。其中,在每个方法函数的起始点进行插桩处理可以包括:在方法函数的起始点插入探针,该探针为方法函数的起始插桩点。在每个方法函数的终止点进行插桩处理可以包括:在方法函数的终止点插入探针,该探针为方法函数的终止插桩点。
可选地,代码文件中包括多个类文件,每个类文件包括至少一个方法函数,为了加快插桩处理的速度,对代码文件中的每个方法函数进行插桩处理,得到位于该每个方法函数之前的起始插桩点和位于该每个方法函数之后的终止插桩点,可以包括:通过多个线程,分别对每个类文件中方法函数进行插桩处理,得到位于该每个方法函数之前的起始插桩点和位于该每个方法函数之后的终止插桩点。通过多个线程并行对类文件进行插桩处理,加快了插桩处理的速度。
可选地,多个线程的数量与多个类文件的数量可以相同,也可以不同。在一种可能实现方式中,多个线程的数量与多个类文件的数量相同,其中,每个线程用于对一个类文件进行处理,该多个线程与多个类文件一一对应,终端通过每个线程,分别对对应的类文件进行插桩处理。
若多个线程的数量为3,多个类文件的数量也为3,则每个线程对一个类文件进行插桩处理,实现了对该3个类文件的并行处理。
在一种可能实现方式中,多个线程的数量小于多个类文件的数量,终端可以先通过每个线程,对对应的一个类文件进行插桩处理,在多个线程中的任一线程处理完成后,若存在未处理的类文件,则采用该线程继续对未处理的类文件进行处理。其中,每个线程用于对至少一个类文件进行处理。
例如,若多个线程的数量为3,多个类文件的数量为5,则可以先通过3个线程为5个类文件中的任意3个类文件进行插桩处理,如果3个线程中的第一线程插桩处理完成,则可以通过第一线程对剩余的2个类文件中的任一类文件进行插桩处理,在下一个线程插桩处理完成之后,通过该下一个线程对最后一个类文件进行插桩处理。
在一种可能实现方式中,多个线程的数量大于多个类文件的数量,例如,多个类文件的数量为第一数量,终端可以通过多个线程中的第一数量个线程,分别对对应的类文件进行插桩处理。其中,第一数量个线程与多个类文件一一对应。
例如,若多个线程的数量为5,多个类文件的数量为3,则可以通过5个线程中的任意3个线程,分别对3个类文件进行插桩处理。
需要说明的是,在一些实施例中,在执行步骤201之前,还需要先获取代码文件。可选地,该代码文件中包括至少一个方法函数,获取该代码文件可以包括:获取运行应用程序的至少一个方法函数,对该至少一个方法函数进行打包处理,得到代码文件。
可选地,该代码文件中还可以包括:应用程序运行所需的其他数据,例如,应用程序的美术资源等。
302、根据代码文件中的每个方法函数,获取方法函数调用关系,该方法函数调用关系包括代码文件中的多个方法函数之间的调用关系。
一些方法函数在运行过程中,可能需要调用其他方法函数,来实现自身的功能,例如,控制虚拟对象移动的方法函数在控制虚拟对象移动时,需要调用获取虚拟对象的位置的方法函数,获取虚拟对象的当前位置,以便根据虚拟对象的当前位置,控制虚拟对象移动至下一位置。其中,控制虚拟对象移动的方法函数与获取虚拟对象的位置的方法函数存在调用关系。
其中,代码文件中包括多个方法函数,该多个方法函数中可能会包括存在调用关系的两个方法函数。
其中,方法函数可以通过多种调用方式来调用其他方法函数。可选地,为了实现不同的方法函数之间的调用,可以将不同的方法函数进行嵌套。例如,将第二方法函数嵌套至第一方法函数中,这样,在运行第一方法函数时,可以调用位于该第一方法函数内的第二方法函数。可选地,可以在一个方法函数的定义中体现对另一方法函数的调用,例如,第一方法函数中包括用于调用第二方法函数的调用语句,运行该第一方法函数时,会执行该调用语句,从而调用第二方法函数。
可选地,本申请实施例可以根据方法函数之间的调用方式,来获取方法函数调用关系。若方法函数之间的调用方式指示应用程序通过将一个方法函数嵌套至另一方法函数中,来实现调用,则可以根据方法函数之间的嵌套关系,来获取方法函数调用关系,该方法函数调用关系包括代码文件中的多个方法函数之间的调用关系。若方法函数之间的调用方式指示应用程序通过在一个方法函数的定义中体现对另一方法函数的调用,则可以根据方法函数中的调用语句,来获取方法函数调用关系。
在一种可能实现方式中,根据代码文件中的每个方法函数,获取方法函数调用关系,可以包括:根据语法规则对该代码文件进行语法解析,生成该代码文件对应的语法树;根据该语法树获取该多个方法函数之间的调用关系,构成该方法函数调用关系。
其中,语法规则为代码文件中多个方法函数的语句撰写规则,根据该语法规则对该代码文件进行语法解析,可以得到代码文件对应的语法树。
其中,每个方法函数包括至少一个方法语句,根据该语法规则对该代码文件进行语法解析,得到代码文件对应的语法树,可以包括:根据语法规则对代码文件中每个方法函数的方法语句进行语法解析,得到每个方法语句的语义,根据每个方法函数的语义来生成语法树。
可选的,语法规则可以包括函数模板。其中,函数模板可以包括循环函数模板和条件函数模板等。另外,语法规则还可以包括函数类型、变量类型或者运算符中的至少一项。
可选地,语法树包括至少一个节点,每个节点可以对应一个方法函数,该语法树的上下级节点之间的连接关系可以指示方法函数之间的调用关系,根据该语法树获取该多个方法函数之间的调用关系,构成该方法函数调用关系,可以包括:遍历该语法树,根据该语法树中上下级节点之间的连接关系,确定对应的方法函数之间的调用关系。
可选地,语法树的每个节点对应一个方法函数、一个变量或者一种运算方式,根据该语法树获取该多个方法函数之间的调用关系,构成该方法函数调用关系,可以包括:遍历该语法树,根据每个节点对应的节点信息以及该语法树中上下级节点之间的连接关系,获取该多个方法函数之间的调用关系,构成该方法函数调用关系。
可选地,在方法函数调用关系中可以包括多个方法标识之间的调用关系,其中,方法标识为方法函数对应的标识,可以用于唯一确定一个方法函数,例如,该方法标识可以是方法函数的方法名称、方法函数的序号等。可选地,如果方法标识不是方法函数的方法名称,那么后续可能无法根据方法函数调用关系和第一方法名称,查找到第一方法函数调用的至少一个第二方法函数,为此,终端还可以获取方法标识与对应的方法名称之间的映射关系。通过该映射关系,将第一方法函数的方法名称映射为第一方法标识,从而能够根据该第一方法标识从方法函数调用关系中获取第一方法函数调用的至少一个第二方法函数的第二方法标识。
需要说明的是,本申请实施例不仅可以根据语法树,获取方法函数调用关系,还可以根据语法树,获取每个方法函数的变量、每个方法函数所属的类文件和每个方法函数的方法名称等方法函数的属性信息。
可选地,不同类文件中可能包括相同名称的方法函数,为了对不同类文件中的多个方法函数进行区分,可以将每个方法函数所属的类文件的类名称和该方法函数的初始方法名称进行组合,将组合得到的方法名称作为该方法函数的方法名称。
例如,第一方法函数的初始方法名称为:ProfilerControlForm(探查器控件来源),该第一方法函数所属类文件的类名称为Awake(开启),将ProfilerControlForm和Awake进行组合,得到Awake()->ProfilerControlForm,将Awake()->ProfilerControlForm作为第一方法函数的方法名称。
可选地,代码文件中包括至少一个类文件,根据语法规则对该代码文件进行语法解析,生成该代码文件对应的语法树,可以包括:根据语法规则对该代码文件中的每个类文件进行语法解析,生成每个类文件对应的语法树,该多个类文件对应的语法树构成代码文件对应的语法树。
可选地,若需要对多个类文件进行语法解析,生成每个类文件对应的语法树,则可以通过多个线程,并行对多个类文件进行语法解析,以加快生成多个语法树的速度。
其中,通过多个线程对多个类文件进行语法解析的方式,与步骤301中通过多个线程对多个类文件进行插桩处理的方式类似,在此不再一一赘述。
需要说明的是,上述步骤301可以在步骤302之前执行,也可以在步骤302之后执行,还可以与步骤302同时执行。可选地,若上述步骤301在步骤302之后执行,则步骤302可以对该至少一个方法函数进行打包处理,得到代码文件之前执行,直接对应用程序的多个方法函数进行语法分析,无需生成一个独立的代码文件。
303、显示方法名称管理界面,通过方法名称管理界面获取输入的关键字符。
其中,方法名称管理界面为用于对方法名称进行管理的界面,例如,对方法名称进行检索、对方法名称进行展示等。其中,对方法名称进行检索时,需要用户输入关键字符,根据用户输入的关键字符,可以检索与该关键字符匹配的方法名称。用户只需输入方法名称中的部分字符,即可从显示的至少一个方法名称中找到对应的方法名称,用户无需记住方法名称中的全部字符,提高了用户体验。
可选地,用户可以在方法名称管理界面中输入关键字符可以包括文本输入和语音输入两种方式。例如,通过方法名称管理界面获取输入的关键字符,可以包括:通过方法名称管理界面,获取输入的关键字符;或者,通过方法名称管理界面,获取输入的语音信息,将该语音信息进行文本转换,得到该语音信息对应的关键字符。
需要说明的是,在用户通过语音输入的方式输入关键字符时,可以将语音信息转换后的关键字符显示在方法名称管理界面上,以便用户确定转换后的关键字符是否准确。
可选地,方法名称管理界面可以通过输入框来获取关键字符,如图4所示,该方法名称管理界面400包括输入框401,用户可以通过该输入框401输入关键字符。可选地,该方法名称管理界面400可以包括语音输入按钮402,在用户可以通过该语音输入按钮402,在方法名称管理界面中输入关键字符。图4仅是以语音输入按钮402在输入框401内部为例进行示例性说明,该语音输入按钮402还可以位于输入框401之外。
由于方法函数的方法名称可能较长、方法函数的数量较多等原因,用户可能会遗忘方法函数的方法名称,可选地,该方法名称管理界面400还可以包括至少一个方法函数的方法名称,以便用户在遗忘方法函数的方法名称时,该至少一个方法函数的方法名称可以起到提示的作用,如图4所示,该方法名称管理界面400中显示有方法名称1、方法名称2、方法名称3等。
其中,该至少一个方法函数的方法名称可以是代码文件中全部方法函数的方法名称,也可以是代码文件中部分方法函数的方法名称,如,使用频率较高的至少一个方法函数的方法名称等。
需要说明的是,终端可以通过安装测试工具,来显示步骤303提供的方法名称管理界面,可选地,在执行上述步骤303之前,可以将代码文件上传至测试工具中,由于该代码文件中包括至少一个方法函数的方法名称,因此,终端通过测试工具显示至少一个方法函数的方法名称时,可以从代码文件中获取至少一个方法函数的方法名称。其中,测试工具可以是用于对应用程序进行测试的工具,可选地,该测试工具还可以具有开发功能,在用户使用开发功能,开发出一个应用程序后,可以使用测试功能,对开发出的应用程序进行测试。可选地,该测试工具可以是Unity(虚拟引擎),该测试工具可以自带Profiler(测试功能)。
可选地,上述步骤302中,在生成语法树之后,可以根据该语法树,获取每个方法函数的属性信息,该属性信息包括方法函数的方法名称。终端在显示至少一个方法函数的方法名称时,可以从每个方法函数的属性信息中,获取每个方法函数的方法名称。
另外,显示方法名称管理界面,可以包括:响应于对方法名称管理界面对应的入口按钮的触发操作,显示该方法名称管理界面。其中,该入口按钮可以是测试工具提供的按钮。
例如,终端安装有测试工具,在打开测试工具之后,可以显示该方法名称管理界面的入口按钮,通过对该入口按钮的触发操作显示该方法名称管理界面。
304、通过该方法名称管理界面,显示应用程序的代码文件中与该关键字符匹配的至少一个方法名称。
其中,通过该方法名称管理界面,显示应用程序的代码文件中与该关键字匹配的至少一个方法名称时,可以在该方法名称管理界面中显示,例如,在输入框的下方显示与该关键字符匹配的至少一个方法名称。
可选地,该方法名称管理界面可以包括方法名称检索界面和方法名称展示界面,通过该方法名称管理界面,显示应用程序的代码文件中与该关键字符匹配的至少一个方法名称时,可以在该方法名称展示界面中显示。
其中,上述步骤303至步骤304可以包括:显示方法名称检索界面,通过方法名称检索界面获取输入的关键字符,在获取到关键字符之后,从方法名称检索界面跳转至方法名称展示界面,通过该方法名称展示界面,显示应用程序的代码文件中与该关键字符匹配的至少一个方法名称。
例如,方法名称检索界面包括输入框,用户在该输入框中输入关键字符后,终端会响应于输入的关键字符,从方法名称检索界面跳转至方法名称展示界面,在该方法名称展示界面中展示与关键字符匹配的至少一个方法名称。
另外,通过方法名称管理界面,显示与该关键字符匹配的至少一个方法名称时,可以根据输入的关键字符,直接显示与该关键字符匹配的至少一个方法名称,如图5所示,用户在方法名称管理界面500的输入框501中输入关键字符ProfilerControlForm后,在该方法名称管理界面500中直接显示与关键字符匹配的方法名称“Awake()->ProfilerControlForm”、方法名称“InitCloseltems()
->ProfilerControlForm(初始化程序中的探查器控件来源)”、方法名称“OpenCloseEnableDeep(int,bool)->ProfilerControlForm(启用深度开关中的探查器控件来源)”、方法名称“OnValueChange(string)->ProfilerControlForm(价值变换中的探查器控件来源)”和方法名称
“CreateCloneltem(string,int)->ProfilerControlForm(创建克隆项目中的探查器控件来源)”。可选地,如图6所示,方法名称管理界面600包括输入框601和检索按钮602,通过方法名称管理界面,显示与该关键字符匹配的至少一个方法名称,可以包括:响应于对方法名称管理界面中的检索按钮的触发操作,在方法名称管理界面中,显示与该关键字符匹配的至少一个方法名称。
其中,与该关键字符匹配的至少一个方法名称可以是包括该关键字符的方法名称,可选地,通过该方法名称管理界面,显示应用程序的代码文件中与该关键字符匹配的至少一个方法名称,可以包括:从该代码文件中的至少一个方法函数的方法名称中,检索包括该关键字符的至少一个方法名称,通过方法名称管理界面,显示检索到的至少一个方法名称。
305、响应于对该方法名称管理界面中的第一方法名称的测试结果获取指令,获取第一方法函数的测试结果。
其中,第一方法名称为步骤304中显示的至少一个方法名称中的任一方法名称。第一方法函数的测试结果可以是对第一方法函数的运行过程的描述信息,可以通过运行该第一方法函数来得到。如,测试结果为运行第一方法函数的耗时,或者,为运行第一方法函数所占用的内存等。
可选地,对第一方法名称的测试结果获取指令,可以是对第一方法名称进行触发操作生成的,也可以是对第一方法名称对应的按钮进行触发操作生成的。例如,方法名称管理界面还包括测试结果获取按钮,响应于对该方法名称管理界面中的第一方法名称的测试结果获取指令,获取第一方法函数的测试结果,可以包括:响应于对第一方法名称的测试结果获取按钮的触发操作,获取第一方法函数的测试结果。
可选地,在响应于对该第一方法名称的测试结果获取按钮的触发操作之后,还可以将该测试结果获取按钮替换为测试结果关闭按钮。
也就是说,在对测试结果获取按钮进行触发操作之后,该测试结果获取按钮会替换为测试结果关闭按钮,方法名称对应的测试结果关闭按钮用于关闭该方法名称对应的方法函数的测试结果展示界面,由于在展示测试结果之后,会暂时不需要该测试结果对应的测试结果获取按钮所提供的功能,并且,只有在展示测试结果之后,用户才会有停止展示该测试结果的需求,因此,可以在对测试结果获取按钮进行触发操作之后,将该测试结果获取按钮替换为测试结果关闭按钮,在对测试结果关闭按钮进行触发操作后,将该测试结果关闭按钮替换为测试结果获取按钮,从而不仅节约了方法名称管理界面的界面空间,也减少了用户的误操作问题。
如图7所示,在该方法名称管理界面700中每个方法名称对应一个测试结果获取按钮。用户对Awake()->ProfilerControlForm701对应的测试结果获取按钮702进行触发操作,之后,显示如图8所示的方法名称管理界面700,该方法名称管理界面700中的Awake()->ProfilerControlForm701对应的测试结果获取按钮替换为测试结果关闭按钮703。
其中,本申请实施例中获取第一方法函数的测试结果包括两种情况:第一种情况、在响应于对该方法名称管理界面中的第一方法名称的测试结果获取指令之前,已经运行过第一方法函数了。第二种情况,在响应于对该方法名称管理界面中的第一方法名称的测试结果获取指令之前,还未运行过第一方法函数。
针对第一种情况,上述步骤305包括以下步骤3051:
3051、响应于该测试结果获取指令,根据该第一方法名称,从该代码文件对应的测试结果集合中,获取与该第一方法名称对应存储的测试结果。
其中,该测试结果集合用于存储已经运行过的至少一个方法函数的测试结果。可选地,该测试结果集合中包括该至少一个方法函数的方法名称和测试结果。
本申请实施例通过预先运行第一方法函数,并将第一方法函数对应的测试结果存储到测试结果集合中,在用户想要获取第一方法函数的测试结果时,可以直接从方法函数集合中获取,无需再次运行第一方法函数,提高了对第一方法函数的测试效率。
另外,需要说明的是,在执行上述步骤3051之前,还需要先运行代码文件中的至少一个方法函数,以获取测试结果集合。可选地,在根据该第一方法名称,从该代码文件对应的测试结果集合中,获取该第一方法函数对应的测试结果之前,终端还可以运行该至少一个方法函数,得到该至少一个方法函数的测试结果;在该测试结果集合中,将每个方法函数的方法名称与测试结果对应存储。其中,上述步骤305至306在运行至少一个方法函数之后执行。
例如,终端安装有应用程序和该应用程序的测试工具,且该测试工具与应用程序连接,用户可以启动应用程序,在应用程序中触发操作,应用程序的启动过程中和用户对应用程序的操作过程中,应用程序中的至少一个方法函数会被终端运行,而与该应用程序连接的测试工具可以获取运行的至少一个方法函数的测试结果。
可选地,可以根据每个方法函数的起始插桩点和终止插桩点来获取每个方法函数的测试结果。例如,该运行该至少一个方法函数,得到该至少一个方法函数的测试结果,可以包括:对于每个方法函数,运行该方法函数,获取该方法函数的起始插桩点对应的起始运行状态参数和该方法函数的终止插桩点对应的终止运行状态参数;根据该起始运行状态参数和该终止运行状态参数之间的差异,获取该方法函数的测试结果。
例如,第一方法函数的起始运行状态参数包括:运行至该起始插桩点的第一时间。第一方法函数的终止运行状态参数包括:运行至该终止插桩点的第二时间。该第一方法函数的测试结果为第一时间与第二时间的时间差,该时间差为运行该第一方法函数的耗时。
针对第二种情况,上述步骤305包括以下步骤3052:
3052、响应于该测试结果获取指令,运行该第一方法函数,得到该第一方法函数的测试结果。
其中,终端可以响应于测试结果获取指令,自动运行第一方法函数,为了使终端运行第一方法函数,终端可以对应用程序进行相应的触发操作,以使该第一方法函数运行。可选地,可以根据方法名称与触发操作的对应关系,确定第一方法名称对应的第一触发操作,在应用程序中执行该第一触发操作,以触发应用程序中的第一方法函数运行,从而获取第一方法函数的测试结果。
例如,第一方法函数为用于控制虚拟对象移动的函数,该第一触发操作为触发虚拟对象移动的操作,通过在应用程序中执行第一触发操作,可以触发第一方法函数运行,以使虚拟对象进行移动,并且,终端还可以在第一方法函数运行完成之后,获取该第一方法函数的测试结果。
可选地,响应于该测试结果获取指令,运行该第一方法函数,得到该第一方法函数的测试结果,可以包括:响应于该测试结果获取指令,运行该第一方法函数,获取该第一方法函数的起始插桩点对应的起始运行状态参数和该第一方法函数的终止插桩点对应的终止运行状态参数;根据该起始运行状态参数和该终止运行状态参数之间的差异,获取该第一方法函数的测试结果。
在第二种情况中,终端可以响应于测试结果获取指令,自动运行第一方法函数,以获取第一方法函数对应的测试结果,减少了用户操作,提高了测试效率。
另外,需要说明的是,在第二种情况中,除了自动运行第一方法函数之外,还可以由用户在应用程序中执行第一触发操作,以触发第一方法函数运行。
306、根据第一方法函数的测试结果,显示该第一测试结果展示界面。
其中,根据第一方法函数的测试结果,显示第一测试结果展示界面是指:在第一测试结果展示界面中显示第一方法函数的测试结果。
可选地,根据第一方法名称对应存储的测试结果,显示第一测试结果展示界面可以包括两种情况:第一种情况、终端会弹出一个新的界面(第一测试结果展示界面),在该新的界面中显示第一方法函数的测试结果;第二种情况、终端显示有测试结果展示界面,在获取到第一方法函数的测试结果之后,将该第一方法函数的测试结果添加到该测试结果展示界面,得到第一测试结果展示界面。
在一种可能实现方式中,该测试结果展示界面可以包括至少一个方法名称和该至少一个方法名称对应的方法函数的初始测试结果,该初始测试结果可以包括测试结果的初始值,可选地,该初始值可以设置为0。后续,终端可以响应于对该方法名称管理界面中的第一方法名称的测试结果获取指令,获取运行第一方法函数后得到的测试结果,将第一方法函数的初始测试结果替换为获取到的测试结果,从而显示该第一测试结果展示界面。
例如,如图9所示,该测试结果展示界面900包括至少一个方法名称901和该至少一个方法名称对应的方法函数的初始测试结果902。在触发对“GameClientApp.Update(更新游戏客户端)”的触发操作之后,可以显示如图10所示的第一测试结果展示界面1000,该第一测试结果展示界面1000包括:“GameClientApp.Update”1001和“GameClientApp.Update”1001对应的方法函数的测试结果1002。
可选地,该方法名称管理界面还包括测试结果关闭按钮,如图8所示的测试结果关闭按钮703,响应于对该至少一个方法名称中的第一方法名称的测试结果获取指令之后,可以响应于对该第一方法名称的测试结果关闭按钮的触发操作,关闭第一测试结果展示界面。
其中,关闭第一测试结果展示界面可以包括:将第一测试结果展示界面中的第一方法名称以及第一方法函数的测试结果删除,得到第三测试结果展示界面,该第三测试结果展示界面中不包括第一方法名称以及第一方法函数的测试结果。另外,关闭第一测试结果展示界面也可以包括:停止显示第一测试结果展示界面,也就是说将第一测试结果展示界面关闭。
例如,方法名称管理界面中包括方法名称“GameClientApp.Update”,以及该方法名称“GameClientApp.Update”对应的测试结果关闭按钮,响应于对方法名称“GameClientApp.Update”的测试结果关闭按钮的触发操作,终端可以控制图10中的第一测试结果展示界面1000恢复到图9中的测试结果展示界面900,或者,将图10中的第一测试结果展示界面1000关闭。
需要说明的是,本申请实施例仅是以通过输入关键字符,获取与关键字符匹配的至少一个方法名称来对查找方法函数进行示例性说明,而在另一实施例中,终端通过该方法名称管理界面,显示输入框和该至少一个方法函数的方法名称;获取该输入框中输入的关键字符。其中,该至少一个方法函数的方法名称为代码文件中包括的至少一个方法名称。
可选地,用户可以触发对方法名称管理界面中显示的至少一个方法名称的测试结果获取指令,从而获取该方法名称对应的方法函数的测试结果。例如,该至少一个方法函数的方法名称包括第三方法名称,该通过该方法名称管理界面,显示输入框和该至少一个方法函数的方法名称之后,该方法还包括:响应于对该第三方法名称的测试结果获取指令,显示第二测试结果展示界面,该第二测试结果展示界面包括该第三方法名称对应的第三方法函数的测试结果。
本申请实施例不仅可以通过输入框来获取用户输入的关键字符,为用户提供查找到的与该关键字符匹配的至少一个方法名称,以使用户快速查找到需要进行测试的方法函数,还可以直接显示代码文件中的至少一个方法名称,以使用户可以从该至少一个方法名称中查找到需要进行测试的方法函数,丰富了用户查找方法函数的方式。
其中,响应于对该第三方法名称的测试结果获取指令,显示第二测试结果展示界面的方式,与步骤305至步骤306中响应于对该第一方法函数的测试结果获取指令,显示第一测试结果展示界面的方式类似,在此不再一一赘述。
需要说明的是,本申请实施例仅是以第一测试结果展示界面展示第一方法函数的测试结果为例,对测试结果展示方法进行示例性说明。而方法函数之间是可能存在调用关系的,有些方法函数需要通过调用其他方法函数来实现自身的功能。例如,在运行第一方法函数时,会调用至少一个第二方法函数来实现该第一方法函数的功能,因此,在运行第一方法函数时,还会运行至少一个第二方法函数,从而第一方法函数的测试结果可能会受到至少一个第二方法函数的影响,因此,在另一实施例中,终端还可以确定第一方法函数调用的至少一个第二方法函数,获取至少一个第二方法函数的测试结果,显示第一测试结果展示界面,该第一测试结果展示界面包括:第一方法函数的测试结果和至少一个第二方法函数的测试结果。
可选地,测试工具可以通过上述步骤302中提供的获取方法函数调用关系的方式,获取到方法函数调用关系,根据该方法函数调用关系,确定第一方法函数调用的至少一个第二方法函数;或者,终端已经预先生成了方法函数调用关系,可以直接通过本地存储的方法函数调用关系,确定第一方法函数调用的至少一个第二方法函数。
可选地,方法函数调用关系中包括方法标识之间的调用关系,可以根据上述步骤302中获取的映射关系,将第一方法名称转换为对应的第一方法标识,从方法函数调用关系中获取第一方法标识调用的至少一个第二方法标识,根据映射关系,确定至少一个第二方法标识对应的第二方法名称。
其中,第一方法标识调用的至少一个第二方法标识指示:第一方法标识对应得到第一方法函数调用至少一个第二方法标识对应的第二方法函数。
需要说明的是,获取第二方法名称对应的第二方法函数的测试结果的方式与上述步骤305中获取第一方法函数的测试结果的方式类似,在此不再一一赘述。
需要说明的是,在第一测试结果展示界面中展示第一方法函数的测试结果和至少一个第二方法函数的测试结果时,可以显示运行第一方法函数和至少一个方法函数的综合测试结果,以及第一方法函数独立的测试结果和每个第二方法函数独立的测试结果。其中,第一方法函数和至少一个方法函数的综合测试结果,可以通过第一方法函数独立的测试结果和每个第二方法函数独立的测试结果叠加得到。
例如,第一方法函数的运行耗时为0.03秒,第二方法函数1的运行耗时为0.06秒,第二方法函数2的运行耗时为0.01秒,则综合运行耗时为0.1秒。
需要说明的是,如图11所示,方法名称管理界面1100中还可以包括每个方法名称对应的总测试结果获取按钮(all)1101和分测试结果获取按钮(self)1102,其中,总测试结果获取按钮(all)1101用于获取对应的方法函数的测试结果以及该方法函数调用的其他方法函数的测试结果;分测试结果获取按钮(self)1102用于仅获取对应的方法函数的测试结果。
在第一方法函数在运行过程中,需要调用至少一个第二方法函数的情况下,如果对第一方法名称的总测试结果获取按钮1101进行触发操作,则终端会获取第一方法函数的测试结果以及该至少一个第二方法函数的测试结果,在第一测试结果展示界面中显示该第一方法函数的测试结果以及该至少一个第二方法函数的测试结果。如果对第一方法名称的分测试结果获取按钮1102进行触发操作,则终端仅获取第一方法函数的测试结果,在第一测试结果展示界面中显示该第一方法函数的测试结果。
用户可以根据需求对方法名称的总测试结果获取按钮或者分测试结果获取按钮进行触发操作,以使终端展示用户需要的测试结果。
需要说明的是,在根据测试结果展示界面展示的方法函数对应的测试结果,确定该方法函数存在问题时,需要在代码文件中对应修改该方法函数,并且在修改代码文件之后,需要重新生成代码文件对应的语法树,本申请实施例通过生成类文件对应的语法树,可以在代码文件中的方法函数修改之后,仅生成该方法函数所属类文件对应的语法树,其他类文件对应的语法树无需修改,不仅减轻了系统负担,而且加快了语法树的生成速度。
结合上述多个方案,本申请实施例提供了一种方法函数测试方法的流程图,如图12所示,该方法包括:
1201、用户分析应用程序中存在的问题。
在上述步骤1201之前,用户可以对应用程序进行测试,若应用程序的测试结果指示应用程序的性能不符合要求,则用户需要分析应用程序中存在的问题。其中,用户分析应用程序中存在的问题可以是用户根据应用程序的测试结果预估应用程序中存在问题的方法函数。
1202、自动对每个方法函数进行插桩处理。
1203、将应用程序进行打包,得到包文件。
其中,用户将应用程序进行打包处理时,可以将应用程序的至少一个方法函数以及该应用程序的美术资源等一起进行打包,可选地,得到的包文件可以是Dev(源码编译)类型的包文件。其中,在对应用程序的至少一个方法函数进行打包时,该至少一个方法函数已经经过插桩处理了。
1204、测试工具获取包文件中每个方法函数的调用关系。
在获取每个方法函数的调用关系之后,可以在如图9所示的测试结果展示界面中展示每个方法函数之间的调用关系。
1205、动态展示方法函数的测试结果。
其中,动态展示方法函数的测试结果是指:用户可以通过方法名称管理界面,获取任一方法函数的测试结果,测试结果展示界面会随着用户的操作动态展示相应的测试结果。
1206、根据测试结果,确定是否需要获取其他方法函数的测试结果,如果需要,继续执行步骤1205,如果不需要,则执行步骤1207。
1207、根据方法函数的测试结果,确定存在问题的方法函数。
其中,在确定存在问题的方法函数之后,可以对该存在问题的方法函数进行修正,以提高应用程序的性能。
在一种可能实现方式中,由于本申请实施例可以根据代码文件中的至少一个方法函数,生成代码文件对应的语法树,因此,在对存在问题的方法函数进行修正时,还需要对语法树中的方法函数进行修正。可选地,根据修正后的方法函数重新生成代码文件对应的语法树。
如果该语法树为代码文件对应的语法树,则该语法树的结构较大,重新生成该语法树占用的资源和花费的时间也会较多。如果语法树是类文件对应的语法树,或者是更小单元对应的语法树,则该语法树的结构较小,重新生成该语法树占用的资源和花费的时间也会较少。
例如,如果语法树为整个代码文件对应的语法树,那么在对一个方法函数进行修正后,需要重新生成整个代码文件对应的语法树,在重新生成该语法树时,所消耗的资源可以如图13所示,图13示出了一种资源消耗结果展示界面1300,该资源消耗结果展示界面1300中包括重新生成该语法树所消耗的时间和所占用的内存。如果语法树为一个类文件对应的语法树,在对该类文件中的一个方法函数进行修正后,可以根据该类文件重新生成对应的语法树,在重新生成该语法树时,所消耗的资源可以如图14所示,该图14示出了一种资源消耗结果展示界面1400,该资源消耗结果展示界面1400中包括重新生成该语法树所消耗的时间和所占用的内存。根据图13和图14所示的内容可知,生成类文件的语法树时,不仅可以缩短生成时间,而且会占用较小的内存资源。
本申请实施例提供的测试结果展示方法,通过方法名称管理界面可以获取输入的关键字符,显示代码文件中与该关键字符匹配的至少一个方法名称;响应于对方法名称管理界面中的第一方法名称的测试结果获取指令,显示该第一方法名称对应的第一方法函数的测试结果,本申请实施例无需用户手动从代码文件中查找方法函数,只需用户在方法名称获取界面中输入关键字符,即可直接根据输入的关键字符查找到代码文件中对应的方法函数,加快了查找方法函数的速度,从而加快了验证方法函数是否存在问题的速度,提高了方法函数的测试效率。
另外,本申请实施例在对代码文件中的多个类文件进行插桩处理时,会采用多个线程来并行处理,加快了插桩处理的处理速度,并且,该插桩处理无需用户手动进行,节约了人力成本,提高了插桩效率。
另外,本申请实施例可以在运行代码文件中的至少一个方法函数之后,在测试结果集合中,存储该至少一个方法函数的测试结果,从而,在获取第一方法函数对应的测试结果时,可以直接从测试结果集合中获取,无需再次运行该第一方法函数,提高了展示测试结果的效率。
另外,本申请实施例还可以根据第一方法名称自动执行对应的触发操作,以使第一方法函数运行,从而对方法函数的测试过程更加自动化和智能化,简化了用户的操作,提高了测试效率。
图15是本申请实施例提供的一种测试结果展示装置的结构示意图,参见图15,该装置包括:获取模块1501和显示模块1502。
获取模块1501,用于通过方法名称管理界面获取输入的关键字符;
显示模块1502,用于通过该方法名称管理界面,显示应用程序的代码文件中与该关键字符匹配的至少一个方法名称,该代码文件包括至少一个方法函数和该至少一个方法函数的方法名称;
该显示模块1502,用于响应于对该方法名称管理界面中的第一方法名称的测试结果获取指令,显示第一测试结果展示界面,该第一测试结果展示界面包括该第一方法名称对应的第一方法函数的测试结果。
本申请实施例提供的测试结果展示装置,通过方法名称管理界面可以获取输入的关键字符,显示代码文件中与该关键字符匹配的至少一个方法名称;响应于对方法名称管理界面中的第一方法名称的测试结果获取指令,显示该第一方法名称对应的第一方法函数的测试结果,本申请实施例无需用户手动从代码文件中查找方法函数,只需用户在方法名称获取界面中输入关键字符,即可直接根据输入的关键字符查找到代码文件中对应的方法函数,加快了查找方法函数的速度,从而加快了验证方法函数是否存在问题的速度,提高了方法函数的测试效率。
如图16所示,可选地,该方法名称管理界面还包括测试结果获取按钮,该显示模块1502,还用于响应于对该第一方法名称的测试结果获取按钮的触发操作,显示该第一测试结果展示界面。
可选地,该装置还包括:
替换模块1503,用于将该测试结果获取按钮替换为测试结果关闭按钮。
可选地,该方法名称管理界面还包括测试结果关闭按钮,该装置还包括:
关闭模块1504,用于响应于对该第一方法名称的测试结果关闭按钮的触发操作,关闭该第一测试结果展示界面。
可选地,该显示模块1502,包括:
确定单元1512,用于响应于对该第一方法名称的测试结果获取指令,确定该第一方法函数调用的至少一个第二方法函数;
显示单元1522,用于显示该第一测试结果展示界面,该第一测试结果展示界面还包括该至少一个第二方法函数的测试结果。
可选地,该确定单元1512,还用于响应于对该第一方法名称的测试结果获取指令,根据方法函数调用关系,确定该第一方法函数调用的至少一个第二方法函数,该方法函数调用关系包括该代码文件中的多个方法函数之间的调用关系。
可选地,该装置还包括:
生成模块1505,用于根据语法规则对该代码文件进行语法解析,生成该代码文件对应的语法树;
构成模块1506,用于根据该语法树获取该多个方法函数之间的调用关系,构成该方法函数调用关系。
可选地,该生成模块1505,还用于根据该语法规则对该代码文件中的每个类文件进行语法解析,生成该每个类文件对应的语法树。
可选地,该显示模块1502,包括:
获取单元1532,用于响应于该测试结果获取指令,根据该第一方法名称,从该代码文件对应的测试结果集合中,获取与该第一方法名称对应存储的测试结果,该测试结果集合中包括该至少一个方法函数的方法名称和测试结果;
显示单元1522,用于根据与该第一方法名称对应存储的测试结果,显示该第一测试结果展示界面。
可选地,该装置还包括:
运行模块1507,用于运行该至少一个方法函数,得到该至少一个方法函数的测试结果;
存储模块1508,用于在该测试结果集合中,将每个方法函数的方法名称与测试结果对应存储。
可选地,该装置还包括:
插桩模块1509,用于对每个方法函数进行插桩处理,得到位于该每个方法函数之前的起始插桩点和位于该每个方法函数之后的终止插桩点;
该运行模块1507,包括:
参数获取单元,用于对于每个方法函数,运行该方法函数,获取该方法函数的起始插桩点对应的起始运行状态参数和该方法函数的终止插桩点对应的终止运行状态参数;
测试结果获取单元,用于根据该起始运行状态参数和该终止运行状态参数之间的差异,获取该方法函数的测试结果。
可选地,该显示模块1502,包括:
运行单元1542,用于响应于该测试结果获取指令,运行该第一方法函数,得到该第一方法函数的测试结果;
显示单元1522,用于根据该第一方法函数的测试结果,显示该第一测试结果展示界面。
可选地,该装置还包括:
插桩模块1509,用于对每个方法函数进行插桩处理,得到位于该每个方法函数之前的起始插桩点和位于该每个方法函数之后的终止插桩点;
该运行单元1542,还用于响应于该测试结果获取指令,运行该第一方法函数,获取该第一方法函数的起始插桩点对应的起始运行状态参数和该第一方法函数的终止插桩点对应的终止运行状态参数;
该运行单元1542,还用于根据该起始运行状态参数和该终止运行状态参数之间的差异,获取该第一方法函数的测试结果。
可选地,该显示模块1502,还用于从该代码文件中的至少一个方法函数的方法名称中,检索包括该关键字符的至少一个方法名称。
可选地,该获取模块1501,包括:
显示单元1511,用于通过该方法名称管理界面,显示输入框和该至少一个方法函数的方法名称;
获取单元1521,用于获取该输入框中输入的关键字符。
可选地,显示模块1502,还用于响应于对该第三方法名称的测试结果获取指令,显示第二测试结果展示界面,该第二测试结果展示界面包括该第三方法名称对应的第三方法函数的测试结果。
需要说明的是:上述实施例提供的测试结果展示装置在对展示测试结果时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将终端的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的测试结果展示装置与测试结果展示方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图17是本申请实施例提供的一种终端的结构框图。该终端1700用于执行上述实施例中终端或智能设备执行的步骤,可以是便携式移动终端,比如:智能手机、平板电脑、MP3播放器(Moving Picture Experts Group Audio Layer III,动态影像专家压缩标准音频层面3)、MP4(Moving Picture Experts Group Audio Layer IV,动态影像专家压缩标准音频层面4)播放器、笔记本电脑或台式电脑。终端1700还可能被称为用户设备、便携式终端、膝上型终端、台式终端等其他名称。
通常,终端1700包括有:处理器1701和存储器1702。
处理器1701可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器1701可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器1701也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(Central ProcessingUnit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器1701可以在集成有GPU(Graphics Processing Unit,图像处理器),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器1701还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器1702可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器1702还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器1702中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器1701所执行以实现本申请中方法实施例提供的测试结果展示方法。
在一些实施例中,终端1700还可选包括有:外围设备接口1703和至少一个外围设备。处理器1701、存储器1702和外围设备接口1703之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外围设备接口1703相连。具体地,外围设备包括:射频电路1704、触摸显示屏1705、摄像头组件1706、音频电路1707和电源1708中的至少一种。
外围设备接口1703可被用于将I/O(Input/Output,输入/输出)相关的至少一个外围设备连接到处理器1701和存储器1702。在一些实施例中,处理器1701、存储器1702和外围设备接口1703被集成在同一芯片或电路板上;在一些其他实施例中,处理器1701、存储器1702和外围设备接口1703中的任意一个或两个可以在单独的芯片或电路板上实现,本申请实施例对此不加以限定。
射频电路1704用于接收和发射RF(Radio Frequency,射频)信号,也称电磁信号。射频电路1704通过电磁信号与通信网络以及其他通信设备进行通信。射频电路1704将电信号转换为电磁信号进行发送,或者,将接收到的电磁信号转换为电信号。可选地,射频电路1704包括:天线系统、RF收发器、一个或多个放大器、调谐器、振荡器、数字信号处理器、编解码芯片组、用户身份模块卡等等。射频电路1704可以通过至少一种无线通信协议来与其它终端进行通信。该无线通信协议包括但不限于:万维网、城域网、内联网、各代移动通信网络(2G、3G、4G及5G)、无线局域网和/或WiFi(Wireless Fidelity,无线保真)网络。在一些实施例中,射频电路1704还可以包括NFC(Near Field Communication,近距离无线通信)有关的电路,本申请对此不加以限定。
显示屏1705用于显示UI(User Interface,用户界面)。该UI可以包括图形、文本、图标、视频及其它们的任意组合。当显示屏1705是触摸显示屏时,显示屏1705还具有采集在显示屏1705的表面或表面上方的触摸信号的能力。该触摸信号可以作为控制信号输入至处理器1701进行处理。此时,显示屏1705还可以用于提供虚拟按钮和/或虚拟键盘,也称软按钮和/或软键盘。在一些实施例中,显示屏1705可以为一个,设置终端1700的前面板;在另一些实施例中,显示屏1705可以为至少两个,分别设置在终端1700的不同表面或呈折叠设计;在再一些实施例中,显示屏1705可以是柔性显示屏,设置在终端1700的弯曲表面上或折叠面上。甚至,显示屏1705还可以设置成非矩形的不规则图形,也即异形屏。显示屏1705可以采用LCD(Liquid Crystal Display,液晶显示屏)、OLED(Organic Light-Emitting Diode,有机发光二极管)等材质制备。
摄像头组件1706用于采集图像或视频。可选地,摄像头组件1706包括前置摄像头和后置摄像头。通常,前置摄像头设置在终端的前面板,后置摄像头设置在终端的背面。在一些实施例中,后置摄像头为至少两个,分别为主摄像头、景深摄像头、广角摄像头、长焦摄像头中的任意一种,以实现主摄像头和景深摄像头融合实现背景虚化功能、主摄像头和广角摄像头融合实现全景拍摄以及VR(Virtual Reality,虚拟现实)拍摄功能或者其它融合拍摄功能。在一些实施例中,摄像头组件1706还可以包括闪光灯。闪光灯可以是单色温闪光灯,也可以是双色温闪光灯。双色温闪光灯是指暖光闪光灯和冷光闪光灯的组合,可以用于不同色温下的光线补偿。
音频电路1707可以包括麦克风和扬声器。麦克风用于采集用户及环境的声波,并将声波转换为电信号输入至处理器1701进行处理,或者输入至射频电路1704以实现语音通信。出于立体声采集或降噪的目的,麦克风可以为多个,分别设置在终端1700的不同部位。麦克风还可以是阵列麦克风或全向采集型麦克风。扬声器则用于将来自处理器1701或射频电路1704的电信号转换为声波。扬声器可以是传统的薄膜扬声器,也可以是压电陶瓷扬声器。当扬声器是压电陶瓷扬声器时,不仅可以将电信号转换为人类可听见的声波,也可以将电信号转换为人类听不见的声波以进行测距等用途。在一些实施例中,音频电路1707还可以包括耳机插孔。
电源1708用于为终端1700中的各个组件进行供电。电源1708可以是交流电、直流电、一次性电池或可充电电池。当电源1708包括可充电电池时,该可充电电池可以支持有线充电或无线充电。该可充电电池还可以用于支持快充技术。
在一些实施例中,终端1700还包括有一个或多个传感器1709。该一个或多个传感器1709包括但不限于:加速度传感器1710、陀螺仪传感器1711、压力传感器1712、光学传感器1713以及接近传感器1714。
加速度传感器1710可以检测以终端1700建立的坐标系的三个坐标轴上的加速度大小。比如,加速度传感器1710可以用于检测重力加速度在三个坐标轴上的分量。处理器1701可以根据加速度传感器1710采集的重力加速度信号,控制触摸显示屏1705以横向视图或纵向视图进行用户界面的显示。加速度传感器1710还可以用于游戏或者用户的运动数据的采集。
陀螺仪传感器1711可以检测终端1700的机体方向及转动角度,陀螺仪传感器1711可以与加速度传感器1710协同采集用户对终端1700的3D动作。处理器1701根据陀螺仪传感器1711采集的数据,可以实现如下功能:动作感应(比如根据用户的倾斜操作来改变UI)、拍摄时的图像稳定、游戏控制以及惯性导航。
压力传感器1712可以设置在终端1700的侧边框和/或触摸显示屏1705的下层。当压力传感器1712设置在终端1700的侧边框时,可以检测用户对终端1700的握持信号,由处理器1701根据压力传感器1712采集的握持信号进行左右手识别或快捷操作。当压力传感器1712设置在触摸显示屏1705的下层时,由处理器1701根据用户对触摸显示屏1705的压力操作,实现对UI界面上的可操作性控件进行控制。可操作性控件包括按钮控件、滚动条控件、图标控件、菜单控件中的至少一种。
光学传感器1713用于采集环境光强度。在一个实施例中,处理器1701可以根据光学传感器1713采集的环境光强度,控制触摸显示屏1705的显示亮度。具体地,当环境光强度较高时,调高触摸显示屏1705的显示亮度;当环境光强度较低时,调低触摸显示屏1705的显示亮度。在另一个实施例中,处理器1701还可以根据光学传感器1713采集的环境光强度,动态调整摄像头组件1706的拍摄参数。
接近传感器1714,也称距离传感器,通常设置在终端1700的前面板。接近传感器1714用于采集用户与终端1700的正面之间的距离。在一个实施例中,当接近传感器1714检测到用户与终端1700的正面之间的距离逐渐变小时,由处理器1701控制触摸显示屏1705从亮屏状态切换为息屏状态;当接近传感器1714检测到用户与终端1700的正面之间的距离逐渐变大时,由处理器1701控制触摸显示屏1705从息屏状态切换为亮屏状态。
本领域技术人员可以理解,图17中示出的结构并不构成对终端1700的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。
图18是本申请实施例提供的一种服务器的结构示意图,该服务器1800可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(Central ProcessingUnits,CPU)1801和一个或一个以上的存储器1802,其中,存储器1802中存储有至少一条指令,至少一条指令由处理器1801加载并执行以实现上述各个方法实施例提供的方法。当然,该服务器还可以具有有线或无线网络接口、键盘以及输入输出接口等部件,以便进行输入输出,该服务器还可以包括其他用于实现设备功能的部件,在此不做赘述。
服务器1800可以用于执行上述测试结果展示方法中服务器所执行的步骤。
本申请实施例还提供了一种计算机设备,该计算机设备包括处理器和存储器,该存储器中存储有至少一条指令,该至少一条指令由该处理器加载并执行上述实施例的测试结果展示方法中所执行的操作。
本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有至少一条指令,该至少一条指令由处理器加载并执行以实现上述实施例的测试结果展示方法中所执行的操作。
本申请实施例还提供了一种计算机程序,该计算机程序中存储有至少一条指令,该至少一条指令由处理器加载并执行,以实现上述实施例的测试结果展示方法中所执行的操作。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (16)
1.一种测试结果展示方法,其特征在于,所述方法包括:
通过方法名称管理界面获取输入的关键字符;
通过所述方法名称管理界面,显示应用程序的代码文件中与所述关键字符匹配的至少一个方法名称,所述代码文件包括至少一个方法函数和所述至少一个方法函数的方法名称;
在第一方法名称对应的第一方法函数不存在调用的方法函数时,所述方法名称管理界面包括:测试结果获取按钮;响应于对所述第一方法名称对应的所述测试结果获取按钮的触发操作,运行所述第一方法函数,得到所述第一方法函数的测试结果;根据所述第一方法函数的测试结果,显示第一测试结果展示界面;所述第一测试结果展示界面包括所述第一方法名称对应的所述第一方法函数的测试结果;所述第一测试结果为运行所述第一方法函数所占用的内存;
在显示所述第一测试结果展示界面后,将所述测试结果获取按钮替换为测试结果关闭按钮;响应于对所述第一方法名称的所述测试结果关闭按钮的触发操作,关闭所述第一测试结果展示界面;
在所述第一方法名称对应的所述第一方法函数存在调用的方法函数时,所述方法名称管理界面包括:总测试结果获取按钮和分测试结果获取按钮;响应于所述总测试结果获取按钮的触发操作,确定所述第一方法函数调用的至少一个第二方法函数,显示所述第一方法函数的测试结果以及所述至少一个第二方法函数的测试结果;响应于所述分测试结果获取按钮的触发操作,仅显示所述第一方法函数的测试结果。
2.根据权利要求1所述的方法,其特征在于,所述方法,还包括:
响应于对所述第一方法名称的测试结果获取指令,根据方法函数调用关系,确定所述第一方法函数调用的至少一个第二方法函数,所述方法函数调用关系包括所述代码文件中的多个方法函数之间的调用关系。
3.根据权利要求2所述的方法,其特征在于,所述响应于对所述第一方法名称的测试结果获取指令,根据方法函数调用关系,确定所述第一方法函数调用的至少一个第二方法函数之前,所述方法还包括:
根据语法规则对所述代码文件进行语法解析,生成所述代码文件对应的语法树;
根据所述语法树获取所述多个方法函数之间的调用关系,构成所述方法函数调用关系。
4.根据权利要求3所述的方法,其特征在于,所述根据语法规则对所述代码文件进行语法解析,生成所述代码文件对应的语法树,包括:
根据所述语法规则对所述代码文件中的每个类文件进行语法解析,生成所述每个类文件对应的语法树。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
响应于测试结果获取指令,根据所述第一方法名称,从所述代码文件对应的测试结果集合中,获取与所述第一方法名称对应存储的测试结果,所述测试结果集合中包括所述至少一个方法函数的方法名称和测试结果;
根据与所述第一方法名称对应存储的测试结果,显示所述第一测试结果展示界面。
6.根据权利要求5所述的方法,其特征在于,所述根据所述第一方法名称,从所述代码文件对应的测试结果集合中,获取所述第一方法函数对应的测试结果之前,所述方法还包括:
运行所述至少一个方法函数,得到所述至少一个方法函数的测试结果;
在所述测试结果集合中,将每个方法函数的方法名称与测试结果对应存储。
7.根据权利要求6所述的方法,其特征在于,所述运行所述至少一个方法函数,得到所述至少一个方法函数的测试结果之前,所述方法还包括:
对每个方法函数进行插桩处理,得到位于所述每个方法函数之前的起始插桩点和位于所述每个方法函数之后的终止插桩点;
所述运行所述至少一个方法函数,得到所述至少一个方法函数的测试结果,包括:
对于每个方法函数,运行所述方法函数,获取所述方法函数的起始插桩点对应的起始运行状态参数和所述方法函数的终止插桩点对应的终止运行状态参数;
根据所述起始运行状态参数和所述终止运行状态参数之间的差异,获取所述方法函数的测试结果。
8.一种测试结果展示装置,其特征在于,所述装置包括:
获取模块,用于通过方法名称管理界面获取输入的关键字符;
显示模块,用于通过所述方法名称管理界面,显示应用程序的代码文件中与所述关键字符匹配的至少一个方法名称,所述代码文件包括至少一个方法函数和所述至少一个方法函数的方法名称;
所述显示模块,用于在第一方法名称对应的第一方法函数不存在调用的方法函数时,所述方法名称管理界面包括:测试结果获取按钮;响应于对第一方法名称对应的所述测试结果获取按钮的触发操作,运行所述第一方法函数,得到所述第一方法函数的测试结果;根据所述第一方法函数的测试结果,显示第一测试结果展示界面;所述第一测试结果展示界面包括所述第一方法名称对应的所述第一方法函数的测试结果;所述第一测试结果为运行所述第一方法函数所占用的内存;在显示所述第一测试结果展示界面后,将所述测试结果获取按钮替换为测试结果关闭按钮;响应于对所述第一方法名称的所述测试结果关闭按钮的触发操作,关闭所述第一测试结果展示界面;
所述显示模块,用于在所述第一方法名称对应的所述第一方法函数存在调用的方法函数时,所述方法名称管理界面包括:总测试结果获取按钮和分测试结果获取按钮;响应于所述总测试结果获取按钮的触发操作,确定所述第一方法函数调用的至少一个第二方法函数,显示所述第一方法函数的测试结果以及所述至少一个第二方法函数的测试结果;响应于所述分测试结果获取按钮的触发操作,仅显示所述第一方法函数的测试结果。
9.根据权利要求8所述的装置,其特征在于,所述显示模块包括确定单元;
所述确定单元,用于响应于对所述第一方法名称的测试结果获取指令,根据方法函数调用关系,确定所述第一方法函数调用的至少一个第二方法函数,所述方法函数调用关系包括所述代码文件中的多个方法函数之间的调用关系。
10.根据权利要求9所述的装置,其特征在于,所述装置还包括:生成模块、构成模块;
所述生成模块,用于根据语法规则对所述代码文件进行语法解析,生成所述代码文件对应的语法树;
所述构成模块,用于根据所述语法树获取所述多个方法函数之间的调用关系,构成所述方法函数调用关系。
11.根据权利要求10所述的装置,其特征在于,
所述生成模块,用于根据所述语法规则对所述代码文件中的每个类文件进行语法解析,生成所述每个类文件对应的语法树。
12.根据权利要求8所述的装置,其特征在于,
所述获取模块,用于响应于测试结果获取指令,根据所述第一方法名称,从所述代码文件对应的测试结果集合中,获取与所述第一方法名称对应存储的测试结果,所述测试结果集合中包括所述至少一个方法函数的方法名称和测试结果;
所述显示模块,用于根据与所述第一方法名称对应存储的测试结果,显示所述第一测试结果展示界面。
13.根据权利要求12所述的装置,其特征在于,所述装置还包括:运行模块、存储模块;
所述运行模块,用于运行所述至少一个方法函数,得到所述至少一个方法函数的测试结果;
所述存储模块,用于在所述测试结果集合中,将每个方法函数的方法名称与测试结果对应存储。
14.根据权利要求13所述的装置,其特征在于,所述装置还包括:插桩模块;所述运行模块包括参数获取单元、测试结果获取单元;
所述插桩模块,用于对每个方法函数进行插桩处理,得到位于所述每个方法函数之前的起始插桩点和位于所述每个方法函数之后的终止插桩点;
所述参数获取单元,用于对于每个方法函数,运行所述方法函数,获取所述方法函数的起始插桩点对应的起始运行状态参数和所述方法函数的终止插桩点对应的终止运行状态参数;
所述测试结果获取单元,用于根据所述起始运行状态参数和所述终止运行状态参数之间的差异,获取所述方法函数的测试结果。
15.一种计算机设备,其特征在于,所述计算机设备包括处理器和存储器,所述存储器中存储有至少一条指令,所述至少一条指令由所述处理器加载并执行,以实现如权利要求1至7任一项所述的测试结果展示方法中所执行的操作。
16.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有至少一条指令,所述至少一条指令由处理器加载并执行,以实现如权利要求1至7任一项所述的测试结果展示方法中所执行的操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010322405.2A CN111563035B (zh) | 2020-04-22 | 2020-04-22 | 测试结果展示方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010322405.2A CN111563035B (zh) | 2020-04-22 | 2020-04-22 | 测试结果展示方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111563035A CN111563035A (zh) | 2020-08-21 |
CN111563035B true CN111563035B (zh) | 2023-05-12 |
Family
ID=72070541
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010322405.2A Active CN111563035B (zh) | 2020-04-22 | 2020-04-22 | 测试结果展示方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111563035B (zh) |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109684188A (zh) * | 2017-10-19 | 2019-04-26 | 北京京东尚科信息技术有限公司 | 测试方法和装置 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5381284B2 (ja) * | 2008-05-20 | 2014-01-08 | 株式会社リコー | ソフトウェア開発支援装置、方法、プログラム及びコンピュータ読取可能な記録媒体 |
CN103631573B (zh) * | 2012-08-24 | 2017-12-08 | 中兴通讯股份有限公司 | 可迁移函数执行时间的获得方法及系统 |
US10296563B2 (en) * | 2016-05-09 | 2019-05-21 | Salesforce.Com, Inc. | Automated testing of perceptible web page elements |
CN110275836B (zh) * | 2019-06-27 | 2024-04-19 | 深圳市腾讯信息技术有限公司 | 虚幻引擎应用的安全测试方法、装置及存储介质 |
CN110457211B (zh) * | 2019-07-23 | 2022-05-06 | 腾讯科技(深圳)有限公司 | 脚本性能测试方法、装置和设备及计算机存储介质 |
-
2020
- 2020-04-22 CN CN202010322405.2A patent/CN111563035B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109684188A (zh) * | 2017-10-19 | 2019-04-26 | 北京京东尚科信息技术有限公司 | 测试方法和装置 |
Non-Patent Citations (2)
Title |
---|
Read JavaScript Source Code, Using an AST;Bart Ledoux;https://www.digitalocean.com/community/tutorials/js-traversing-ast;全文 * |
定义抽象语法树结构;rv0p111;https://blog.csdn.net/ZCMUCZX/article/details/80736017;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN111563035A (zh) | 2020-08-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109582579B (zh) | 应用程序测试方法、装置、电子设备及存储介质 | |
CN112052008B (zh) | 代码检查方法、装置、计算机设备及计算机可读存储介质 | |
CN110471858B (zh) | 应用程序测试方法、装置及存储介质 | |
CN112116690B (zh) | 视频特效生成方法、装置及终端 | |
CN108132790B (zh) | 检测无用代码的方法、装置及计算机存储介质 | |
CN112000331A (zh) | 页面渲染方法、装置、电子设备及存储介质 | |
CN113742366B (zh) | 数据处理方法、装置、计算机设备及存储介质 | |
CN112035768A (zh) | 快应用的页面渲染方法、装置、存储介质及电子设备 | |
WO2021244267A1 (zh) | 应用程序的移植方法、装置、设备及介质 | |
CN111897525A (zh) | 大数据处理方法及系统 | |
CN109814930A (zh) | 一种应用加载方法、装置及移动终端 | |
CN112269853A (zh) | 检索处理方法、装置及存储介质 | |
CN111459466B (zh) | 代码生成方法、装置、设备及存储介质 | |
CN113822322A (zh) | 图像处理模型训练方法及文本处理模型训练方法 | |
CN111125602B (zh) | 页面构建方法、装置、设备和存储介质 | |
CN114371985A (zh) | 自动化测试方法、电子设备及存储介质 | |
CN112052167A (zh) | 生成测试脚本代码的方法和装置 | |
CN114064450A (zh) | 应用程序测试方法、装置、电子设备及存储介质 | |
CN111737100A (zh) | 数据获取方法、装置、设备及存储介质 | |
US11537213B2 (en) | Character recommending method and apparatus, and computer device and storage medium | |
CN111797017B (zh) | 存储日志的方法、装置、测试设备及存储介质 | |
CN112036492B (zh) | 样本集处理方法、装置、设备及存储介质 | |
CN111312207B (zh) | 文本转音频方法、装置、计算机设备及存储介质 | |
CN111563035B (zh) | 测试结果展示方法、装置、设备及存储介质 | |
CN113469360A (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 | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40028387 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant |