CN116383068A - 一种c++程序接口的快速测试方法、装置及存储介质 - Google Patents
一种c++程序接口的快速测试方法、装置及存储介质 Download PDFInfo
- Publication number
- CN116383068A CN116383068A CN202310363696.3A CN202310363696A CN116383068A CN 116383068 A CN116383068 A CN 116383068A CN 202310363696 A CN202310363696 A CN 202310363696A CN 116383068 A CN116383068 A CN 116383068A
- Authority
- CN
- China
- Prior art keywords
- test
- python
- java
- header file
- interface
- 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
- 238000010998 test method Methods 0.000 title claims abstract description 11
- 238000012360 testing method Methods 0.000 claims abstract description 248
- 230000006870 function Effects 0.000 claims description 71
- 238000000034 method Methods 0.000 claims description 55
- 238000012545 processing Methods 0.000 claims description 45
- 239000011800 void material Substances 0.000 description 14
- 238000004891 communication Methods 0.000 description 11
- 238000010606 normalization Methods 0.000 description 10
- 238000013461 design Methods 0.000 description 8
- KNMAVSAGTYIFJF-UHFFFAOYSA-N 1-[2-[(2-hydroxy-3-phenoxypropyl)amino]ethylamino]-3-phenoxypropan-2-ol;dihydrochloride Chemical compound Cl.Cl.C=1C=CC=CC=1OCC(O)CNCCNCC(O)COC1=CC=CC=C1 KNMAVSAGTYIFJF-UHFFFAOYSA-N 0.000 description 7
- 230000018109 developmental process Effects 0.000 description 7
- 238000011161 development Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- FFBHFFJDDLITSX-UHFFFAOYSA-N benzyl N-[2-hydroxy-4-(3-oxomorpholin-4-yl)phenyl]carbamate Chemical compound OC1=C(NC(=O)OCC2=CC=CC=C2)C=CC(=C1)N1CCOCC1=O FFBHFFJDDLITSX-UHFFFAOYSA-N 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000005259 measurement Methods 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 241001482175 Pythonidae Species 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 230000010267 cellular communication Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000008140 language development Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000013522 software testing Methods 0.000 description 1
- 230000001502 supplementing effect Effects 0.000 description 1
- 230000003442 weekly effect Effects 0.000 description 1
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/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/362—Software debugging
- G06F11/366—Software debugging using diagnostics
-
- 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
-
- 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/3684—Test management for test design, e.g. generating new test cases
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal 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)
Abstract
本发明公开了C++程序接口的快速测试方法,包括如下步骤:在接收到C++程序接口的快速测试请求时,获取一组或多组包含C++头文件的源数据,对获取的所述C++头文件进行C++的语法解析,以判定是否能够基于所述C++头文件生成Python或Java测试框架;基于对C++的语法解析结果生成Python或Java测试框架;以及输出Python或Java测试结果。
Description
技术领域
本发明属于软件测试领域,更具体地,本发明涉及C++程序接口的快速测试方法。
背景技术
在网络设备、图形图像处理、电信计费、EDA软件开发等很多领域,为了软件的运行速度,大多采有用C++语言开发。虽然C++程序的运行速度快,但是开发测试过程编译链接速度慢,对程序开发和测试人员要求高,也造成了开发效率慢,周期长,且测试覆盖不全面等问题。
但随着对网络设备、图形图像处理、电信计费、EDA软件等行业的需求越来越多,对行业的软件更新迭代的速度也要求越来越快,所以对于C++程序开发的这些行业软件来说,一种能自动生成接口测试框架代码,且测试框架覆盖率全的方法,对使用C++程序开发程序的软件系统就尤为重要。
发明内容
发明要解决的技术问题
本发明是鉴于上述问题完成的,其目的是解决C++语言编写的软件研发过程中,软件的接口测试周期长,接口覆盖不全,对测试人员要求高等问题,提供一种C++程序接口的快速测试方法。
发明内容
在本发明的第一方面,提供了一种C++程序接口的快速测试方法,包括如下步骤:
在接收到C++程序接口的快速测试请求时,获取一组或多组包含C++头文件的源数据;
对获取的所述C++头文件的源数据执行C++的语法解析处理,基于所述C++的语法解析处理的结果,判定是否能够基于所述C++头文件生成Python或Java测试框架;
在判定为能够基于所述C++头文件生成Python或Java测试框架的情况下,基于对C++的语法解析的结果生成Python或Java测试框架;以及
输出Python或Java测试结果,
其中,对获取的所述C++头文件的源数据执行C++的语法解析处理,包括:判定所述C++头文件是否有类的公有的函数,或所述C++头文件是否引用了外部的函数,当C++头文件中至少满足(1)包含类的公有的函数;(2)引用了外部的函数中的一个条件时,判定为能够基于所述C++头文件生成Python或Java测试框架。
在一种可实现方式中,当判定为所获取的C++头文件中既没有类的公有函数且没有引用外部函数时,则退出测试程序。
在一种可实现方式中,基于对C++的语法解析结果生成Python或Java测试框架包括:对C++头文件中的类进行类名称、类的公有接口函数、公有函数的入参/出参进行适用于Python或Java测试环境的规范化处理。
在一种可实现方式中,将Python或Java测试数据的程序导入所生成的Python或Java测试框架运行Python或Java测试流程。
在一种可实现方式中,运行测试的时自动将实现了的类的公有方法或者引用的外部函数的信息记录到数据库中,基于所述数据库记录的信息生成测试报表。
在一种可实现方式中,所述测试报表包括测试的运行时间、通过的测例数据和测试失败的测例数据。
在另一种可实现方式中,本发明还提供了一种C++程序接口的快速测试装置,包括:
获取单元,其在接收到C++程序接口的快速测试请求时,获取一组或多组包含C++头文件的源数据;
解析单元,其对获取的所述C++头文件的源数据执行C++的语法解析处理,基于所述C++的语法解析处理结果,判定是否能够基于所述C++头文件生成Python或Java测试框架;
测试框架生成单元,其在所述解析单元判定为能够基于所述C++头文件生成Python或Java测试框架的情况下,基于对C++的语法解析结果生成Python或Java测试框架;以及输出单元,其输出Python或Java测试结果。
其中,所述解析单元判定所述C++头文件是否有类的公有的函数,或所述C++头文件是否引用了外部的函数,当所述C++头文件中至少满足(1)包含类的公有的函数;(2)引用了外部的函数中的一个条件时,所述解析单元判定为能够基于所述C++头文件生成Python或Java测试框架。
本发明还提供一种计算机可读存储介质,其上存储有计算机指令,其特征在于,所述计算机指令被处理器运行时执行所述的C++程序接口的快速测试方法。
发明的效果
根据本发明:
(1)能够根据C++的头文件自动生成出Python或Java等语言的单元测试模板代码,减少测试人员的代码,提升测试速度。
(2)生成单元测试代码的同时,自动根据接口参数情况智能分析测试数据覆盖信息,减少人为编写测例的时候,测试接口未覆盖或者测试的数据覆盖面不全等问题。
(3)自动生成Python或Java等单元测试框架代码,而且在测试框架代码中植入运行统计信息,这样测试人员在运行测例的时候,既能知道测试接口的完成情况又能知道测例对应接口的覆盖情况。
(4)整套方式代码自动化率高,很大程度降低了对测试人员的技能要求程度,加速软件测试效果明显。
(5)通过C++的头文件生成Python或Java等单元测试框架代码,会根据入参是否有默认值,自动增加生成入参为非默认值情况的单元测例,这样会降低测试人员自身失误造成测例覆盖不全面的情况。
附图说明
图1是根据本发明的C++程序接口的快速测试装置的结构图。
图2是根据本发明的C++程序接口的快速测试流程图。
图3是根据本发明的通过Python命令解析C++头文件生成Python模板示例。
图4是根据本发明的生成Python模板后数据库记录的生成Python模板信息。
图5是根据本发明的未导入测试数据时的运行结果界面。
图6是根据本发明的导入测试数据时的运行界面。
图7是根据本发明的C++程序接口的快速测试装置的功能模块图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员获得的所有其他实施例,都属于本申请保护的范围。
本申请的说明书和权利要求书中的术语“第一”、“第二”等是用于区别类似的对象,而不用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施,且“第一”、“第二”等所区分的对象通常为一类,并不限定对象的个数,例如第一对象可以是一个,也可以是多个。此外,说明书以及权利要求中“和/或”表示所连接对象的至少其中之一,字符“/”,一般表示前后关联对象是一种“或”的关系。
图1是示出本发明实施方式涉及的C++程序接口的快速测试装置的结构图。本发明提供的C++程序接口的快速测试装置,可以通过一般的计算机或计算机系统来实现。
本发明所述的C++程序接口的快速测试装置既可以是通用装置也可以是专用装置。本发明对所述C++程序接口的快速测试装置的结构没有特别限定,例如可以具有如图1所示的计算机200的物理结构。具体地说,计算机200可以包括处理器201、RAM(RandomAccess Memory:随机存取存储器)202、ROM(Read Only Memory:只读存储器)203、输入输出IF(Interface:接口)204、显示处理部205、HDD(Hard Disk Drive:硬盘驱动器)206、通信部207、总线210、显示装置208以及输入装置209。
处理器201为CPU(Central Processing Unit:中央处理单元)等运算处理装置,从ROM 203读取控制程序,并根据读取的控制程序执行各种控制处理。RAM 202为暂时存储控制程序、来自C++程序接口的快速测试等各种中间数据、结果数据的工作区域。RAM 202例如为DRAM(Dynamic Random Access Memory:动态随机存取存储器)。ROM 203为存储控制程序、各种数据等的非易失性的存储部。ROM 203例如为快闪存储器。
输入输出IF204进行与外部设备之间的数据的发送及接收。外部设备例如为键盘、触摸面板等输入装置209。显示处理部205生成显示图像并将该显示图像输出至液晶显示器等显示装置208。ROM 203和HDD 206构成的存储部。处理器201通过总线210与RAM 202、ROM203等连接。
通信部207将网络、LAN(Local Area Network:局域网)等通信网络100与计算机200可通信地连接。经由通信部207,计算机200可与远程控制终端、云端服务器等通信。
根据本发明的C++程序接口的快速测试流程具体通过由处理器201等进行的软件处理来实现。
如以上那样构成的C++程序接口的快速测试装置执行图2所示的C++程序接口的快速测试处理。
图2是表示本发明所涉及的C++程序接口的快速测试方法的流程框图。
下面结合图2,对本发明所涉及的C++程序接口的快速测试方法的作详细描述。
根据本发明的C++程序接口的快速测试流程具体包括如下步骤:
步骤S101:在接收到C++程序接口的快速测试请求时,获取一组或多组包含C++头文件的源数据;
本发明对于包含C++头文件的源数据的程序的类型不作具体限定,可以是任何控制程序、图形图像界面程序、应用程序、游戏程序等。
本发明可以从C++程序接口的快速测试装置的由ROM203和HDD206构成的存储部获取一组或多组包含C++头文件的源数据。
可选的,本发明可以由用户通过C++程序接口的快速测试装置的输入装置209直接输入一组或多组包含C++头文件的源数据。
在另一种可实现方式中,本发明也可以通过C++程序接口的快速测试装置的通信部207与服务器通信获取一组或多组包含C++头文件的源数据。该服务器具体可以是独立的服务器,也可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、安全服务、以及大数据和人工智能平台等基础云计算服务的云服务器。
本发明所述C++程序接口的快速测试装置的通信部207通过一个或多个外部网络连接至服务器。网络能够利用任何期望的数据通信技术、协议、介质和拓扑。根据至少一个实施例,网络包括因特网。网络能够被配置为,将C++程序接口的快速测试装置通过有线或无线与一个或多个第三方和/或外部服务器系统可通信地连接。C++程序接口的快速测试装置可利用无线通信协议与服务器进行数据交换,无线通信协议的示例包括且不限于:Wi-Fi;蓝牙;近场通信;蜂窝通信等。
在一种实现方式中,C++程序接口的快速测试装置向服务器发送C++程序接口的快速测试请求,服务器在接收到C++程序接口的快速测试请求时,向C++程序接口的快速测试装置发送一组或多组包含C++头文件的源数据。
C++程序接口的快速测试装置基于接收到的一组或多组包含C++头文件的源数据,自动生成接口测试框架代码。
步骤S102;根据获取的C++头文件的源数据,执行C++语法解析处理;
本发明中,只有C++头文件中定义的类有公有方法或者引用了外部的函数,才需要对C++头文件中类的公有方法或者引用外部函数进行测试。公有方法是指类中声明public(外部可以访问)的方法。
在本发明的具体实施中,根据用户输入C++头文件,作C++的语法解析具体包括:对用户输入的C++头文件中的类和公有函数检查。
本发明作C++的语法解析具体包括:
检查用户输入的C++头文件,判定所述C++头文件是否有类的公有的函数,或所述C++头文件是否引用了外部的函数;
当判定为所获取的C++头文件中既没有类的公有函数且没有引用外部函数时,则退出本发明的测试程序,并且向用户输出不能或不需要生成接口测试框架的通知,该通知提示用户输入的C++头文件不能或不需要生成对应的Python或Java测试接口文件。
当判定为C++头文件中至少满足(1)包含类的公有的函数;(2)引用了外部的函数中的一个条件时,则进入后续步骤S103生成Python或Java测试框架阶段。
步骤S103:基于对C++的语法解析结果生成Python或Java测试框架;
本发明基于对C++的语法解析结果生成Python或Java测试框架具体包括:
S1031:依次对C++头文件中的类进行适用于Python或Java测试环境的规范化处理,具体包括:对C++头文件进行类名称的Python或Java规范化处理、类的公有接口函数Python或Java规范化处理、公有函数的入参/出参Python或Java规范化处理。
因为C++和java、Python的关键字和语言的一些基本特性有区别,所以将C++的接口在转化为java或者Python的时候需要考虑到关键字的差距和语言的特性的差异,并且保证转化后调用方式和接口出/入参可以正确识别。
在本发明具体实施例中,对C++头文件中的类进行类名称的Python规范化处理包括:Python中没有模板的概念,需要将C++的模板实列成Python的具体类;
对C++头文件中的类进行类名称的Java规范化处理包括:将C++的模板改为java的泛型;
对C++头文件中类的公有接口函数Python规范化处理包括:比如C++的++的接口名替换成Python中可使用的__add__这样Python的方法名;
对C++头文件中类的公有接口函数Java规范化处理包括:例如C++返回内存地址的接口,而java没有内存地址的概念,需要将C++返回内存地址的接口替换成java中的类的引用;
对C++头文件中的公有函数的入参/出参Python规范化处理包括:如果C++中的入参或者出参是模板的话,需要将所述模板替换成Python中的具体的类;
对C++头文件中的公有函数的入参/出参Java规范化处理包括:如果C++中的入参或者出参是对应的内存地址,需要将C++中的入参或者出参对应的内存地址替换成Java程序中对应的类的引用。
此外,如果C++头文件引用了外部函数,也会对引入的外部接口函数Python或Java规范化处理;
对C++头文件中引入的外部接口函数的入参/出参Python或Java规范化处理,同时记录所处理的外部接口函数对应的头文件,函数名称等统计信息。
类的公有函数需要做Python或Java规范化处理,同理对C++头文件中引入的外部接口函数进行Python或Java测试环境的规范化处理。
类的公有函数出入参需要做Python或Java规范化处理,同理对引入的外部接口函数的入参出参Python或Java规范化处理。
本发明之所以执行上述规范化处理原因是Python或Java的测试环境与C++的测试环境不同。例如Python的关键字和C++的关键字有所不同。
此外,比如C++有模板类,而Python没有,所以在处理C++头文件的时候需要将C++的关键字信息、C++特有的而Python没有的处理成Python对应的且能识别的内容。
同理,本发明执行上述规范化处理适应Java的测试用例。
S1032:基于对进行了上述规范化处理的类和函数生成对应的Python或Java单元测试框架,并且记录生成的适用于Python或Java单元测试对应的头文件,类名称和函数名称等统计信息。
步骤S103,基于生成的Python或Java测试框架自动运行Python或Java测试流程,输出测试结果。
本发明中,若未准备测例的测试数据且对测试结果未进行判断,则生成的测试框架运行时会显示所有测例运行结果状态均为失败。
当获取到Python或Java的测试数据时,将获取的Python或Java的测试数据导入Python或Java测试框架自动运行Python或Java测试流程,则可显示Python或Java测试正常运行结果。
本发明可以从C++程序接口的快速测试装置的由ROM203和HDD206构成的存储部获取预先存储的一组或多组Python或Java的测试数据。
可选的,本发明可以由用户通过C++程序接口的快速测试装置的输入装置209直接编写一组或多组Python或Java的测试数据。
在另一种可实现方式中,本发明也可以通过C++程序接口的快速测试装置的通信部207与服务器通信获取一组或多组Python或Java的测试数据。
步骤S104,对Python或Java测试数据实际运行结果进行评估。
本发明对Python或Java测试数据实际运行结果进行评估包括将Python或Java测试数据的实际运行结果与预期结果进行比较,判断Python或Java测试数据的实际运行结果是否与预期结果一致,或者达到预期结果的预定百分比,如98%以上。
获取Python或Java的测试数据例后,在运行Python或Java的测试数据例的过程中会自动统计编写的Python或Java测例运行情况,以判定测试接口的完成情况和整个测例的覆盖情况。比如可以按照C++头文件名称、类名称等方式统计出需要完成测试的测例和编写的测试数据、验证测试结果后实际完成了的情况,统计出已经完成的测例个数,百分比等数据。
本发明中,通过swig程序,将C++程序封装成Python或者java可以调用的接口(图2所示的过程1部分),并且通过程序将测试的C++接口转化成Python或者java的测试模板(图2所示的过程2部分),测试用人只需要完成测例数据准备和测试结果验证(图2所示的过程3部分),即可完成测试任务,大大节省测试人员的测试时间。
下面结合实施例具体描述本发明所述的C++程序接口的快速测试方法。
本发明所述的C++程序接口的快速测试方法具体操作流程如下(以生成Python测试框架为例):
(1)在接收到C++程序接口的快速测试请求时,获取一组或多组包含C++头文件的源数据。
在本发明一具体实施例中,从C++程序接口的快速测试装置的存储部所获取的包含C++头文件的源数据示例如下:
头文件“GroupPurposeType.h”,内容如下
(2)根据获取的C++头文件“GroupPurposeType.h”,执行C++语法解析处理;
在本发明中,检查用户输入的C++头文件“GroupPurposeType.h”,判定所述C++头文件“GroupPurposeType.h”是否有类的公有的函数,或所述C++头文件是否引用了外部的函数。
通过判断,上述C++头文件“GroupPurposeType.h”中包含类的公有函数:
public:
GroupPurposeType(GroupPurposeTypeEnum valueIn)
GroupPurposeType(const string&name)
const string&getName()const
operator GroupPurposeTypeEnum()const
const string getGroupPurposeTypeName(GroupPurposeTypeEnum valueIn);
并且上述C++头文件“GroupPurposeType.h”同时还包括外部函数:
extern const string getGroupPurposeTypeName(GroupPurposeTypeEnumvalueIn);
因此,本发明判定C++头文件“GroupPurposeType.h”满足可以生成对应的Python或Java测试接口文件的条件,进入后续步骤生成Python或Java测试框架阶段。
(3)对C++头文件“GroupPurposeType.h”执行规范化处理;
具体地,结合上述“GroupPurposeType.h”,说明本发明对C++头文件“GroupPurposeType.h”执行规范化处理如何进行:
此例中类名称是GroupPurposeType,不是C++的模板,也不是关键字,直接转成Python的类名GroupPurposeType即可;
此例公有接口函数也没有需要特殊处理的,直接转化即可;
此例中这个方法GroupPurposeType(const string&name)的入参是string的内存地址,在转为Python的时候需要传一个名为name的string变量进去。
(4)对进行了上述规范化处理的C++的头文件“GroupPurposeType.h”生成Python单元测试的框架文件:
对进行了上述规范化处理的类和函数生成对应的Python或Java单元测试框架,并且记录生成的Python或Java单元测试对应的头文件,类名称和函数名称等统计信息。
本发明一具体示例中,根据C++头文件生成对应的Python单元的测试框架如图3所示。
具体如下:
在用户所处的当前目录生成GroupPurposeType.py的Python单元的测试框架文件;
将生成的C++头文件、类名称和单元测试函数等信息记录在数据库,如图4所示:
在生成Python的测例中记录如下内容:
GroupPurposeType.h为C++的头文件
GroupPurposeType为类名称
GroupPurposeType&operator++()为C++对应的函数
通过C++的头文件生成Python单元测试的框架文件是可以直接运行的:
在图5所示的测试界面中,因为生成Python单元测试框架里面的单元测试例没有准备测试的入参数据,对出参的预期未做判断验证,所以运行的话测例都是失败的。运行日志如图5所示。
在生成的Python测试框架中准备好测试数据,并对测试结果做出验证,重新运行,其运行日志如图6所示。
在C++软件研发测试过程中,研发人员只要将C++的头文件通过swig编译成可以运行的Python或者Java程序(即图2中过程1),测试人员可以不需要编写C++的程序,降低了测试人员的要求;
测试人员只需要根据生成的测试框架补充测试数据,判断运行结果(即图2中过程3),就能完成程序测试,从编写C++的程序变为准备Python或Java的测试数据,判断结果数据,大大降低了对测试人员的要求。
在测试过程中,通过C++的头文件转换成Python或Java单元测试框架,以及测试过程中的运行数据收集(即图2中过程2),都是程序自动化完成。提升了整个测试阶段的开发过程,同时也降低了人为因素对测试质量的影响。
从编写C++的测试程序到准备Python或者Java的测试数据,验证测试结果,中间省去了测试人员编译C++的时间,用Python或者Java这种解释性语言代替C++这种编译性语言,节省编译时间,从而提升了测试用户测试效率。
根据C++的接口的入参情况:如果入参有默认值的话会自动增加入参为非默认值的单元测试接口,降低了因为测试用户人为失误造成测试用例不全的风险。
比如C++头文件void aeRoute(emyDesign*design,emyDouble width=0)中,C++的接口aeRoute的入参width的默认值为0.
将C++的接口aeRoute生成下面两个测试接口测试模板
@comLib.emyclass_function_check('aeRoute.h','aeRoute','void aeRoute(emyDesign*design,emyDouble width=0);')
def test__aeRoute(self):
self.assertEqual(True,False)
@comLib.emyclass_function_check('aeRoute.h','aeRoute','void aeRoute(emyDesign*design,emyDouble width=0);(width)')
def test__aeRoute_1(self):
self.assertEqual(True,False)
本发明中,针对含有默认值的c++的接口void aeRoute(emyDesign*design,emyDouble width=0),生成test__aeRout和test__aeRoute_1两个python的测试流程,其中test__aeRoute的测试流程使用width的默认值进行测试,在test__aeRoute_1的测试流程中使用width的非默认值进行测试。
自动生成的Python或者Java的测试框架完成了类、方法的单元测试用例的编写,节省测试用户25%左右的代码量。
在C++转Python或者Java的测试框架代码的过程中统计了需要测试的类、类的公有方法、引用的外部函数等信息并记录在数据库中,在运行测试的时候也会自动将实现了的类的公有方法或者引用的外部函数等信息记录到数据库中,测例运行完后可以将C++转Python或者Java的测试框架代码的过程中的记录信息和运行测试过程中的记录信息进行对比,生成测试报表,测试人员能非常清楚的知道测试的完成度。
例如:aeRoute.h的c++文件有aeRoute类,这个类只有void aeRoute(emyDesign*design,emyDouble width=0)这样一个公有接口函数为例。
在数据库生成的待测记录表中会有这样两条记录:
aeRoute.h | aeRoute | void aeRoute(emyDesign*design,emyDouble width=0); |
aeRoute.h | aeRoute | void aeRoute(emyDesign*design,emyDouble width=0);(width) |
当编写好test__aeRout的测试方法,即aeRoute类的void aeRoute(emyDesign*design,emyDouble width=0)公有方法进行测试的时候,在数据库测试运行记录表中会生成以下信息:
aeRoute.h | aeRoute | void aeRoute(emyDesign*design,emyDouble width=0); |
通过数据库表的对比可以知道aeRoute.h文件的aeRoute类已经完成了voidaeRoute(emyDesign*design,emyDouble width=0);公有接口的测试,还差void aeRoute(emyDesign*design,emyDouble width=0);(width)公有接口的测试。
在本发明中,测试的过程中还会记录测试运行的时间,这样可以很清楚知道每天、每周的测例进度情况。
同样用接口void aeRoute(emyDesign*design,emyDouble width=0)举例
在数据库中记录
C++的头文件aeRoute.h
类名称aeRoute
C++对应的函数
void aeRoute(emyDesign*design,emyDouble width=0);和
void aeRoute(emyDesign*design,emyDouble width=0);(width)
这两个Python需要测试的测试接口的信息。
当测试人员编写测例后,运行测例的时候我们会记录运行的信息。
比如图5则是生4个接口运行失败了,而图6就是测试接口都成功了。通过将生成过程中的记录信息和运行过程中的信息进行对比,很容易知道测试人员完成测例的情况。
整个测试过程中,自动化率高,人员参与程度低。
这种通过swig将C++接口转为Python或者Java的接口,并且自动生成Python或者Java测试框架、统计测试运行信息的方法能有效的加速C++软件测试过程,降低测试人员要求,提升测试质量。
在另一种可实现方式中,参照图7,本发明所述C++程序接口的快速测试装置,具体包括:
获取单元101,其在接收到C++程序接口的快速测试请求时,获取一组或多组包含C++头文件的源数据;
解析单元102,其对获取的所述C++头文件的源数据执行C++语法解析处理,基于所述C++语法解析处理结果判定是否能够基于所述C++头文件生成Python或Java测试框架;
测试框架生成单元103,其基于对C++的语法解析结果生成Python或Java测试框架;以及
输出单元104,其输出Python或Java测试结果,
其中,所述解析单元102判定所述C++头文件是否有类的公有的函数,或所述C++头文件是否引用了外部的函数,当所述C++头文件中至少满足(1)包含类的公有的函数;(2)引用了外部的函数中的一个条件时,所述解析单元102判定为能够基于所述C++头文件生成Python或Java测试框架。
可以理解的是,本发明所述测试框架生成单元103可以执行上述C++程序接口的快速测试方法的相应测试框架生成过程,如规范化处理等。
本发明还提供一种可读存储介质,所述可读存储介质上存储有程序或指令,该程序或指令被处理器执行时实现上述C++程序接口的快速测试方法的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
上面结合附图对本申请的实施例进行了描述,但是本申请并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本申请的启示下,在不脱离本申请宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本申请的保护之内。
Claims (8)
1.一种C++程序接口的快速测试方法,其特征在于,包括如下步骤:
在接收到C++程序接口的快速测试请求时,获取一组或多组包含C++头文件的源数据;
对获取的所述C++头文件的源数据执行C++语法解析处理;
基于所述C++语法解析处理的结果判定是否能够基于所述C++头文件生成Python或Java测试框架;
在判定为能够基于所述C++头文件生成Python或Java测试框架的情况下,基于对C++的语法解析的结果生成Python或Java测试框架;以及
输出Python或Java测试结果,
其中,对获取的所述C++头文件的源数据执行C++的语法解析,包括:
判定所述C++头文件是否有类的公有的函数,或所述C++头文件是否引用了外部的函数,
当C++头文件中至少满足(1)包含类的公有的函数;(2)引用了外部的函数中的一个条件时,判定为能够基于所述C++头文件生成Python或Java测试框架。
2.根据权利要求1所述的C++程序接口的快速测试方法,其特征在于,
当判定为所获取的C++头文件中既没有类的公有函数且没有引用外部函数时,则退出测试程序。
3.根据权利要求1所述的C++程序接口的快速测试方法,其特征在于,
基于对C++的语法解析结果生成Python或Java测试框架包括:对C++头文件中的类进行类名称、类的公有接口函数、公有函数的入参/出参进行适用于Python或Java测试环境的规范化处理。
4.根据权利要求1所述的C++程序接口的快速测试方法,其特征在于,还包括
将Python或Java的测试数据导入所生成的Python或Java测试框架运行Python或Java测试流程。
5.根据权利要求4所述的C++程序接口的快速测试方法,其特征在于,
运行Python或Java测试流程时自动将实现了的类的公有方法或者引用的外部函数的信息记录到数据库中,基于所述数据库记录的信息生成测试报表。
6.根据权利要求5所述的C++程序接口的快速测试方法,其特征在于,
所述测试报表包括测试的运行时间、通过的测例数据和测试失败的测例数据。
7.一种C++程序接口的快速测试装置,其特征在于,包括:
获取单元,其在接收到C++程序接口的快速测试请求时,获取一组或多组包含C++头文件的源数据;
解析单元,其对获取的所述C++头文件的源数据执行C++语法解析处理,基于所述C++语法解析处理的结果判定是否能够基于所述C++头文件生成Python或Java测试框架;
测试框架生成单元,其在所述解析单元判定为能够基于所述C++头文件生成Python或Java测试框架的情况下,基于对C++的语法解析的结果生成Python或Java测试框架;以及
输出单元,其输出Python或Java测试结果,
其中,所述解析单元判定所述C++头文件是否有类的公有的函数,或所述C++头文件是否引用了外部的函数,当所述C++头文件中至少满足(1)包含类的公有的函数;(2)引用了外部的函数中的一个条件时,所述解析单元判定为能够基于所述C++头文件生成Python或Java测试框架。
8.一种计算机可读存储介质,其上存储有计算机指令,其特征在于,所述计算机指令被处理器运行时执行权利要求1-6任一项所述的C++程序接口的快速测试方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310363696.3A CN116383068A (zh) | 2023-04-06 | 2023-04-06 | 一种c++程序接口的快速测试方法、装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310363696.3A CN116383068A (zh) | 2023-04-06 | 2023-04-06 | 一种c++程序接口的快速测试方法、装置及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116383068A true CN116383068A (zh) | 2023-07-04 |
Family
ID=86974665
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310363696.3A Pending CN116383068A (zh) | 2023-04-06 | 2023-04-06 | 一种c++程序接口的快速测试方法、装置及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116383068A (zh) |
-
2023
- 2023-04-06 CN CN202310363696.3A patent/CN116383068A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2020186810A1 (zh) | 回归测试用例确定方法、装置、计算机设备及存储介质 | |
CN111124919A (zh) | 一种用户界面的测试方法、装置、设备及存储介质 | |
CN108628748B (zh) | 自动化测试管理方法和自动化测试管理系统 | |
CN109933521A (zh) | 基于bdd的自动化测试方法、装置、计算机设备及存储介质 | |
CN113010413B (zh) | 一种接口自动化测试方法和装置 | |
CN100514307C (zh) | 一种测试代价敏感的系统故障定位方法及其装置 | |
CN111752833B (zh) | 一种软件质量体系准出方法、装置、服务器及存储介质 | |
CN117009208A (zh) | 依赖关系信息的处理方法、装置、设备及存储介质 | |
CN117370217B (zh) | 一种基于python的接口测试结果自动生成方法 | |
CN112561690B (zh) | 信用卡分期业务接口的测试方法、系统、设备及存储介质 | |
CN115248783B (zh) | 软件测试方法、系统、可读存储介质及计算机设备 | |
CN116383068A (zh) | 一种c++程序接口的快速测试方法、装置及存储介质 | |
CN116306479A (zh) | 基于uvm的以太网phy通用验证平台及验证方法 | |
CN115292178A (zh) | 测试数据搜索方法、装置、存储介质以及终端 | |
CN113791980B (zh) | 测试用例的转化分析方法、装置、设备及存储介质 | |
CN114942905A (zh) | 一种迁移数据验证方法、装置、设备和存储介质 | |
CN113836825A (zh) | 神经网络处理器关键标准与验证芯片的应用方法 | |
CN114661615A (zh) | 一种fpga软件测试方法和设备 | |
CN114490413A (zh) | 测试数据的准备方法及装置、存储介质和电子设备 | |
US7516048B2 (en) | Externalized metric calculation engine | |
CN113973068A (zh) | 混沌测试方法、装置、混沌测试平台及存储介质 | |
CN113282504A (zh) | 一种增量代码覆盖率检测方法及业务开发方法、装置 | |
CN112631930B (zh) | 动态系统测试方法及相关装置 | |
CN116661758B (zh) | 一种优化日志框架配置的方法、装置、电子设备及介质 | |
Fenton | Software measurement: why a formal approach? |
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 |