CN106502901A - 覆盖率检测方法、装置和设备 - Google Patents
覆盖率检测方法、装置和设备 Download PDFInfo
- Publication number
- CN106502901A CN106502901A CN201610936654.4A CN201610936654A CN106502901A CN 106502901 A CN106502901 A CN 106502901A CN 201610936654 A CN201610936654 A CN 201610936654A CN 106502901 A CN106502901 A CN 106502901A
- Authority
- CN
- China
- Prior art keywords
- file
- program
- data
- code
- performing 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
Links
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
- G06F11/3676—Test management for coverage 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
技术领域
本发明涉及计算机技术领域,尤其涉及一种覆盖率检测方法、装置和设备。
背景技术
代码覆盖率测试,是软件测试过程中最重要的测试方法和测试效果衡量标准之一,覆盖率指的是源代码执行过程中被测试所覆盖到代码的比例和程度,通常用百分比表示。
对不同的编程语言来说,都有相应的检测代码覆盖率的方法。目前较主流的游戏服务器架构之一,是基于C++底层和Python上层构建实现。目前针对Python代码覆盖率的检测,最常用的是基于python类库coverage的技术方案。具体的是利用Python的sys模块中提供settrace函数,跟踪代码的执行情况,将覆盖率数据存储到Collector中的Stack中。每当开始采集时,Collector不断执行入栈操作,停止采集时,通过出栈操作即可获取已采集的覆盖率信息。
然而,在实际的游戏服务器代码覆盖率测试过程中,通常是不同的测试人员各自维护一个游戏服务器,每个游戏服务器独立运行和进行相关测试,因此采用上述方式得到某个游戏服务器的覆盖率数据,无法得到所有人针对某个版本代码进行覆盖率测试的结果。
发明内容
本发明实施例提供一种覆盖率检测方法、装置和设备,用于解决采用上述方式得到某个游戏服务器的覆盖率数据,无法得到所有人针对某个版本代码进行覆盖率测试的结果的问题。
本发明第一方面提供一种覆盖率检测方法,包括:
接收至少两个服务器发送的程序执行数据;所述程序执行数据包括每个文件的标识信息;
根据每个文件的标识信息,获取预设的第一文件的第一程序执行数据;所述第一程序数据是将所述至少一个服务器发送的所有程序执行数据中标识信息与所述第一文件的标识信息相同的程序执行数据进行合并得到的;
解析获取所述第一文件对应的源代码文件的总代码行数;
根据所述第一程序执行数据和所述总代码行数,计算获取所述第一程序代码当前的总体覆盖率。
可选的,所述方法还包括:
显示所述第一文件当前的所述总体覆盖率。
可选的,文件的标识信息包括所述文件所属项目名称、所述文件所属分支名称和所述文件的代码版本号。
可选的,所述第一文件所属项目名称为X1,所属分支为T1,版本号为Y;则所述根据每个文件的标识信息,获取预设的第一文件的第一程序执行数据,包括:
将每个程序执行数据中所属项目名称为X1、所属分支为T1、且版本号为Y的程序执行数据做并集处理,得到所述第一程序执行数据。
可选的,所述第一程序执行数据还包括所述第一文件被执行的代码行号,所述根据所述第一程序执行数据和所述总代码行数,计算获取所述第一程序代码当前的总体覆盖率,包括:
根据所述被执行的代码行号,获取所述第一文件中已执行代码的行数;
根据所述已执行代码的行数Le和所述总代码行数Lt,采用R=Le/Lt计算得到所述第一文件当前的总体覆盖率R。
可选的,所述解析获取所述第一文件对应的源代码文件的总代码行数,包括:
对所述源代码文件进行解析处理,剔除所述源代码文件中的空白行和注释行,得到所述源代码文件的所述总代码行数。
本发明第二方面提供一种覆盖率检测方法,包括:
在执行文件的程序代码的过程中,调用数据收集函数实时获取所述文件的程序执行数据;所述程序执行数据包括所述文件的标识信息;
将所述程序执行数据发送给覆盖率服务端,以使所述覆盖率服务端根据所述程序执行数据获取所述文件当前的总体覆盖率。
可选的,所述方法还包括:
将所述程序执行数据进行存储;所述程序执行数据还包括所述文件被执行的代码行号。
可选的,所述标识信息包括所述文件所属项目名称、所述文件所属分支名称和所述文件的代码版本号。
本发明第三方面提供一种覆盖率检测装置,包括:
接收模块,用于接收至少两个服务器发送的程序执行数据;所述程序执行数据包括每个文件的标识信息;
处理模块,用于根据每个文件的标识信息,获取预设的第一文件的第一程序执行数据;所述第一程序数据是将所述至少一个服务器发送的所有程序执行数据中标识信息与所述第一文件的标识信息相同的程序执行数据进行合并得到的;
所述处理模块还用于解析获取所述第一文件对应的源代码文件的总代码行数;
所述处理模块还用于根据所述第一程序执行数据和所述总代码行数,计算获取所述第一文件当前的总体覆盖率。
可选的,所述装置还包括:
显示模块,用于显示所述第一文件当前的所述总体覆盖率。
可选的,所述接收模块接收到的文件的标识信息包括所述文件所属项目名称、所述文件所属分支名称和所述文件的代码版本号。
可选的,所述第一文件所属项目名称为X1,所属分支为T1,版本号为Y;则处理模块具体用于:
将每个程序执行数据中所属项目名称为X1、所属分支为T1、且版本号为Y的程序执行数据做并集处理,得到所述第一程序执行数据。
可选的,所述第一程序执行数据还包括所述第一文件被执行的代码行号,所述处理模块还具体用于:
根据所述被执行的代码行号,获取所述第一文件中已执行代码的行数;
根据所述已执行代码的行数Le和所述总代码行数Lt,采用R=Le/Lt计算得到所述第一文件当前的总体覆盖率R。
可选的,所述处理模块还具体用于对所述源代码文件进行解析处理,剔除所述源代码文件中的空白行和注释行,得到所述源代码文件的所述总代码行数。
本发明第四方面提供一种覆盖率检测装置,包括:
处理模块,用于在执行文件的过程中,调用数据收集函数实时获取所述程序执行数据;所述程序执行数据包括所述文件的标识信息;
发送模块,用于将所述程序执行数据发送给覆盖率服务端,以使所述覆盖率服务端根据所述程序执行数据获取所述文件当前的总体覆盖率。
可选的,所述装置还包括:
存储模块,用于将所述程序执行数据进行存储;所述程序执行数据还包括所述文件被执行的代码行号。
可选的,所述标识信息包括所述文件所属项目名称、所述文件所属分支名称和所述文件的代码版本号。
本发明第五方面提供一种服务器,包括:存储有程序指令的存储器、接收器和用于控制程序指令执行的处理器;
所述接收器用于接收至少两个服务器发送的程序执行数据;所述程序执行数据包括每个文件的标识信息;
所述处理器用于:
根据每个文件的标识信息,获取预设的第一文件的第一程序执行数据;所述第一程序数据是将所述至少一个服务器发送的所有程序执行数据中标识信息与所述第一文件的标识信息相同的程序执行数据进行合并得到的;
解析获取所述第一文件对应的源代码文件的总代码行数;
根据所述第一程序执行数据和所述总代码行数,计算获取所述第一程序代码当前的总体覆盖率。
本发明第六方面提供一种服务器,包括:存储有程序指令的存储器、用于控制程序指令执行的处理器和发送器;
所述处理器用于在执行文件的程序代码的过程中,调用数据收集函数实时获取所述文件的程序执行数据;所述程序执行数据包括所述文件的标识信息;
所述发送器用于将所述程序执行数据发送给覆盖率服务端,以使所述覆盖率服务端根据所述程序执行数据获取所述文件当前的总体覆盖率。
本发明实施例提供的一种覆盖率检测方法、装置和设备,文件运行端在获取文件的程序执行数据的过程中对文件进行标识,覆盖率服务端将接收到的每个文件运行端发送的程序执行数据根据文件标识进行合并,将其中与指定的第一文件的标识相同的所有的程序执行数据进行合并,得到总体的运行数据,然后根据第一文件的源代码文件和合并得到的第一程序执行数据,计算得到该第一文件的总体覆盖率,能够得到表征所有人针对该第一文件的整体运行或者测试情况的覆盖率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。
图1为本发明实施例提供的覆盖率检测方法实例一的流程图;
图2为本发明实施例提供的覆盖率检测方法实例二的流程图;
图3为本发明实施例提供的覆盖率检测方法实例三的流程图;
图4为本发明实施例提供的覆盖率检测方法一实例的实现示意图;
图5为本发明实施例提供的覆盖率检测装置实施例一的结构示意图;
图6为本发明实施例提供的覆盖率检测装置实施例二的结构示意图;
图7为本发明实施例提供的覆盖率检测装置实施例三的结构示意图;
图8为本发明实施例提供的覆盖率检测装置实施例四的结构示意图;
图9为本发明实施例提供的服务器实施例一的结构示意图;
图10为本发明实施例提供的服务器实施例二的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
图1为本发明实施例提供的覆盖率检测方法实例一的流程图,如图1所示,该方案的执行主体为用于检测覆盖率的服务器,或者检测覆盖率的其他设备,该覆盖率检测方法的具体实现步骤为:
步骤S101,接收至少两个服务器发送的程序执行数据;所述程序执行数据包括每个文件的标识信息。
在本实施例中,这里发送程序执行数据的服务器为执行该文件的程序的服务器,例如:运行游戏程序的服务器。该方案中的文件的代码在多个服务器上进行运行或测试,每个服务器都会得到程序执行数据,每个服务器将得到的程序执行数据均发送给覆盖率检测端,该程序执行数据中携带文件的标识信息,例如:文件的名称、文件所属项目名称、文件所属分支名称和文件的代码版本号等中的至少一个。
步骤S102,根据每个文件的标识信息,获取预设的第一文件的第一程序执行数据;所述第一程序执行数据是将所述至少一个服务器发送的所有程序执行数据中标识信息与所述第一文件的标识信息相同的程序执行数据进行合并得到的。
该覆盖率检测端需要根据多个程序执行数据进行合并处理,用户可根据要求指定需要的第一文件,然后覆盖率检测端将与该第一文件的标识信息相同的文件对应的程序执行数据进行合并处理,然后得到可表征该第一文件综合运行情况的第一程序执行数据。
步骤S103,解析获取所述第一文件对应的源代码文件的总代码行数。
本方案中,覆盖率检测端的服务器或者其他的设备对指定的第一文件对应的源文件进行解析处理,得到第一文件对应的源代码的行数,这里的行数不包括空格和注释行,即得到程序的总代码行数。
步骤S104,根据所述第一程序执行数据和所述总代码行数,计算获取所述第一程序代码当前的总体覆盖率。
在本步骤中,该第一程序执行数据至少包括能够确定第一文件程序在每个服务器上已经执行的总行数的参数,例如:被执行的代码行号,或者已经执行的行数等。
覆盖率检测端的服务器或者设备根据每个文件对应的程序执行数据进行处理得到当前已经执行代码的行数,然后根据已执行代码的行数和总代码行数,计算得到每个文件覆盖率。
即通过合并的方法计算得到了不同的运行端的服务器对同一个第一文件的总体的覆盖率数值。
该过程是实时进行的,覆盖率检测端实时接收多个程序执行端的服务器发送来的多个程序执行数据,根据文件的标识信息合并处理得到每个文件的程序执行数据,按照上述方式进行处理,可以得到每个文件的总体覆盖率。
本实施例提供的覆盖率检测方法,文件运行端在获取文件的程序执行数据的过程中对文件进行标识,覆盖率服务端将接收到的每个文件运行端发送的程序执行数据根据文件标识进行合并,将其中与指定的第一文件的标识相同的所有的程序执行数据进行合并,得到总体的运行数据,然后根据第一文件的源代码文件和合并得到的第一程序执行数据,计算得到该第一文件的总体覆盖率,能够得到表征所有人针对该第一文件的整体运行或者测试情况的覆盖率。
图2为本发明实施例提供的覆盖率检测方法实例二的流程图,如图2所示,在上述实施例的基础上,提供该覆盖率检测的的具体实现方式:
步骤S201,接收至少两个服务器发送的程序执行数据;所述程序执行数据包括每个文件的标识信息。
在本步骤中,通过嵌入在服务器中的工具,在文件的程序被执行的过程中,调用数据收集函数实时获取在多个进程的文件的执行过程中得到程序执行数据,每个服务器均采用该种方式得到程序执行数据并向覆盖率检测端的设备发送检测到的程序执行数据,即在该覆盖率检测设备侧,需要实时接收不同的文件运行的服务器发送程序执行数据,每个执行数据包括文件的标识信息。
可选的,文件的标识信息包括所述文件所属项目名称、所述文件所属分支名称和所述文件的代码版本号。
步骤S202,将每个程序执行数据中所属项目名称为X1、所属分支为T1、且版本号为Y的程序执行数据做并集处理,得到所述第一程序执行数据。
在该方案中,第一文件所属项目名称为X1,所属分支为T1,版本号为Y;则所述根据每个文件的标识信息,获取预设的第一文件的第一程序执行数据,包括:可以是将所属项目名称、分支以及版本号与第一文件相同的程序执行数据合并起来。
在该方案中,得到的第一文件的第一程序执行数据中至少包括第一文件被执行的代码行号,或者至少包括可以得到当前执行的行数的相关信息。
步骤S203,对所述源代码文件进行解析处理,剔除所述源代码文件中的空白行和注释行,得到所述源代码文件的所述总代码行数。
在本步骤中,覆盖率检测端的设备端获取到的第一程序执行数据中只有对某个文件的执行的相关数据,并不能直接从第一程序执行数据中得到文件的总代码行数,因此该覆盖率检测端需要对第一文件的源代码文件进行解析,将其中注释行和空白行等无关程序实质的非代码行进行剔除,并统计得到该源代码文件的总代码行数。
步骤S204,根据所述第一程序执行数据和所述总代码行数,计算获取所述第一程序代码当前的总体覆盖率。
该步骤的具体实现中,所述第一程序执行数据还包括所述第一文件被执行的代码行号,因此计算总体覆盖的方式可以是:根据所述被执行的代码行号,获取所述第一文件中已执行代码的行数;根据所述已执行代码的行数Le和所述总代码行数Lt,采用R=Le/Lt计算得到所述第一文件当前的总体覆盖率R。
具体的,根据前述步骤覆盖率检测端已经根据第一程序执行数据得到第一文件被执行的代码行号,则将执行过的代码行数作为已经执行代码的行数之和,例如:从第一文件的总体的第一程序执行数据中获取到的被执行的代码行号为50,则认为该第一文件的代码已经执行了50行,或者,数据显示第一文件,第1,3-10,55行已经发生了执行事件,那么此时已执行代码行数的值应当为1+8+1=10行。根据该种方式得到第一文件中已经执行的代码行数。通过前述步骤覆盖率检测端的设备完成覆盖率数据采集,得到了已执行的代码行数,以及第一文件可执行的代码行总数。利用上述两个步骤获得的数据,在此处通过公式采用R=Le/Lt即可计算出第一文件的实时覆盖率R。其中,Le表示已执行代码的行数,Lt表示总代码行数。
步骤S205,显示所述第一文件当前的所述总体覆盖率。
该步骤S205为可选的步骤,并不是必须要执行的,在覆盖率检测端的设备,如果接收用户通过客户端或者前端发送的数据请求,或者预先配置了需要将得到的覆盖率进行显示,则可以通过显示器或者前短客户端将得到的覆盖率进行显示。可以只对一个文件的总体覆盖率进行显示,也可以同时将每个文件的总体覆盖率进行显示,对此本方案不做限制。
本实施例提供的覆盖率检测方法,通过实时接收多个服务器发送的包括文件的标识信息的程序执行数据,对指定的第一文件在每个服务器上的程序执行数据进行合并处理,得到第一程序执行数据,然后解析该第一文件得到总行数,结合第一程序执行数据,计算得到该第一文件的总体覆盖率,即可以得到所有服务器上的对某个指定文件的总体覆盖率的情况。
图3为本发明实施例提供的覆盖率检测方法实例三的流程图;如图3所示,该方案的执行主体为文件运行端的服务器或者其他装置,该覆盖率检测方法的具体实现步骤为:
步骤S301,在执行文件的程序代码的过程中,调用数据收集函数实时获取所述文件的程序执行数据;所述程序执行数据包括所述文件的标识信息。
在本步骤中,文件运行端的服务器中嵌入实时收集执行数据的客户端,或者将该实时收集程序执行数据的客户端嵌入在文件的程序中,在每个服务器上可以调用数据收集函数,实时获取每个文件的程序执行数据。为了能够让覆盖率检测端对数据进行区别,在该程序执行数据中增加文件的标识信息。
可选的,所述标识信息包括所述文件所属项目名称、所述文件所属分支名称和所述文件的代码版本号。
步骤S302,将所述程序执行数据发送给覆盖率服务端,以使所述覆盖率服务端根据所述程序执行数据获取所述文件当前的总体覆盖率。
可选的,在该步骤之前,将所述程序执行数据进行存储。
该程序执行数据还可以包括文件的文件名称和文件被执行的代码行号。文件运行端的服务器或者其他装置可以将收集的程序执行数据按照文件名称进行存储,当发生了新的代码执行事件之后,可以根据文件名称对该程序执行数据进行更新。
具体的,对执行数据进行存储的实现方式为:根据文件名称,检测本地是否存在与文件对应的程序执行数据;若存在,则在本地不存在所述文件被执行的代码行号时,将所述文件被执行的代码行号存储在所述程序执行数据中;若不存在,则在本地增加以所述文件名称为索引的所述文件对应的所述程序执行数据。
上述步骤中,文件运行端的服务器或者其他装置将获取到的文件的程序执行数据实时发送给覆盖率服务端,以使覆盖率检测端的服务端(例如服务器)实时接收执行端服务器发送的多个程序执行数据,并对与指定的第一文件的标识信息相同的程序执行数据进行合并处理,得到第一文件的第一程序执行数据,后续对第一文件的源代码进行解析获取总代码行数,然后结合第一程序执行数据和总代码行数计算获取该文件当前的覆盖率,不需要额外增加命令,在测试过程中也不需要不断的停止和开始,通过实时接收服务器发送的文件的程序执行数据,并对该程序执行数据进行分析处理,能够得到该第一文件在所有服务器上的实时的总体覆盖率。
在上述实施例一至实施例三的基础上,下面以覆盖率检测端为覆盖率服务器、文件执行端为游戏服务器为例,对本发明覆盖率检测方法进行说明。其中,覆盖率服务器的主要功能是通过websocket接收和处理来自游戏服务器(其中嵌入客户端负责收集数据)的数据。
客户端嵌入到待测试的游戏服务器脚本中,使用python的sys.settrace收集数据。游戏服务器侧的过程主要分为数据采集,存储和发送。图4为本发明实施例提供的覆盖率检测方法一实例的实现示意图;如图4所示,具体的,在游戏服务器中,游戏服务器脚本中嵌入覆盖率采集客户端(os.getcwd),可通过websocket连接到右边的覆盖率服务器(也称为覆盖率数据处理服务器)。
1.1、初始化
在进行上述覆盖率检测的过程之前,需要在覆盖率服务器和游戏服务器进行初始化,初始化过程分为启动覆盖率数据处理服务端和嵌入覆盖率采集客户端到游戏服务器脚本中两个部分。
覆盖率服务端基于Tornado构建,主要功能是通过websocket接收来自通过一定规则(见下文中的进程标识步骤)标识的客户端的数据,并定时将同一游戏服务器的数据合并和处理。在游戏服务器启动测试之前,首先启动覆盖率服务端,等待客户端连接和收集数据。
对于客户端,在游戏服务器中启动不同进程的脚本中,添加使用线程启动websocket连接的代码,具体如下:
ws=websocket.WebSocket("ws://websocket_address/")
thread_ws=threading.Thread(target=ws.run)
thread_ws.start()
该线程用于在每个游戏服务器进程启动websocket并连接到覆盖率服务器后,进行定时的数据发送。
1.2、数据采集
嵌入游戏服务器的客户端,主要通过添加如下代码实现数据采集:
即利用python自带的sys.settrace方法,在游戏服务器脚本运行过程中,每当发生了代码执行事件(event),就会调用trace方法进行跟踪,其中frame表示python运行过程中的栈帧,event表示发生的事件(例如执行了某一行代码,或者调用了某个函数等)。使用frame.f_code.co_filename获取被执行的文件名称fliename,使用frame.f_lineno获取当前执行的代码行号,然后调用collect方法进行数据收集,该方法主要是使用了字典(python的一种内置数据结构,以键-值对格式存储数据)的形式,将数据以文件名为键,以被执行的代码行号集合为值的形式存储,举例如下:
其中root/directory1/.../file1表示被测试的代码文件的路径,set([lineno11,lineno12,lineno13...])表示一个集合,该集合中的元素有lineno11,lineno12,lineno13等等,每个元素表示file1中进行覆盖率测试时,被执行过的行号(lineno)。
1.3、游戏服务器标识
对于每个游戏服务器,在启动之前,标识被执行文件所属的项目组(字符串形式,例如X1),所属的代码分支(字符串形式,如test)。
在启动之后,使用SVN获取当前进行覆盖率测试的代码版本号(字符串形式,例如30000),获取的方法如下(Python代码):
revision=str(pysvn.Client().info(directory).commit_revision.number)
于是对每个游戏服务器的每个版本代码(文件)的覆盖率测试的数据,都有如下标识:
其中project字段表示所属项目名称,branch字段表示所属分支名称,revision字段表示进行覆盖率测试的游戏服务器代码版本号,data字段的值是上文中数据采集获得的覆盖率数据。
游戏服务器分别将各自采集到的程序执行数据发送至覆盖率服务器。
1.4、数据合并(覆盖率服务器执行)
对于上述步骤中每个游戏服务器采集的程序执行数据,首先指定所需合并的项目和分支,例如,指定当前需要合并地项目为X1,分支为test,然后指定需要合并的代码版本号为30000,接下来在当前的所有程序执行数据中进行搜索,所有满足project字段为X1.branch字段为test且revision字段为30000的数据,作为待合并的程序执行数据。
对所有程序执行数据中的coverage_data字段对应的字典进行枚举,若当前键(文件名)已经存在于总体程序执行数据中,则将当前键对应的值(行号集合)与总体程序执行数据中该文件名对应的值(已有的行号集合)进行求并集的操作,并将结果替换原来的总体程序执行数据中该文件名对应的行号集合。
若当前键(文件名)在总体程序执行数据中未搜索到,则将该文件名及其对应的行号集合存储到总体覆盖率集合中。
当数据1……n中的coverage_data字段对应的字典数据都枚举完毕并对应存储到总体程序执行数据(即上述的第一程序执行数据)中后,本次合并结果完毕。
总体程序执行数据格式为:
其中每个文件名对应的程序执行数据,都是各个游戏服务器对应字段行号集合的并集。
1.5、计算每个文件的覆盖率
对于覆盖率服务器来说,将上述合并得到的文件的总体程序执行数据,首先在存储在覆盖率服务器的当前游戏服务器的程序执行数据集合中对每个文件名进行搜索,若该文件名不存在,则添加该文件名及其对应的代码行号集合。若该文件已经存在,则将原有的代码行号集合与新到达的文件名对应的代码行号集合求并集,并覆盖原有存储的集合即可。
由上述步骤,获得了指定文件当前所执行过的代码行号的集合,已知覆盖率计算公式为:
其中,Rate表示覆盖率,lineexecute表示当前文件中已经执行过的代码行数,linetotal表示当前文件的可执行代码行总数。
根据合并处理之后的指定文件的程序执行数据,可以知道该指定文件,执行过的代码行数就是数据中执行代码的行数之和。例如,若该指定文件的总体程序执行数据显示该指定文件,第1,3-10,55行已经发生了执行事件,那么此时已执行代码行数的值应当为1+8+1=10行。
覆盖率服务器对该指定文件的本地源代码文件进行解析,解析的过程是去除空白行和注释行,从而计算出真正的可执行代码行的总数。
通过游戏服务器的覆盖率数据采集得到了已执行的代码行数,通过本地源代码的解析,获得了该指定文件可执行的代码行总数。利用上述两个步骤获得的数据,在此处通过公式即可计算出该指定文件的覆盖率。
本方案主要由覆盖率数据处理服务端和覆盖率采集客户端组成。其中覆盖率数据处理服务端,主要功能是通过websocket接收和处理来自客户端的数据。客户端嵌入到待测试的游戏服务器脚本中,使用python的sys.settrace收集数据。本方案完整的采集流程,分为游戏服务器标识,数据采集,数据合并三个部分。首先使用游戏所属项目(字符串表示,例如X1),游戏服务器的代码分支名称(字符串表示,例如test)以及游戏服务器运行代码的版本号(使用svn获得,字符串表示,例如30000)作为索引同一游戏服务器的方法,然后在采集过程中,将数据发送和存储到数据处理服务器中,对于属于同项目同分支和同版本代码的覆盖率测试结果,通过一定的规则进行覆盖率数据的合并,最后数据处理服务器使用合并后的结果计算出总体的覆盖率数值,解决了利用python的sys.settrace方法进行覆盖率数据采集时,同项目组同代码分支对相同代码进行覆盖率测试时,不同测试人员的测试结果彼此独立,无法得到有效的总体覆盖率测试结果的问题。
图5为本发明实施例提供的覆盖率检测装置实施例一的结构示意图,如图5所示,本实施例提供的覆盖率检测装置10包括:
接收模块11,用于接收至少两个服务器发送的程序执行数据;所述程序执行数据包括每个文件的标识信息;
处理模块12,用于根据每个文件的标识信息,获取预设的第一文件的第一程序执行数据;所述第一程序数据是将所述至少一个服务器发送的所有程序执行数据中标识信息与所述第一文件的标识信息相同的程序执行数据进行合并得到的;
所述处理模块12还用于解析获取所述第一文件对应的源代码文件的总代码行数;
所述处理模块12还用于根据所述第一程序执行数据和所述总代码行数,计算获取所述第一文件当前的总体覆盖率。
本实施例提供的覆盖率检测装置,用于执行前述任一实施例提供的方法中覆盖率检测端的技术方案,其实现原理和技术效果类似,在此不再赘述。
在本发明覆盖率检测装置的实施例二中,图6为本发明实施例提供的覆盖率检测装置实施例二的结构示意图,如图6所示,在上述实施例一的基础上,该覆盖率检测装置10还包括:
显示模块13,用于显示所述第一文件当前的所述总体覆盖率。
在上述任一实施例的基础上,可选的,所述接收模块11接收到的文件的标识信息包括所述文件所属项目名称、所述文件所属分支名称和所述文件的代码版本号。
可选的,所述第一文件所属项目名称为X1,所属分支为T1,版本号为Y;所述处理模块12具体用于:
将每个程序执行数据中所属项目名称为X1、所属分支为T1、且版本号为Y的程序执行数据做并集处理,得到所述第一程序执行数据。
可选的,所述第一程序执行数据还包括所述第一文件被执行的代码行号,所述处理模块12还具体用于:
根据所述被执行的代码行号,获取所述第一文件中已执行代码的行数;
根据所述已执行代码的行数Le和所述总代码行数Lt,采用R=Le/Lt计算得到所述第一文件当前的总体覆盖率R。
可选的,所述处理模块12还具体用于对所述源代码文件进行解析处理,剔除所述源代码文件中的空白行和注释行,得到所述源代码文件的所述总代码行数。
本实施例提供的覆盖率检测装置,用来执行前述任一实施例提供的方法中覆盖率检测端的技术方案,其实现原理和技术效果类似,在此不再赘述。
图7为本发明实施例提供的覆盖率检测装置实施例三的结构示意图,如图7所示,该覆盖率检测装置20包括:
处理模块21,用于在执行文件的过程中,调用数据收集函数实时获取所述程序执行数据;所述程序执行数据包括所述文件的标识信息;
发送模块22,用于将所述程序执行数据发送给覆盖率服务端,以使所述覆盖率服务端根据所述程序执行数据获取所述文件当前的总体覆盖率。
本实施例提供的覆盖率检测装置,用来执行前述任一实施例提供的方法中程序运行侧的技术方案,其实现原理和技术效果类似,在此不再赘述。
图8为本发明实施例提供的覆盖率检测装置实施例四的结构示意图,如图8所示,该覆盖率检测装置20还包括:
存储模块23,用于将所述程序执行数据进行存储;所述程序执行数据还包括所述文件被执行的代码行号。
可选的,所述处理模块21获取的所述标识信息包括所述文件所属项目名称、所述文件所属分支名称和所述文件的代码版本号。
本实施例提供的覆盖率检测装置,用来执行前述任一实施例提供的方法中程序运行侧的技术方案,其实现原理和技术效果类似,在此不再赘述。
图9为本发明实施例提供的服务器实施例一的结构示意图,如图9所示,该服务器可以被具体实现为:存储有程序指令的存储器31、接收器32以及用于控制程序指令执行的处理器33;
所述接收器32用于接收至少两个服务器发送的程序执行数据;所述程序执行数据包括每个文件的标识信息;
所述处理器33用于:
根据每个文件的标识信息,获取预设的第一文件的第一程序执行数据;所述第一程序数据是将所述至少一个服务器发送的所有程序执行数据中标识信息与所述第一文件的标识信息相同的程序执行数据进行合并得到的;
解析获取所述第一文件对应的源代码文件的总代码行数;
根据所述第一程序执行数据和所述总代码行数,计算获取所述第一程序代码当前的总体覆盖率。
可选的,还可以包括显示器,用于显示所述第一文件当前的所述总体覆盖率。
可选的,所述接收器32接收到的文件的标识信息包括所述文件所属项目名称、所述文件所属分支名称和所述文件的代码版本号。
可选的,所述第一文件所属项目名称为X1,所属分支为T1,版本号为Y;则处理器33具体用于:
将每个程序执行数据中所属项目名称为X1、所属分支为T1、且版本号为Y的程序执行数据做并集处理,得到所述第一程序执行数据。
可选的,所述第一程序执行数据还包括所述第一文件被执行的代码行号,所述处理器33还具体用于:
根据所述被执行的代码行号,获取所述第一文件中已执行代码的行数;
根据所述已执行代码的行数Le和所述总代码行数Lt,采用R=Le/Lt计算得到所述第一文件当前的总体覆盖率R。
可选的,所述处理器33还具体用于对所述源代码文件进行解析处理,剔除所述源代码文件中的空白行和注释行,得到所述源代码文件的所述总代码行数。
本实施例提供的服务器为覆盖检测端的服务器,用来执行前述任一实施例提供的方法中覆盖率检测端的技术方案,其实现原理和技术效果类似,在此不再赘述。
图10为本发明实施例提供的服务器实施例二的结构示意图,如图10所示,该服务器可以被具体实现为:用于存储程序指令的存储器41、用于控制程序指令执行的处理器42以及发送器43;
所述处理器42用于在执行文件的程序代码的过程中,调用数据收集函数实时获取所述文件的程序执行数据;所述程序执行数据包括所述文件的标识信息;
所述发送器43用于将所述程序执行数据发送给覆盖率服务端,以使所述覆盖率服务端根据所述程序执行数据获取所述文件当前的总体覆盖率。
可选的,存储器41用于将所述程序执行数据进行存储;所述程序执行数据还包括所述文件被执行的代码行号。
可选的,所述处理器42获取的所述标识信息包括所述文件所属项目名称、所述文件所属分支名称和所述文件的代码版本号。
本实施例提供的服务器为文件运行服务器,或者称为程序运行服务器,用来执行前述任一实施例提供的方法中文件运行侧,例如游戏服务器的技术方案,其实现原理和技术效果类似,在此不再赘述。
在上述任一服务器的实施例中,应理解,处理器可以是中央处理单元(英文:Central Processing Unit,简称:CPU),还可以是其他通用处理器、数字信号处理器(英文:Digital Signal Processor,简称:DSP)、专用集成电路(英文:Application SpecificIntegrated Circuit,简称:ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:只读存储器(英文:read-only memory,缩写:ROM)、RAM、快闪存储器、硬盘、固态硬盘、磁带(英文:magnetictape)、软盘(英文:floppy disk)、光盘(英文:optical disc)及其任意组合。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (20)
1.一种覆盖率检测方法,其特征在于,包括:
接收至少两个服务器发送的程序执行数据;所述程序执行数据包括每个文件的标识信息;
根据每个文件的标识信息,获取预设的第一文件的第一程序执行数据;所述第一程序执行数据是将所述至少一个服务器发送的所有程序执行数据中标识信息与所述第一文件的标识信息相同的程序执行数据进行合并得到的;
解析获取所述第一文件对应的源代码文件的总代码行数;
根据所述第一程序执行数据和所述总代码行数,计算获取所述第一程序代码当前的总体覆盖率。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
显示所述第一文件当前的所述总体覆盖率。
3.根据权利要求1或2所述的方法,其特征在于,文件的标识信息包括所述文件所属项目名称、所述文件所属分支名称和所述文件的代码版本号。
4.根据权利要求3所述的方法,其特征在于,所述第一文件所属项目名称为X1,所属分支为T1,版本号为Y;则所述根据每个文件的标识信息,获取预设的第一文件的第一程序执行数据,包括:
将每个程序执行数据中所属项目名称为X1、所属分支为T1、且版本号为Y的程序执行数据做并集处理,得到所述第一程序执行数据。
5.根据权利要求4所述的方法,其特征在于,所述第一程序执行数据还包括所述第一文件被执行的代码行号,所述根据所述第一程序执行数据和所述总代码行数,计算获取所述第一程序代码当前的总体覆盖率,包括:
根据所述被执行的代码行号,获取所述第一文件中已执行代码的行数;
根据所述已执行代码的行数Le和所述总代码行数Lt,采用R=Le/Lt计算得到所述第一文件当前的总体覆盖率R。
6.根据权利要求1或2所述的方法,其特征在于,所述解析获取所述第一文件对应的源代码文件的总代码行数,包括:
对所述源代码文件进行解析处理,剔除所述源代码文件中的空白行和注释行,得到所述源代码文件的所述总代码行数。
7.一种覆盖率检测方法,其特征在于,包括:
在执行文件的程序代码的过程中,调用数据收集函数实时获取所述文件的程序执行数据;所述程序执行数据包括所述文件的标识信息;
将所述程序执行数据发送给覆盖率服务端,以使所述覆盖率服务端根据所述程序执行数据获取所述文件当前的总体覆盖率。
8.根据权利要求7所述的方法,其特征在于,所述方法还包括:
将所述程序执行数据进行存储;所述程序执行数据还包括所述文件被执行的代码行号。
9.根据权利要求7或8所述的方法,其特征在于,所述标识信息包括所述文件所属项目名称、所述文件所属分支名称和所述文件的代码版本号。
10.一种覆盖率检测装置,其特征在于,包括:
接收模块,用于接收至少两个服务器发送的程序执行数据;所述程序执行数据包括每个文件的标识信息;
处理模块,用于根据每个文件的标识信息,获取预设的第一文件的第一程序执行数据;所述第一程序数据是将所述至少一个服务器发送的所有程序执行数据中标识信息与所述第一文件的标识信息相同的程序执行数据进行合并得到的;
所述处理模块还用于解析获取所述第一文件对应的源代码文件的总代码行数;
所述处理模块还用于根据所述第一程序执行数据和所述总代码行数,计算获取所述第一文件当前的总体覆盖率。
11.根据权利要求10所述的装置,其特征在于,所述装置还包括:
显示模块,用于显示所述第一文件当前的所述总体覆盖率。
12.根据权利要求10或11所述的装置,其特征在于,所述接收模块接收到的文件的标识信息包括所述文件所属项目名称、所述文件所属分支名称和所述文件的代码版本号。
13.根据权利要求12所述的装置,其特征在于,所述第一文件所属项目名称为X1,所属分支为T1,版本号为Y;则处理模块具体用于:
将每个程序执行数据中所属项目名称为X1、所属分支为T1、且版本号为Y的程序执行数据做并集处理,得到所述第一程序执行数据。
14.根据权利要求13所述的装置,其特征在于,所述第一程序执行数据还包括所述第一文件被执行的代码行号,所述处理模块还具体用于:
根据所述被执行的代码行号,获取所述第一文件中已执行代码的行数;
根据所述已执行代码的行数Le和所述总代码行数Lt,采用R=Le/Lt计算得到所述第一文件当前的总体覆盖率R。
15.根据权利要求10或11所述的装置,其特征在于,所述处理模块还具体用于对所述源代码文件进行解析处理,剔除所述源代码文件中的空白行和注释行,得到所述源代码文件的所述总代码行数。
16.一种覆盖率检测装置,其特征在于,包括:
处理模块,用于在执行文件的过程中,调用数据收集函数实时获取所述程序执行数据;所述程序执行数据包括所述文件的标识信息;
发送模块,用于将所述程序执行数据发送给覆盖率服务端,以使所述覆盖率服务端根据所述程序执行数据获取所述文件当前的总体覆盖率。
17.根据权利要求16所述的装置,其特征在于,所述装置还包括:
存储模块,用于将所述程序执行数据进行存储;所述程序执行数据还包括所述文件被执行的代码行号。
18.根据权利要求16或17所述的装置,其特征在于,所述处理模块获取的所述标识信息包括所述文件所属项目名称、所述文件所属分支名称和所述文件的代码版本号。
19.一种服务器,其特征在于,包括:存储有程序指令的存储器、接收器和用于控制程序指令执行的处理器;
所述接收器用于接收至少两个服务器发送的程序执行数据;所述程序执行数据包括每个文件的标识信息;
所述处理器用于:
根据每个文件的标识信息,获取预设的第一文件的第一程序执行数据;所述第一程序数据是将所述至少一个服务器发送的所有程序执行数据中标识信息与所述第一文件的标识信息相同的程序执行数据进行合并得到的;
解析获取所述第一文件对应的源代码文件的总代码行数;
根据所述第一程序执行数据和所述总代码行数,计算获取所述第一程序代码当前的总体覆盖率。
20.一种服务器,其特征在于,包括:存储有程序指令的存储器、用于控制程序指令执行的处理器和发送器;
所述处理器用于在执行文件的程序代码的过程中,调用数据收集函数实时获取所述文件的程序执行数据;所述程序执行数据包括所述文件的标识信息;
所述发送器用于将所述程序执行数据发送给覆盖率服务端,以使所述覆盖率服务端根据所述程序执行数据获取所述文件当前的总体覆盖率。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610936654.4A CN106502901A (zh) | 2016-10-24 | 2016-10-24 | 覆盖率检测方法、装置和设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610936654.4A CN106502901A (zh) | 2016-10-24 | 2016-10-24 | 覆盖率检测方法、装置和设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106502901A true CN106502901A (zh) | 2017-03-15 |
Family
ID=58320020
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610936654.4A Pending CN106502901A (zh) | 2016-10-24 | 2016-10-24 | 覆盖率检测方法、装置和设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106502901A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109992511A (zh) * | 2019-03-25 | 2019-07-09 | 口碑(上海)信息技术有限公司 | 获取代码测试覆盖率的装置及方法 |
CN110008124A (zh) * | 2019-03-29 | 2019-07-12 | 深圳前海微众银行股份有限公司 | 一种信息处理方法及装置 |
CN110399289A (zh) * | 2019-06-14 | 2019-11-01 | 平安科技(深圳)有限公司 | 应用程序测试的评价方法、装置、服务器及存储介质 |
CN110990265A (zh) * | 2019-11-12 | 2020-04-10 | 苏州洞察云信息技术有限公司 | 一种覆盖率确定方法、装置及存储介质 |
CN111290943A (zh) * | 2020-01-13 | 2020-06-16 | 北京三快在线科技有限公司 | 代码覆盖率处理方法、装置、服务器及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080301813A1 (en) * | 2007-05-31 | 2008-12-04 | Microsoft Corporation | Testing Software Applications with Schema-based Fuzzing |
CN102236600A (zh) * | 2010-05-06 | 2011-11-09 | 无锡中星微电子有限公司 | 获得代码覆盖率的方法及装置 |
CN105404585A (zh) * | 2015-12-01 | 2016-03-16 | 腾讯科技(深圳)有限公司 | 获取代码覆盖率的方法及装置 |
-
2016
- 2016-10-24 CN CN201610936654.4A patent/CN106502901A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080301813A1 (en) * | 2007-05-31 | 2008-12-04 | Microsoft Corporation | Testing Software Applications with Schema-based Fuzzing |
CN102236600A (zh) * | 2010-05-06 | 2011-11-09 | 无锡中星微电子有限公司 | 获得代码覆盖率的方法及装置 |
CN105404585A (zh) * | 2015-12-01 | 2016-03-16 | 腾讯科技(深圳)有限公司 | 获取代码覆盖率的方法及装置 |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109992511A (zh) * | 2019-03-25 | 2019-07-09 | 口碑(上海)信息技术有限公司 | 获取代码测试覆盖率的装置及方法 |
CN110008124A (zh) * | 2019-03-29 | 2019-07-12 | 深圳前海微众银行股份有限公司 | 一种信息处理方法及装置 |
CN110008124B (zh) * | 2019-03-29 | 2024-06-28 | 深圳前海微众银行股份有限公司 | 一种信息处理方法及装置 |
CN110399289A (zh) * | 2019-06-14 | 2019-11-01 | 平安科技(深圳)有限公司 | 应用程序测试的评价方法、装置、服务器及存储介质 |
WO2020248506A1 (zh) * | 2019-06-14 | 2020-12-17 | 平安科技(深圳)有限公司 | 应用程序测试的评价方法、装置、服务器及存储介质 |
CN110399289B (zh) * | 2019-06-14 | 2023-10-20 | 平安科技(深圳)有限公司 | 应用程序测试的评价方法、装置、服务器及存储介质 |
CN110990265A (zh) * | 2019-11-12 | 2020-04-10 | 苏州洞察云信息技术有限公司 | 一种覆盖率确定方法、装置及存储介质 |
CN110990265B (zh) * | 2019-11-12 | 2023-10-03 | 苏州洞察云信息技术有限公司 | 一种覆盖率确定方法、装置及存储介质 |
CN111290943A (zh) * | 2020-01-13 | 2020-06-16 | 北京三快在线科技有限公司 | 代码覆盖率处理方法、装置、服务器及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106502901A (zh) | 覆盖率检测方法、装置和设备 | |
CN107704392B (zh) | 一种测试用例的处理方法及服务器 | |
CN106294134B (zh) | 代码的崩溃定位方法及装置 | |
CN106547698A (zh) | 覆盖率数据的处理方法、装置和服务器 | |
CN110287696B (zh) | 一种反弹shell进程的检测方法、装置和设备 | |
CN104598380A (zh) | 一种基于控件的自动化测试方法及系统 | |
US20070169004A1 (en) | Automatic failure analysis of code development options | |
CN106776319B (zh) | 自动测试方法及装置 | |
CN104714882B (zh) | 代码信息处理的方法及装置 | |
CN111831321B (zh) | 代码覆盖率的分析方法、装置及其电子设备 | |
WO2011060655A1 (zh) | 软件业务功能覆盖率的统计方法及系统 | |
US20120143947A1 (en) | Method, apparatus, and program for usability analysis of web applications | |
US20090100299A1 (en) | Methods and Apparatus for Patternizing Device Responses | |
CN106326116B (zh) | 产品测试的方法和装置 | |
CN106528411A (zh) | 覆盖率检测方法、装置和设备 | |
KR100930962B1 (ko) | 알피씨 기반 소프트웨어의 원격지 보안 테스팅 장치 및방법 | |
CN111813648A (zh) | 一种应用于App的自动化测试方法、装置、存储介质及电子设备 | |
CN106294183B (zh) | 覆盖率检测方法、装置和设备 | |
CN112235145B (zh) | 流量状态检测方法和装置 | |
CN115481025A (zh) | 自动化测试的脚本录制方法、装置、计算机设备及介质 | |
CN114064510A (zh) | 功能测试方法、装置、电子设备和存储介质 | |
CN112306850B (zh) | 一种测试用例生成方法、装置及存储介质 | |
CN113868137A (zh) | 埋点数据的处理方法、装置、系统和服务器 | |
CN106776296A (zh) | 覆盖率检测的启动方法、装置和启动设备 | |
CN112202632A (zh) | 报文的提取方法、装置、电子设备及计算机可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20170315 |