本发明涉及计算机技术领域,尤其涉及一种测试方法、装置及服务器。
背景技术:
服务端是为客户端服务的,服务的内容包括向客户端提供资源、保存客户端数据等。由于服务端业务比较复杂、功能逻辑较多、版本迭代较快,因此,为了保证业务功能逻辑需要进行功能测试。
代码覆盖(code coverage)是软件测试中的一种度量,用于描述程式中源代码被测试的比例和程度。其中,源代码被测试的比例称为代码覆盖率。目前,可以通过开发人员编写单元测试用例来评估代码覆盖率,但是针对功能测试的代码覆盖率还处于盲区,因此,针对功能测试的代码覆盖率已成为一个亟待解决的技术问题。
技术实现要素:
本发明实施例公开了一种测试方法、装置及服务器,用于解决针对功能测试的代码覆盖率处于盲区的问题。
本发明实施例第一方面公开一种测试方法,包括:
将被测试的代码进行编译,以生成用于代码覆盖率分析的可执行文件;
将所述可执行文件部署在测试环境中;
在所述测试环境中执行用于功能测试的测试用例,所述测试用例模拟客户端生成针对所述测试环境的数据请求,且所述测试环境响应所述测试用例的数据请求;
根据所述可执行文件确定所述测试用例执行后的代码覆盖率结果;
对所述代码覆盖率结果进行分析输出代码覆盖率报告。
在一个实施例中,所述将被测试的代码进行编译,以生成用于代码覆盖率分析的可执行文件,包括:
设置编译参数,根据所述编译参数生成二进制可执行文件,所述二进制可执行文件在执行过程中对代码进行标识用于代码覆盖率分析。
在一个实施例中,所述在所述测试环境中执行用于功能测试的测试用例,包括:
将所述可执行文件和用于功能测试的测试用例提交给代码覆盖率工具;
所述对所述代码覆盖率结果进行分析输出代码覆盖率报告,包括:
使所述代码覆盖率工具根据所述代码覆盖率结果生成代码覆盖率报告。
在一个实施例中,所述使所述代码覆盖率工具根据所述代码覆盖率结果生成代码覆盖率报告,包括:
使所述代码覆盖率工具对比分析所述代码覆盖率结果中的数据和所述可执行文件中的代码,以得到代码覆盖率的统计数据,并根据所述代码覆盖率的统计数据生成代码覆盖率报告。
在一个实施例中,所述代码覆盖率的统计数据包括函数覆盖率和/或行覆盖率。
在一个实施例中,所述方法还包括:
根据所述代码覆盖率报告生成可视化文件。
本发明实施例第二方面公开一种测试装置,包括:
编译单元,用于将被测试的代码进行编译,以生成用于代码覆盖率分析的可执行文件;
部署单元,用于将所述编译单元编译生成的可执行文件部署在测试环境中;
执行单元,用于在所述部署单元部署的测试环境中执行用于功能测试的测试用例,所述测试用例模拟客户端生成针对所述测试环境的数据请求,且所述测试环境响应所述测试用例的数据请求;
确定单元,用于根据所述编译单元编译生成的可执行文件确定所述执行单元执行的测试用例执行后的代码覆盖率结果;
输出单元,用于对所述确定单元确定的代码覆盖率结果进行分析输出代码覆盖率报告。
在一个实施例中,所述编译单元,具体用于设置编译参数,根据所述编译参数生成二进制可执行文件,所述二进制可执行文件在执行过程中对代码进行标识用于代码覆盖率分析。
在一个实施例中,所述执行单元,具体用于将所述可执行文件和用于功能测试的测试用例提交给代码覆盖率工具;
所述输出单元,具体用于使所述代码覆盖率工具根据所述代码覆盖率结果生成代码覆盖率报告。
在一个实施例中,所述输出单元使所述代码覆盖率工具根据所述代码覆盖率结果生成代码覆盖率报告包括:
使所述代码覆盖率工具对比分析所述代码覆盖率结果中的数据和所述可执行文件中的代码,以得到代码覆盖率的统计数据,并根据所述代码覆盖率的统计数据生成代码覆盖率报告。
在一个实施例中,所述代码覆盖率的统计数据包括函数覆盖率和/或行覆盖率。
在一个实施例中,所述装置还包括:
生成单元,用于根据所述输出单元输出的代码覆盖率报告生成可视化文件。
本发明实施例第三方面公开一种服务器,包括处理器、存储器、通信接口和总线;
所述处理器、所述存储器和所述通信接口通过所述总线连接并完成相互间的通信;
所述存储器存储可执行程序;
所述处理器通过读取所述存储器中存储的可执行程序代码来运行与所述可执行程序代码对应的程序,以用于执行一种测试方法;
其中,所述测试方法包括:
将被测试的代码进行编译,以生成用于代码覆盖率分析的可执行文件;
将所述可执行文件部署在测试环境中;
在所述测试环境中执行用于功能测试的测试用例,所述测试用例模拟客户端生成针对所述测试环境的数据请求,且所述测试环境响应所述测试用例的数据请求;
根据所述可执行文件确定所述测试用例执行后的代码覆盖率结果;
对所述代码覆盖率结果进行分析输出代码覆盖率报告。
本发明实施例中,将被测试的代码进行编译以生成用于代码覆盖率分析的可执行文件,将可执行文件部署在测试环境中,在测试环境中执行用于功能测试的测试用例,根据可执行文件确定测试用例执行后的代码覆盖率结果,并对代码覆盖率结果进行分析输出代码覆盖率报告,可见,可以通过用于功能测试的测试用例确定功能测试的代码覆盖率,因此,可以确定针对功能测试的代码覆盖率。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例公开的一种测试方法的流程示意图;
图2是本发明实施例公开的另一种测试方法的流程示意图;
图3是本发明实施例公开的一种测试装置的结构示意图;
图4是本发明实施例公开的另一种测试装置的结构示意图;
图5是本发明实施例公开的一种服务器的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例公开了一种测试方法、装置及服务器,用于解决针对功能测试的代码覆盖率处于盲区的问题。以下分别进行详细说明。
为了更好地理解本发明实施例公开的一种测试方法及装置,下面先对本发明实施例使用的基本概念进行描述。Gcov是Linux下GCC自带的一个C/C++代码覆盖率分析工具。Lcov是Gcov的图形化前端工具,用于收集Gcov数据多个源文件,并创建超文本标记语言(Hypertext Marked Language,HTML)含覆盖信息注释的源代码页。
请参阅图1,图1是本发明实施例公开的一种测试方法的流程示意图。如图1所示,该测试方法可以包括以下步骤。
101、将被测试的代码进行编译,以生成用于代码覆盖率分析的可执行文件。
本实施例中,当需要确定针对功能测试的代码覆盖率时,可以将被测试的代码进行编译,以生成用于代码覆盖率分析的可执行文件,即设置编译参数,并根据编译参数生成二进制可执行文件,也即在组件编译中添加用于标识代码编译参数,并打包带有gcov信息的bin文件,还即获取用于标识代码的编译参数,生成包括编译参数的gcov信息,将gcov信息打包为bin文件。其中,可以通过函数-fprofile-arcs和-ftest-coverage添加编译参数。其中,二进制可执行文件在执行过程中对代码进行标识用于代码覆盖率分析,bin文件即二进制可执行文件,bin文件中包括gcon,是在打包时添加进去的。其中,标识代码,即为代码打标签,例如:第1行代码、第2行代码等。其中,gcov信息即gcon。
102、将可执行文件部署在测试环境中。
本实施例中,由于进行测试时,需要在特定的环境下进行,因此,需要部署测试环境。因此,将被测试的代码进行编译,以生成用于代码覆盖率分析的可执行文件之后,将可执行文件部署在测试环境中,即将bin文件部署在测试环境中,以便部署测试环境。
103、在测试环境中执行用于功能测试的测试用例。
本实施例中,将可执行文件部署在测试环境中,即部署好测试环境之后,在测试环境中执行用于功能测试的测试用例,即将可执行文件和用于功能测试的测试用例提交给代码覆盖率工具,如Gcov等,以便对bin文件中打标签的代码进行测试。
104、根据可执行文件确定测试用例执行后的代码覆盖率结果。
本实施例中,在测试环境中执行用于功能测试的测试用例之后,将根据可执行文件确定测试用例执行后的代码覆盖率结果,可以是获取部署的bin文件的标识,并统计测试用例执行过程中该标识对应的bin文件中被调用的代码。其中,获取bin文件的标识,即获取bin文件对应的pid进程号;统计测试用例执行过程中该标识对应的bin文件中被调用的代码,即根据获取的pid进程号,使用gdb命令,生成gcda格式的dump文件。
105、对代码覆盖率结果进行分析输出代码覆盖率报告。
本实施例中,根据可执行文件确定测试用例执行后的代码覆盖率结果之后,将对代码覆盖率结果进行分析输出代码覆盖率报告,即使代码覆盖率工具根据代码覆盖率结果生成代码覆盖率报告,也即使代码覆盖率工具对比分析代码覆盖率结果中的数据和可执行文件中的代码,以得到代码覆盖率的统计数据,并根据代码覆盖率的统计数据生成代码覆盖率报告。其中,代码覆盖率的统计数据可以包括函数覆盖率和/或行覆盖率。其中,对代码覆盖率结果进行分析输出代码覆盖率报告,即根据dump文件生成info文件。
在图1所描述的测试方法中,将被测试的代码进行编译以生成用于代码覆盖率分析的可执行文件,将可执行文件部署在测试环境中,在测试环境中执行用于功能测试的测试用例,根据可执行文件确定测试用例执行后的代码覆盖率结果,并对代码覆盖率结果进行分析输出代码覆盖率报告,可见,可以通过用于功能测试的测试用例确定功能测试的代码覆盖率,因此,可以确定针对功能测试的代码覆盖率。
请参阅图2,图2是本发明实施例公开的另一种测试方法的流程示意图。如图2所示,该测试方法可以包括以下步骤。
201、将被测试的代码进行编译,以生成用于代码覆盖率分析的可执行文件。
本实施例中,当需要确定针对功能测试的代码覆盖率时,可以将被测试的代码进行编译,以生成用于代码覆盖率分析的可执行文件,即设置编译参数,并根据编译参数生成二进制可执行文件,也即在组件编译中添加用于标识代码编译参数,并打包带有gcov信息的bin文件,还即获取用于标识代码的编译参数,生成包括编译参数的gcov信息,将gcov信息打包为bin文件。其中,可以通过函数-fprofile-arcs和-ftest-coverage添加编译参数。其中,二进制可执行文件在执行过程中对代码进行标识用于代码覆盖率分析,bin文件即二进制可执行文件,bin文件中包括gcon,是在打包时添加进去的。其中,标识代码,即为代码打标签,例如:第1行代码、第2行代码等。其中,gcov信息即gcon。
202、将可执行文件部署在测试环境中。
本实施例中,由于进行测试时,需要在特定的环境下进行,因此,需要部署测试环境。因此,将被测试的代码进行编译,以生成用于代码覆盖率分析的可执行文件之后,将可执行文件部署在测试环境中,即将bin文件部署在测试环境中,以便部署测试环境。
203、在测试环境中执行用于功能测试的测试用例。
本实施例中,将可执行文件部署在测试环境中,即部署好测试环境之后,在测试环境中执行用于功能测试的测试用例,即将可执行文件和用于功能测试的测试用例提交给代码覆盖率工具,如Gcov等,以便对bin文件中打标签的代码进行测试。
204、根据可执行文件确定测试用例执行后的代码覆盖率结果。
本实施例中,在测试环境中执行用于功能测试的测试用例之后,将根据可执行文件确定测试用例执行后的代码覆盖率结果,可以是获取部署的bin文件的标识,并统计测试用例执行过程中该标识对应的bin文件中被调用的代码。其中,获取bin文件的标识,即获取bin文件对应的pid进程号;统计测试用例执行过程中该标识对应的bin文件中被调用的代码,即根据获取的pid进程号,使用gdb命令,生成gcda格式的dump文件。
205、对代码覆盖率结果进行分析输出代码覆盖率报告。
本实施例中,根据可执行文件确定测试用例执行后的代码覆盖率结果之后,将对代码覆盖率结果进行分析输出代码覆盖率报告,即使代码覆盖率工具根据代码覆盖率结果生成代码覆盖率报告,也即使代码覆盖率工具对比分析代码覆盖率结果中的数据和可执行文件中的代码,以得到代码覆盖率的统计数据,并根据代码覆盖率的统计数据生成代码覆盖率报告。其中,代码覆盖率的统计数据可以包括函数覆盖率和/或行覆盖率。其中,对代码覆盖率结果进行分析输出代码覆盖率报告,即根据dump文件生成info文件。
206、根据代码覆盖率报告生成可视化文件。
本实施例中,由于代码覆盖率报告用户无法查看,因此,对代码覆盖率结果进行分析输出代码覆盖率报告之后,将根据代码覆盖率报告生成可视化文件,即根据info文件生成html文件,以便用户可以查看。其中,html文件可以包括本次测试中哪些代码行被覆盖了,哪些代码行未被覆盖。
本实施例中,可以在每次得到可视化文件之后,即每次测试完成后,从可视化文件中提取代码覆盖率并记录,以便可以统计每次测试的代码覆盖率。其中,每次测试使用的测试用例可以完全不同,也可以部分相同,还可以完全相同;每次测试使用的测试代码可以完全不同,也可以部分相同,还可以完全相同。
举例说明,执行测试用例,查看代码覆盖率报告,发现功能A相关的代码覆盖率中:行覆盖率只有30%,函数覆盖率只有45%,但是关于功能A的用例有5枚,检查点有24个。可以查阅代码覆盖率的报告,找到功能A中哪些代码被覆盖,哪些代码未被覆盖。然后结合业务,补充未被覆盖的代码的测试用例。再次测试之后,可以得到功能A代码覆盖率:行覆盖率提升到80%,函数覆盖率提升到93%。
在图2所描述的测试方法中,将被测试的代码进行编译以生成用于代码覆盖率分析的可执行文件,将可执行文件部署在测试环境中,在测试环境中执行用于功能测试的测试用例,根据可执行文件确定测试用例执行后的代码覆盖率结果,并对代码覆盖率结果进行分析输出代码覆盖率报告,可见,可以通过用于功能测试的测试用例确定功能测试的代码覆盖率,因此,可以确定针对功能测试的代码覆盖率。
请参阅图3,图3是本发明实施例公开的一种测试装置的结构示意图。如图3所示,该测试装置可以包括:
编译单元301,用于将被测试的代码进行编译,以生成用于代码覆盖率分析的可执行文件;
部署单元302,用于将编译单元301编译生成的可执行文件部署在测试环境中;
执行单元303,用于在部署单元302部署的测试环境中执行用于功能测试的测试用例,测试用例模拟客户端生成针对测试环境的数据请求,且测试环境响应测试用例的数据请求;
确定单元304,用于根据编译单元301编译生成的可执行文件确定执行单元303执行的测试用例执行后的代码覆盖率结果;
输出单元305,用于对确定单元304确定的代码覆盖率结果进行分析输出代码覆盖率报告。
在图3所描述的测试装置中,将被测试的代码进行编译以生成用于代码覆盖率分析的可执行文件,将可执行文件部署在测试环境中,在测试环境中执行用于功能测试的测试用例,根据可执行文件确定测试用例执行后的代码覆盖率结果,并对代码覆盖率结果进行分析输出代码覆盖率报告,可见,可以通过用于功能测试的测试用例确定功能测试的代码覆盖率,因此,可以确定针对功能测试的代码覆盖率。
请参阅图4,图4是本发明实施例公开的另一种测试装置的结构示意图。其中,图4所示的测试装置是由图3所示的测试装置优化得到的,其中:
编译单元301,具体用于设置编译参数,根据编译参数生成二进制可执行文件,二进制可执行文件在执行过程中对代码进行标识用于代码覆盖率分析。
作为一种可能的实施方式,执行单元303,具体用于将可执行文件和用于功能测试的测试用例提交给代码覆盖率工具;
输出单元305,具体用于使代码覆盖率工具根据代码覆盖率结果生成代码覆盖率报告。
作为一种可能的实施方式,输出单元305使代码覆盖率工具根据代码覆盖率结果生成代码覆盖率报告包括:
使代码覆盖率工具对比分析代码覆盖率结果中的数据和可执行文件中的代码,以得到代码覆盖率的统计数据,并根据代码覆盖率的统计数据生成代码覆盖率报告。
作为一种可能的实施方式,代码覆盖率的统计数据可以包括函数覆盖率和/或行覆盖率。
作为一种可能的实施方式,该测试装置还可以包括:
生成单元306,用于根据输出单元305输出的代码覆盖率报告生成可视化文件。
在图4所描述的测试装置中,将被测试的代码进行编译以生成用于代码覆盖率分析的可执行文件,将可执行文件部署在测试环境中,在测试环境中执行用于功能测试的测试用例,根据可执行文件确定测试用例执行后的代码覆盖率结果,并对代码覆盖率结果进行分析输出代码覆盖率报告,可见,可以通过用于功能测试的测试用例确定功能测试的代码覆盖率,因此,可以确定针对功能测试的代码覆盖率。
请参阅图5,图5是本发明实施例公开的一种服务器的结构示意图。如图5所示,该服务器可以包括处理器501、存储器502、通信接口503和总线504,存储器502可以是高速RAM存储器,也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。可选地,存储器502还可以是至少一个位于远离前述处理器501的存储装置。处理器501、存储器502和通信接口503通过总线504连接并完成相互间的通信;
存储器502存储可执行程序;
处理器501通过读取存储器502中存储的可执行程序代码来运行与可执行程序代码对应的程序,以用于执行一种测试方法;
其中,该测试方法可以包括:
将被测试的代码进行编译,以生成用于代码覆盖率分析的可执行文件;
将可执行文件部署在测试环境中;
在测试环境中执行用于功能测试的测试用例,测试用例模拟客户端生成针对测试环境的数据请求,且测试环境响应测试用例的数据请求;
根据可执行文件确定测试用例执行后的代码覆盖率结果;
对代码覆盖率结果进行分析输出代码覆盖率报告。
在一个实施例中,该服务器还可以包括输入装置505,如为触摸屏、按键、话筒等,输出装置506,如显示屏、话筒等,其中:
输入装置505,用于接收用户输入的信息;
输出装置506,用于输出信息。
在图5所描述的测试装置中,将被测试的代码进行编译以生成用于代码覆盖率分析的可执行文件,将可执行文件部署在测试环境中,在测试环境中执行用于功能测试的测试用例,根据可执行文件确定测试用例执行后的代码覆盖率结果,并对代码覆盖率结果进行分析输出代码覆盖率报告,可见,可以通过用于功能测试的测试用例确定功能测试的代码覆盖率,因此,可以确定针对功能测试的代码覆盖率。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(read-only memory,ROM)、随机存取器(random access memory,RAM)、磁盘或光盘等。
以上对本发明实施例公开的测试方法、装置及服务器进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。