CN110147313A - 一种日志输出方法及装置 - Google Patents
一种日志输出方法及装置 Download PDFInfo
- Publication number
- CN110147313A CN110147313A CN201910286971.XA CN201910286971A CN110147313A CN 110147313 A CN110147313 A CN 110147313A CN 201910286971 A CN201910286971 A CN 201910286971A CN 110147313 A CN110147313 A CN 110147313A
- Authority
- CN
- China
- Prior art keywords
- function
- log
- target software
- calling relationship
- test
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 51
- 230000006870 function Effects 0.000 claims description 457
- 238000012360 testing method Methods 0.000 claims description 108
- 238000004590 computer program Methods 0.000 claims description 8
- 230000004807 localization Effects 0.000 claims description 8
- 239000010410 layer Substances 0.000 description 96
- 239000012792 core layer Substances 0.000 description 30
- 230000002688 persistence Effects 0.000 description 21
- 238000010586 diagram Methods 0.000 description 11
- 241000208340 Araliaceae Species 0.000 description 10
- 235000005035 Panax pseudoginseng ssp. pseudoginseng Nutrition 0.000 description 10
- 235000003140 Panax quinquefolius Nutrition 0.000 description 10
- 235000008434 ginseng Nutrition 0.000 description 10
- 238000011160 research Methods 0.000 description 7
- 230000010354 integration Effects 0.000 description 5
- 238000011161 development Methods 0.000 description 4
- 230000002159 abnormal effect Effects 0.000 description 2
- 235000013399 edible fruits Nutrition 0.000 description 2
- 238000009434 installation Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000001787 Wald–Wolfowitz test Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000012790 confirmation Methods 0.000 description 1
- -1 for providing data Substances 0.000 description 1
- 238000011835 investigation Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 239000013589 supplement Substances 0.000 description 1
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/362—Software debugging
- G06F11/3644—Software debugging by instrumenting at runtime
-
- 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
- G06F11/3692—Test management for test results analysis
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)
Abstract
本申请公开了一种日志输出方法及装置。其中所述日志输出方法,包括:获取服务请求;针对所述服务请求运行与所述服务请求对应的函数,获得运行结果;根据所述运行结果,生成用于表征函数调用关系的函数调用链;根据所述函数调用链生成记录有函数调用关系的日志;输出所述日志。采用本申请提供的方法,解决了现有技术中,采用在代码中增加断点的方法定位软件问题,存在的定位效率低的问题。
Description
技术领域
本申请涉及软件测试领域,具体涉及一种日志输出方法及装置。
背景技术
现在软件***的代码行数经常可以达到百万到千万的数量级。根据软件需求的变化,研发人员经常需要在原有代码基础上,进行新功能的迭代开发。在迭代开发的过程中,经常会引入新的问题,例如破坏了原有代码的运行逻辑、或者新增加的代码功能不够完善等。在开发完毕后,需要进行各种级别的测试,例如单元测试、集成测试、***联调等。
在上述测试过程中,一旦发现软件***存在问题,首先需要定位问题所在的代码位置。现有技术中,一般采用在代码中增加断点的方法定位问题所在的代码位置,然后在服务器上进行远程调试,当程序运行至断点处就会暂停,研发人员会根据断点处的程序运行状态确定软件问题。
然而,上述方法往往不能很快、准确的定位出问题代码,存在定位效率低的问题。
发明内容
本申请提供一种日志输出方法,以提高定位问题代码的效率。
所述日志输出方法,包括:
获取服务请求;
针对所述服务请求运行与所述服务请求对应的函数,获得运行结果;
根据所述运行结果,生成用于表征函数调用关系的函数调用链;
根据所述函数调用链生成记录有函数调用关系的日志;
输出所述日志。
可选的,所述运行结果包括函数调用关系;
所述根据所述运行结果,生成用于表征函数调用关系的函数调用链,包括:根据所述运行结果包括的函数调用关系,生成所述函数调用链。
可选的,所述根据所述运行结果包括的函数调用关系,生成所述函数调用链,包括:
将针对所述服务请求调用的第一个函数作为根节点,将所述第一个函数需要直接或间接调用的函数作为所述根节点的子孙节点,生成用于表征函数调用关系的函数关系调用树。
可选的,所述运行结果还包括函数调用所使用的请求参数以及被调用函数向调用函数返回的执行结果中的至少一种数据;
所述函数调用链包括函数调用所使用的请求参数以及被调用函数向调用函数返回的执行结果中的至少一种数据;
所述日志还记录有函数调用所使用的请求参数以及被调用函数向调用函数返回的执行结果中的至少一种数据。
可选的,所述根据所述函数调用链生成记录有函数调用关系的日志,包括:
从所述函数关系调用树中的根节点开始,按照深度优先的方式遍历所述函数关系调用树,在日志中记录函数调用关系,生成记录有函数调用关系的日志。
可选的,所述日志记录的函数调用关系包括问题函数的信息。
可选的,所述与所述服务请求对应的函数为接口层、服务层、核心层、持久化层、调用外部服务层以及基础工具层中的至少一个层中的函数。
可选的,所述针对所述服务请求运行与所述服务请求对应的函数,获得运行结果,包括:
根据所述服务请求,运行接口层的函数;
根据所述接口层的函数的调用信息,运行所述服务层的函数;
根据所述服务层的函数的调用信息,运行所述核心层的函数;
根据所述核心层的函数的调用信息,运行所述持久化层的函数;
根据所述接口层的函数的运行信息、所述服务层的函数的运行信息、所述核心层的函数的运行信息以及所述持久化层的函数的运行信息,获得运行结果。
可选的,所述根据所述运行结果,生成用于表征函数调用关系的函数调用链,包括:
根据所述服务层的函数的运行信息,获得所述接口层的函数和所述服务层的函数之间的调用关系;
根据所述核心层的函数的运行信息,获得所述服务层的函数和所述核心层的函数之间的调用关系;
根据所述持久化层的函数的运行信息,获得所述核心层的函数和所述持久化层的函数之间的调用关系;
根据所述接口层的函数和所述服务层的函数之间的调用关系、所述服务层的函数和所述核心层的函数之间的调用关系以及所述核心层的函数和所述持久化层的函数之间的调用关系,生成用于表征函数调用关系的函数调用链。
本申请提供一种日志输出装置,包括:
获取单元,用于获取服务请求;
获得单元,用于针对所述服务请求运行与所述服务请求对应的函数,获得运行结果;
生成单元,用于根据所述运行结果,生成用于表征函数调用关系的函数调用链;
日志单元,用于根据所述函数调用链生成记录有函数调用关系的日志;
输出单元,用于输出所述日志。
可选的,所述运行结果包括函数调用关系;
所述根据所述运行结果,生成用于表征函数调用关系的函数调用链,包括:根据所述运行结果包括的函数调用关系,生成所述函数调用链。
可选的,所述生成单元,具体用于:
将针对所述服务请求调用的第一个函数作为根节点,将所述第一个函数需要直接或间接调用的函数作为所述根节点的子孙节点,生成用于表征函数调用关系的函数关系调用树。
可选的,所述运行结果还包括函数调用所使用的请求参数以及被调用函数向调用函数返回的执行结果中的至少一种数据;
所述函数调用链包括函数调用所使用的请求参数以及被调用函数向调用函数返回的执行结果中的至少一种数据;
所述日志还记录有函数调用所使用的请求参数以及被调用函数向调用函数返回的执行结果中的至少一种数据。
可选的,所述日志单元,具体用于:
从所述函数关系调用树中的根节点开始,按照深度优先的方式遍历所述函数关系调用树,在日志中记录函数调用关系,生成记录有函数调用关系的日志。
可选的,所述日志记录的函数调用关系包括问题函数的信息。
可选的,所述与所述服务请求对应的函数为接口层、服务层、核心层、持久化层、调用外部服务层以及基础工具层中的至少一个层中的函数。
本申请提供一种电子设备,所述电子设备包括:
处理器;
存储器,用于存储程序,所述程序在被所述处理器读取执行时,执行如下操作:
获取服务请求;
针对所述服务请求运行与所述服务请求对应的函数,获得运行结果;
根据所述运行结果,生成用于表征函数调用关系的函数调用链;
根据所述函数调用链生成记录有函数调用关系的日志;
输出所述日志。
本申请提供一种计算机可读取存储介质,其上存储有计算机程序,该程序被处理器执行时,实现以下步骤:
获取服务请求;
针对所述服务请求运行与所述服务请求对应的函数,获得运行结果;
根据所述运行结果,生成用于表征函数调用关系的函数调用链;
根据所述函数调用链生成记录有函数调用关系的日志;
输出所述日志。
本申请提供一种问题函数的定位方法,包括:
获得针对目标软件的测试请求;
针对所述测试请求对所述目标软件进行测试,获得测试结果;
如果根据测试结果确定所述目标软件存在问题,则获得记录有所述目标软件的函数调用关系的日志;
根据所述函数调用关系,查找所述目标软件中存在问题的函数。
可选的,所述针对所述测试请求对所述目标软件进行测试,获得测试结果,包括:指示所述目标软件运行指定的测试用例,获得所述目标软件的运行结果;
所述方法还包括:
记录所述目标软件运行所述测试用例所产生的函数调用关系;
生成记录有所述所产生的函数调用关系的日志;
存储所述记录有所述所产生的函数调用关系的日志;
所述获得记录有所述目标软件的函数调用关系的日志,包括:获得存储的所述记录有所述所产生的函数调用关系的日志。
可选的,所述根据所述函数调用关系,查找所述目标软件中存在问题的函数,包括:
在所述日志中查找在所述函数调用关系中最后一个被调用的函数的信息;
将所述最后一个被调用的函数的信息确定为问题函数的信息。
可选的,所述日志还记录有函数调用所使用的请求参数以及被调用函数向调用函数返回的执行结果中的至少一种数据;
所述根据所述函数调用关系,查找所述目标软件中存在问题的函数,包括:根据所述函数调用关系,并根据所述请求参数以及所述执行结果中的至少一种数据,在所述日志中查找问题函数的信息。
本申请提供一种问题函数的定位装置,包括:
请求获得单元,用于获得针对目标软件的测试请求;
结果获得单元,用于针对所述测试请求对所述目标软件进行测试,获得测试结果;
日志获得单元,用于如果根据测试结果确定所述目标软件存在问题,则获得记录有所述目标软件的函数调用关系的日志;
函数查找单元,用于根据所述函数调用关系,查找所述目标软件中存在问题的函数。
可选的,所述结果获得单元,具体用于:指示所述目标软件运行指定的测试用例,获得所述目标软件的运行结果;
所述定位装置还用于:
记录所述目标软件运行所述测试用例所产生的函数调用关系;
生成记录有所述所产生的函数调用关系的日志;
存储所述记录有所述所产生的函数调用关系的日志;
所述日志获得单元,具体用于:获得存储的所述记录有所述所产生的函数调用关系的日志。
可选的,所述函数查找单元,具体用于:
在所述日志中查找在所述函数调用关系中最后一个被调用的函数的信息;
将所述最后一个被调用的函数的信息确定为问题函数的信息。
可选的,所述日志还记录有函数调用所使用的请求参数以及被调用函数向调用函数返回的执行结果中的至少一种数据;
所述函数查找单元,具体用于:根据所述函数调用关系,并根据所述请求参数以及所述执行结果中的至少一种数据,在所述日志中查找问题函数的信息。
本申请提供一种电子设备,所述电子设备包括:
处理器;
存储器,用于存储程序,所述程序在被所述处理器读取执行时,执行如下操作:
获得针对目标软件的测试请求;
针对所述测试请求对所述目标软件进行测试,获得测试结果;
如果根据测试结果确定所述目标软件存在问题,则获得记录有所述目标软件的函数调用关系的日志;
根据所述函数调用关系,查找所述目标软件中存在问题的函数。
本申请提供一种计算机可读取存储介质,其上存储有计算机程序,该程序被处理器执行时,实现以下步骤:
获得针对目标软件的测试请求;
针对所述测试请求对所述目标软件进行测试,获得测试结果;
如果根据测试结果确定所述目标软件存在问题,则获得记录有所述目标软件的函数调用关系的日志;
根据所述函数调用关系,查找所述目标软件中存在问题的函数。
采用本申请提供的日志输出方法,获取服务请求;针对所述服务请求运行与所述服务请求对应的函数,获得运行结果;根据所述运行结果,生成用于表征函数调用关系的函数调用链;根据所述函数调用链生成记录有函数调用关系的日志;输出所述日志。通过针对这种记录有函数调用关系的日志进行分析,可以根据函数调用关系快速、准确的定位出问题函数,从而快速、准确的定位出问题代码,提高了定位问题代码的效率。
附图说明
图1是本申请第一实施例提供的一种日志输出方法的实施例示意图;
图2是本申请第一实施例提供的一种日志输出方法的流程图;
图3是本申请第一实施例涉及的被测试软件***的函数调用过程示意图;
图4是本申请第一实施例涉及的函数调用链的树状示意图;
图5是本申请第二实施例提供的一种日志输出装置的示意图;
图6是本申请第五实施例提供的一种问题函数的定位方法的流程图;
图7是本申请第五实施例涉及的定位问题函数的示意图;
图8是本申请第六实施例提供的一种问题函数的定位装置的示意图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。
本申请第一实施例提供一种日志输出方法。
为了使本领域的技术人员更好的理解本申请方案,下面基于本申请提供的一种日志输出方法,对其实施例的具体应用场景进行详细描述。如图1所示,其为本申请提供的一种日志输出的应用场景的实施例示意图。
在具体实施过程中,本申请实施所述日志输出方法,在图1中,可以由终端向运行目标软件的服务器发送测试指令;服务器收到测试指令后,服务器启动待测试的目标软件;服务器运行测试用例,针对所述目标软件进行测试;服务器会将包括函数调用关系的日志发送给客户端;客户端针对日志进行分析,获取日志中的函数调用链信息;客户端根据所述函数调用链信息,定位软件问题。
请参看图2,该图为本申请第一实施例的流程图。以下结合图2对本申请第一实施例提供一种日志输出方法进行详细说明。所述方法包括如下步骤:
步骤S201:获取服务请求。
本步骤用于获取服务请求。
一个软件***的代码行数往往以万为单元,其中大型软件可以达到百万到千万的级别。本实施例中,软件***可以为用于电商的软件***等。所述服务请求,可以是软件***获取的来自于外部的服务请求,例如客户向所述软件***发出的用于查询距离该客户最近的商家的服务请求。
步骤S202:针对所述服务请求运行与所述服务请求对应的函数,获得运行结果。
本步骤用于针对所述服务请求运行与所述服务请求对应的函数,获得运行结果。
所述与所述服务请求对应的函数为接口层、服务层、核心层、持久化层、调用外部服务层以及基础工具层中的至少一个层中的函数。
所述针对所述服务请求运行与所述服务请求对应的函数,获得运行结果,包括:
根据所述服务请求,运行接口层的函数;
根据所述接口层的函数的调用信息,运行所述服务层的函数;
根据所述服务层的函数的调用信息,运行所述核心层的函数;
根据所述核心层的函数的调用信息,运行所述持久化层的函数;
根据所述接口层的函数的运行信息、所述服务层的函数的运行信息、所述核心层的函数的运行信息以及所述持久化层的函数的运行信息,获得运行结果。
请参考图3,其为被测试软件***的函数调用关系示意图。从图3中可以看出,所述被测试软件***可以包括接口层、服务层、核心层、持久化层、调用外部服务层以及基础工具层。
其中,接口层,用于向外部提供调用的接口。服务层,用于向接口层提供数据,核心层,用于软件***核心逻辑的实现。持久化层,用于针对软件***的数据进行持久化处理。调用外部服务层,用于调用外部服务。基础工具层,用于向软件***提供基础的处理工具。
所述运行结果包括函数调用关系;
所述根据所述运行结果,生成用于表征函数调用关系的函数调用链,包括:根据所述运行结果包括的函数调用关系,生成所述函数调用链。
所述根据所述运行结果,生成用于表征函数调用关系的函数调用链,包括:
根据所述服务层的函数的运行信息,获得所述接口层的函数和所述服务层的函数之间的调用关系;
根据所述核心层的函数的运行信息,获得所述服务层的函数和所述核心层的函数之间的调用关系;
根据所述持久化层的函数的运行信息,获得所述核心层的函数和所述持久化层的函数之间的调用关系;
根据所述接口层的函数和所述服务层的函数之间的调用关系、所述服务层的函数和所述核心层的函数之间的调用关系以及所述核心层的函数和所述持久化层的函数之间的调用关系,生成用于表征函数调用关系的函数调用链。
在图3中,标识出了软件***针对服务请求的函数调用过程。
第1步,接口层的函数I1根据服务请求,调用服务层的函数S1;
第2步,服务层的函数S1调用核心层的函数C1;
第3步,核心层的函数C1使用调用外部层的函数W3;
第4步,核心层的函数C1还调用持久化层的函数D1;
第5步,服务层的函数S1调用核心层的函数C2;
第6步,核心层的函数C2调用持久化层的函数D3;
第7步,核心层的函数C2调用基础工具层的函数U4;
第8步,接口层的函数I1还调用服务层的函数S2;
第9步,服务层的函数S2调用基础工具层的函数U2。
步骤S203:根据所述运行结果,生成用于表征函数调用关系的函数调用链。
本步骤用于根据所述运行结果,生成用于表征函数调用关系的函数调用链。
所述根据所述运行结果包括的函数调用关系,生成所述函数调用链,包括:
将针对所述服务请求调用的第一个函数作为根节点,将所述第一个函数需要直接或间接调用的函数作为所述根节点的子孙节点,生成用于表征函数调用关系的函数关系调用树。
例如,根据步骤S202中针对图3的调用分析,图4给出了生成用于表征函数调用关系的函数调用链的树状示意图。
图4中,接口层的函数I1,作为针对所述服务请求调用的第一个函数,成为根节点。服务层的函数S1和服务层的函数S2,作为接口层的函数I1的子节点。核心层的函数C1和核心层的函数C2,作为服务层函数S1的子节点。基础工具层的函数U2,作为服务层函数S2的子节点。调用外部服务层的函数W3以及持久化层函数D1,作为核心层函数C1的子节点。持久化层函数D3以及基础工具层的函数U4,作为核心层函数C2的子节点。
所述运行结果还包括函数调用所使用的请求参数以及被调用函数向调用函数返回的执行结果中的至少一种数据;
所述函数调用链包括函数调用所使用的请求参数以及被调用函数向调用函数返回的执行结果中的至少一种数据;
所述日志还记录有函数调用所使用的请求参数以及被调用函数向调用函数返回的执行结果中的至少一种数据。
软件***的函数,包括函数的请求参数,以及函数的执行结果。其中,函数请求参数,向函数提供了具体的函数请求信息;函数的执行结果,向该函数的调用者提供函数执行的结果。例如该函数成功执行,或者该函数执行失败,并返回表征该函数执行失败原因的错误码。
步骤S204:根据所述函数调用链生成记录有函数调用关系的日志。
本步骤用于根据所述函数调用链生成记录有函数调用关系的日志。
所述根据所述函数调用链生成记录有函数调用关系的日志,包括:
从所述函数关系调用树中的根节点开始,按照深度优先的方式遍历所述函数关系调用树,在日志中记录函数调用关系,生成记录有函数调用关系的日志。
在步骤S203中,在内存中保存了图4中所示的函数关系调用树。从所述函数关系调用树中的根节点开始,按照深度优先的方式遍历所述函数关系调用树,在日志中记录函数调用关系,生成记录有函数调用关系的日志。
所述日志记录的函数调用关系包括问题函数的信息。
在所述日志记录的函数调用关系,还包括了在软件***的执行过程的问题函数的信息,例如函数的请求参数,函数的返回值等。
步骤S205:输出所述日志。
本步骤用于输出所述日志。下面给出了根据图4输出日志的示意图。
I1(被调用的接口),请求入参,返回结果
S1(被调用的函数),请求入参,返回结果
C1(被调用的函数),请求入参,返回结果
W3(被调用的函数),请求入参,返回结果
D1(被调用的函数),请求入参,返回结果
C2(被调用的函数),请求入参,返回结果
D3(被调用的函数),请求入参,返回结果
U4(被调用的函数),请求入参,返回结果
S2(被调用的函数),请求入参,返回结果
U2(被调用的函数),请求入参,返回结果
在上述的实施例中,提供了一种日志输出方法,与之相对应的,本申请还提供一种日志输出装置。请参看图5,其为本申请的一种日志输出装置实施例的流程图。由于本实施例,即第二实施例,基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。
本实施例提供的一种日志输出装置,包括:
获取单元501,用于获取服务请求;
获得单元502,用于针对所述服务请求运行与所述服务请求对应的函数,获得运行结果;
生成单元503,用于根据所述运行结果,生成用于表征函数调用关系的函数调用链;
日志单元504,用于根据所述函数调用链生成记录有函数调用关系的日志;
输出单元505,用于输出所述日志。
本实施例中,所述运行结果包括函数调用关系;
所述根据所述运行结果,生成用于表征函数调用关系的函数调用链,包括:根据所述运行结果包括的函数调用关系,生成所述函数调用链。
本实施例中,所述生成单元,具体用于:
将针对所述服务请求调用的第一个函数作为根节点,将所述第一个函数需要直接或间接调用的函数作为所述根节点的子孙节点,生成用于表征函数调用关系的函数关系调用树。
本实施例中,所述运行结果还包括函数调用所使用的请求参数以及被调用函数向调用函数返回的执行结果中的至少一种数据;
所述函数调用链包括函数调用所使用的请求参数以及被调用函数向调用函数返回的执行结果中的至少一种数据;
所述日志还记录有函数调用所使用的请求参数以及被调用函数向调用函数返回的执行结果中的至少一种数据。
本实施例中,所述日志单元,具体用于:
从所述函数关系调用树中的根节点开始,按照深度优先的方式遍历所述函数关系调用树,在日志中记录函数调用关系,生成记录有函数调用关系的日志。
本实施例中,所述日志记录的函数调用关系包括问题函数的信息。
本实施例中,所述与所述服务请求对应的函数为接口层、服务层、核心层、持久化层、调用外部服务层以及基础工具层中的至少一个层中的函数。
本申请第三实施例提供一种电子设备,所述电子设备包括:
处理器;
存储器,用于存储程序,所述程序在被所述处理器读取执行时,执行如下操作:
获取服务请求;
针对所述服务请求运行与所述服务请求对应的函数,获得运行结果;
根据所述运行结果,生成用于表征函数调用关系的函数调用链;
根据所述函数调用链生成记录有函数调用关系的日志;
输出所述日志。
本申请第四实施例提供一种计算机可读取存储介质,其上存储有计算机程序,该程序被处理器执行时,实现以下步骤:
获取服务请求;
针对所述服务请求运行与所述服务请求对应的函数,获得运行结果;
根据所述运行结果,生成用于表征函数调用关系的函数调用链;
根据所述函数调用链生成记录有函数调用关系的日志;
输出所述日志。
本申请第五实施例提供一种问题函数的定位方法。请参看图6,该图为本申请第五实施例的流程图。以下结合图6对本申请第五实施例提供一种问题函数的定位方法进行详细说明。所述方法包括如下步骤:
步骤S601:获得针对目标软件的测试请求。
本步骤用于获得针对目标软件的测试请求。
现在的软件***的代码量往往比较庞大,甚至可以达到上百万到上千万的级别。在项目的迭代开发过程中,研发人员通常情况下是以原有代码为基础,进行新代码的补充或者修改。这这个过程中,可能会引入一些问题。因此在开发完成之后需要进行大量的测试工作。这些测试工作,主要包括:单元测试、集成测试、跨***联调、灰度测试等。
本实施例中的测试请求,主要是指在公用测试环境中的集成测试以及跨***测试。针对测试中发现的问题,其修复的前提是进行问题定位,目前为止,开发定位问题的方法主要是在代码中打断点,然后在服务器上进行远程调试,当程序运行到打了断点的代码行时就会暂停,方便研发人员分析代码的运作情况。这种打断点的问题定位方式,在单元测试阶段没有任何问题,因为单元测试往往在研发人员的本地机器上运行,不会有外部的请求。但是在公共的测试服务器上进行断点调试,就会遇到很大的问题:首先,需要跟所有合作方确认,在断点调试阶段除了正在定位问题的研发人员,其余人员不能使用该服务器;其次,还需要确保自动化测试等所有非人工控制的程序不会使用到该服务器。
本实施例提供的问题函数的定位方法,可以针对公用测试环境中的集成测试以及跨***测试的条件下,不方便打断点的问题,通过获取函数调用链的日志信息,准确而快速地定位问题函数。
步骤S602:针对所述测试请求对所述目标软件进行测试,获得测试结果。
本步骤用于针对所述测试请求对所述目标软件进行测试,获得测试结果。
所述针对所述测试请求对所述目标软件进行测试,获得测试结果,包括:指示所述目标软件运行指定的测试用例,获得所述目标软件的运行结果;
所述方法还包括:
记录所述目标软件运行所述测试用例所产生的函数调用关系;
生成记录有所述所产生的函数调用关系的日志;
存储所述记录有所述所产生的函数调用关系的日志;
所述获得记录有所述目标软件的函数调用关系的日志,包括:获得存储的所述记录有所述所产生的函数调用关系的日志。
一般而言,为了测试目标软件,测试人员往往会开发一些测试用例,测试目标软件的单个特性的功能,或者目标软件的***功能,或者这目标软件的性能指标。
在目标软件的测试过程中,目标软件运行指定的测试用例,获得所述目标软件的运行结果。
在目标软件的运行过程中,首先,记录所述目标软件运行所述测试用例所产生的函数调用关系;然后,生成记录有所述所产生的函数调用关系的日志;可以在非易失性存贮介质中,存储所述记录有所述所产生的函数调用关系的日志;
所述获得记录有所述目标软件的函数调用关系的日志,包括:获得存储的所述记录有所述所产生的函数调用关系的日志。
步骤S603:如果根据测试结果确定所述目标软件存在问题,则获得记录有所述目标软件的函数调用关系的日志。
本步骤用于如果根据测试结果确定所述目标软件存在问题,则获得记录有所述目标软件的函数调用关系的日志。
例如,在运行一个测试用例中,发现测试结果异常,则获得记录有所述目标软件的函数调用关系的日志。在测试过程中,针对每个测试用例,都保存了对应的测试结果。一旦发现测试结果异常,则直接获得该测试用例对应的日志文件。
步骤S604:根据所述函数调用关系,查找所述目标软件中存在问题的函数。
本步骤用于根据所述函数调用关系,查找所述目标软件中存在问题的函数。
所述根据所述函数调用关系,查找所述目标软件中存在问题的函数,包括:
在所述日志中查找在所述函数调用关系中最后一个被调用的函数的信息;
将所述最后一个被调用的函数的信息确定为问题函数的信息。
以图3提供的函数调用关系为例,针对该步骤进行说明。图7提供了根据图3提供的函数调用关系,定位问题函数的示意图。
图7中假设了D3函数调用失败的场景,图7的左侧调用树中D3代表函数内部出现问题,由于调用方C2没有拿到正确结果,因此不会再调用U4;同理,I1也不会调用S2。按照本实施例提供的方案,最终输出的日志如图7的右侧所示,出问题的函数D3成为了日志最后一行。
研发人员可以根据打印出的日志快速的定位到问题函数D3,同时还可以根据辅助排查的请求参数和返回结果,问题的具体代码行。
所述日志还记录有函数调用所使用的请求参数以及被调用函数向调用函数返回的执行结果中的至少一种数据;
所述根据所述函数调用关系,查找所述目标软件中存在问题的函数,包括:根据所述函数调用关系,并根据所述请求参数以及所述执行结果中的至少一种数据,在所述日志中查找问题函数的信息。
通过针对所述请求参数或者所述执行结果进行分析,可以更为精确的定位问题发生的代码行。
在上述的实施例中,提供了一种问题函数的定位方法,与之相对应的,本申请还提供一种问题函数的定位装置。请参看图8,其为本申请的一种问题函数的定位装置实施例的流程图。由于本实施例,即第六实施例,基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。
本实施例提供的一种问题函数的定位装置,包括:
请求获得单元801,用于获得针对目标软件的测试请求;
结果获得单元802,用于针对所述测试请求对所述目标软件进行测试,获得测试结果;
日志获得单元803,用于如果根据测试结果确定所述目标软件存在问题,则获得记录有所述目标软件的函数调用关系的日志;
函数查找单元804,用于根据所述函数调用关系,查找所述目标软件中存在问题的函数。
本实施例中,所述结果获得单元,具体用于:指示所述目标软件运行指定的测试用例,获得所述目标软件的运行结果;
所述定位装置还用于:
记录所述目标软件运行所述测试用例所产生的函数调用关系;
生成记录有所述所产生的函数调用关系的日志;
存储所述记录有所述所产生的函数调用关系的日志;
所述日志获得单元,具体用于:获得存储的所述记录有所述所产生的函数调用关系的日志。
本实施例中,所述函数查找单元,具体用于:
在所述日志中查找在所述函数调用关系中最后一个被调用的函数的信息;
将所述最后一个被调用的函数的信息确定为问题函数的信息。
本实施例中,所述日志还记录有函数调用所使用的请求参数以及被调用函数向调用函数返回的执行结果中的至少一种数据;
所述函数查找单元,具体用于:根据所述函数调用关系,并根据所述请求参数以及所述执行结果中的至少一种数据,在所述日志中查找问题函数的信息。
本申请第七实施例提供一种电子设备,所述电子设备包括:
处理器;
存储器,用于存储程序,所述程序在被所述处理器读取执行时,执行如下操作:
获得针对目标软件的测试请求;
针对所述测试请求对所述目标软件进行测试,获得测试结果;
如果根据测试结果确定所述目标软件存在问题,则获得记录有所述目标软件的函数调用关系的日志;
根据所述函数调用关系,查找所述目标软件中存在问题的函数。
本申请第八实施例提供一种计算机可读取存储介质,其上存储有计算机程序,该程序被处理器执行时,实现以下步骤:
获得针对目标软件的测试请求;
针对所述测试请求对所述目标软件进行测试,获得测试结果;
如果根据测试结果确定所述目标软件存在问题,则获得记录有所述目标软件的函数调用关系的日志;
根据所述函数调用关系,查找所述目标软件中存在问题的函数。
本申请虽然以较佳实施例公开如上,但其并不是用来限定本申请,任何本领域技术人员在不脱离本申请的精神和范围内,都可以做出可能的变动和修改,因此本申请的保护范围应当以本申请权利要求所界定的范围为准。
在一个典型的配置中,计算设备包括一个或多个操作器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
1、计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
2、本领域技术人员应明白,本申请的实施例可提供为方法、***或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
Claims (10)
1.一种日志输出方法,其特征在于,包括:
获取服务请求;
针对所述服务请求运行与所述服务请求对应的函数,获得运行结果;
根据所述运行结果,生成用于表征函数调用关系的函数调用链;
根据所述函数调用链生成记录有函数调用关系的日志;
输出所述日志。
2.根据权利要求1所述的日志输出方法,其特征在于,所述运行结果包括函数调用关系;
所述根据所述运行结果,生成用于表征函数调用关系的函数调用链,包括:根据所述运行结果包括的函数调用关系,生成所述函数调用链。
3.一种日志输出装置,其特征在于,包括:
获取单元,用于获取服务请求;
获得单元,用于针对所述服务请求运行与所述服务请求对应的函数,获得运行结果;
生成单元,用于根据所述运行结果,生成用于表征函数调用关系的函数调用链;
日志单元,用于根据所述函数调用链生成记录有函数调用关系的日志;
输出单元,用于输出所述日志。
4.一种电子设备,其特征在于,所述电子设备包括:
处理器:
存储器,用于存储程序,所述程序在被所述处理器读取执行时,执行如下操作:
获取服务请求;
针对所述服务请求运行与所述服务请求对应的函数,获得运行结果;
根据所述运行结果,生成用于表征函数调用关系的函数调用链;
根据所述函数调用链生成记录有函数调用关系的日志;
输出所述日志。
5.一种计算机可读取存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时,实现以下步骤:
获取服务请求;
针对所述服务请求运行与所述服务请求对应的函数,获得运行结果;
根据所述运行结果,生成用于表征函数调用关系的函数调用链;
根据所述函数调用链生成记录有函数调用关系的日志;
输出所述日志。
6.一种问题函数的定位方法,其特征在于,包括:
获得针对目标软件的测试请求;
针对所述测试请求对所述目标软件进行测试,获得测试结果;
如果根据测试结果确定所述目标软件存在问题,则获得记录有所述目标软件的函数调用关系的日志;
根据所述函数调用关系,查找所述目标软件中存在问题的函数。
7.根据权利要求6所述的问题函数的定位方法,其特征在于,所述针对所述测试请求对所述目标软件进行测试,获得测试结果,包括:指示所述目标软件运行指定的测试用例,获得所述目标软件的运行结果;
所述方法还包括:
记录所述目标软件运行所述测试用例所产生的函数调用关系;
生成记录有所述所产生的函数调用关系的日志;
存储所述记录有所述所产生的函数调用关系的日志;
所述获得记录有所述目标软件的函数调用关系的日志,包括:获得存储的所述记录有所述所产生的函数调用关系的日志。
8.一种问题函数的定位装置,其特征在于,包括:
请求获得单元,用于获得针对目标软件的测试请求;
结果获得单元,用于针对所述测试请求对所述目标软件进行测试,获得测试结果;
日志获得单元,用于如果根据测试结果确定所述目标软件存在问题,则获得记录有所述目标软件的函数调用关系的日志;
函数查找单元,用于根据所述函数调用关系,查找所述目标软件中存在问题的函数。
9.一种电子设备,其特征在于,所述电子设备包括:
处理器;
存储器,用于存储程序,所述程序在被所述处理器读取执行时,执行如下操作:
获得针对目标软件的测试请求;
针对所述测试请求对所述目标软件进行测试,获得测试结果;
如果根据测试结果确定所述目标软件存在问题,则获得记录有所述目标软件的函数调用关系的日志;
根据所述函数调用关系,查找所述目标软件中存在问题的函数。
10.一种计算机可读取存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时,实现以下步骤:
获得针对目标软件的测试请求;
针对所述测试请求对所述目标软件进行测试,获得测试结果;
如果根据测试结果确定所述目标软件存在问题,则获得记录有所述目标软件的函数调用关系的日志;
根据所述函数调用关系,查找所述目标软件中存在问题的函数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910286971.XA CN110147313B (zh) | 2019-04-10 | 2019-04-10 | 一种日志输出方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910286971.XA CN110147313B (zh) | 2019-04-10 | 2019-04-10 | 一种日志输出方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110147313A true CN110147313A (zh) | 2019-08-20 |
CN110147313B CN110147313B (zh) | 2023-11-10 |
Family
ID=67589696
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910286971.XA Active CN110147313B (zh) | 2019-04-10 | 2019-04-10 | 一种日志输出方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110147313B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114500660A (zh) * | 2020-10-23 | 2022-05-13 | 中移(苏州)软件技术有限公司 | 请求处理方法、装置、设备及计算机可读存储介质 |
CN114580325A (zh) * | 2021-12-31 | 2022-06-03 | 上海盈方微电子有限公司 | 芯片RTL验证阶段Tarmac日志分析方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103123601A (zh) * | 2011-11-17 | 2013-05-29 | 北京神州泰岳软件股份有限公司 | 基于Symbian***的软件开发故障查找的方法和装置 |
CN107015841A (zh) * | 2017-03-31 | 2017-08-04 | 腾讯科技(深圳)有限公司 | 一种程序编译的预处理方法及程序编译设备 |
CN109522209A (zh) * | 2018-09-29 | 2019-03-26 | 中国平安人寿保险股份有限公司 | 日志堆栈信息分析方法及装置、计算机装置及存储介质 |
-
2019
- 2019-04-10 CN CN201910286971.XA patent/CN110147313B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103123601A (zh) * | 2011-11-17 | 2013-05-29 | 北京神州泰岳软件股份有限公司 | 基于Symbian***的软件开发故障查找的方法和装置 |
CN107015841A (zh) * | 2017-03-31 | 2017-08-04 | 腾讯科技(深圳)有限公司 | 一种程序编译的预处理方法及程序编译设备 |
CN109522209A (zh) * | 2018-09-29 | 2019-03-26 | 中国平安人寿保险股份有限公司 | 日志堆栈信息分析方法及装置、计算机装置及存储介质 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114500660A (zh) * | 2020-10-23 | 2022-05-13 | 中移(苏州)软件技术有限公司 | 请求处理方法、装置、设备及计算机可读存储介质 |
CN114500660B (zh) * | 2020-10-23 | 2023-11-03 | 中移(苏州)软件技术有限公司 | 请求处理方法、装置、设备及计算机可读存储介质 |
CN114580325A (zh) * | 2021-12-31 | 2022-06-03 | 上海盈方微电子有限公司 | 芯片RTL验证阶段Tarmac日志分析方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110147313B (zh) | 2023-11-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107908541B (zh) | 接口测试方法、装置、计算机设备及存储介质 | |
CN107122368B (zh) | 一种数据校验方法、装置及电子设备 | |
CN109800258B (zh) | 数据文件部署方法、装置、计算机设备及存储介质 | |
EP2779044A1 (en) | System and method to provide management of test data at various lifecycle stages | |
CN110287696B (zh) | 一种反弹shell进程的检测方法、装置和设备 | |
CN107665171A (zh) | 自动回归测试方法及装置 | |
CN111158741B (zh) | 监控业务模块对第三方类库依赖关系变化的方法及装置 | |
CN107080945B (zh) | 测试游戏中人工智能行为的方法、装置及电子设备 | |
CN110134582A (zh) | 测试用例的处理及数据处理方法及装置 | |
CN111258881B (zh) | 一种用于工作流程测试的智能测试*** | |
CN115080398A (zh) | 一种接口自动化测试***及方法 | |
US11663113B2 (en) | Real time fault localization using combinatorial test design techniques and test case priority selection | |
CN111831574B (zh) | 回归测试规划方法、装置、计算机***和介质 | |
CN110147313A (zh) | 一种日志输出方法及装置 | |
CN113220597B (zh) | 测试方法、测试装置、电子设备及存储介质 | |
CN114691506A (zh) | 压力测试方法、装置、设备、介质和程序产品 | |
CN114416545A (zh) | 确定测试代码覆盖率的方法、装置和电子设备 | |
CN114238085A (zh) | 接口测试方法、装置、计算机设备、存储介质 | |
WO2023125059A1 (zh) | 故障数据获取方法、故障处理方法、电子设备及存储介质 | |
CN116561003A (zh) | 测试数据生成方法、装置、计算机设备和存储介质 | |
CN112579456B (zh) | 一种Web自动化测试方法及装置 | |
CN115981901A (zh) | 一种针对交换机自动化测试的故障定位方法、设备及介质 | |
CN110716860B (zh) | 一种基于云平台的自动化测试工具管理方法及*** | |
CN112559331A (zh) | 测试方法和装置 | |
CN115705297A (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 |