CN102955740A - 一种基于Perl的驱动函数和桩函数生成方法 - Google Patents
一种基于Perl的驱动函数和桩函数生成方法 Download PDFInfo
- Publication number
- CN102955740A CN102955740A CN2012105403796A CN201210540379A CN102955740A CN 102955740 A CN102955740 A CN 102955740A CN 2012105403796 A CN2012105403796 A CN 2012105403796A CN 201210540379 A CN201210540379 A CN 201210540379A CN 102955740 A CN102955740 A CN 102955740A
- Authority
- CN
- China
- Prior art keywords
- test
- function
- perl
- key word
- pile
- 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
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于Perl的驱动函数和桩函数生成方法,包括以下步骤:编写关键字标识的采用文本格式的测试用例描述文件;编写测试辅助模块;用Perl脚本按照关键字解析测试用例描述文件;用Perl脚本自动生成测试驱动函数和桩函数。测试用例采用特定格式的文本文件进行描述,编写灵活,同时有利于测试数据的管理和重用;本发明方法具有提高测试效率,实现方便,运行速度快,可读性增强等优点。
Description
技术领域
本发明涉及软件单元测试领域,具体涉及基于Perl的驱动函数和桩函数生成方法。
背景技术
单元测试是软件开发过程中最早开展的动态测试活动,是对软件的最小独立单元进行的一种测试。软件单元可以是函数,类。按类进行的单元测试一般都比较复杂,实际测试中主要还是以函数为主。
通过单元测试可以较早地发现代码中存在的功能和逻辑上的缺陷甚至软件设计中的问题,这对于提高软件的健壮性和稳定性很有作用。并且在生命周期中尽早地对软件进行测试将减少后续测试工作和维护工作的难度,节省项目的成本和费用。
随着当前软件的规模越来越大,逻辑越来越复杂,特别是在嵌入式领域,单元测试的重要性不言而喻,早已被广泛开展,目前进行的单元测试主要有:
1.基于自己建立的单元测试框架或采用市面上提供的单元测试框架,人工编写大量的驱动函数和桩函数完成;
2.借助工具如TestBed,Cantata++等完成,通过界面的测试相关输入操作后,自动生成测试驱动和桩函数。
第1种方法的特点是操作自由灵活,使用简单,但是人工编写大量的驱动函数和桩函数工作量大,测试数据难以重用和管理。第2种方法通过工具界面输入测试相关信息,操作不灵活,且通用的工具很难适用一些特定环境,特别在嵌入式领域,不同的目标平台就会有不同的运行要求,需要花费大量的时间进行测试环境配置。
因此,一种较好的单元测试装置是自己建立或选择一款灵活又简单适用的单元测试框架,同时不需要花大量的时间去构造驱动函数和桩函数。
发明内容
针对已有技术存在的不足,本发明的目的在于提供一种基于Perl的驱动函数和桩函数生成方法,该方法是在已有测试框架的基础上提供一种基于Perl的测试驱动和桩函数生成方法,利用Perl强大的文本处理能力自动生成测试驱动和桩函数,大大提高测试效率。
本发明的发明目的是通过如下技术方案实现的。
一种基于Perl的驱动函数和桩函数生成方法,包括以下步骤:
A、编写关键字标识的采用文本格式的测试用例描述文件;
B、编写测试辅助模块;
C、用Perl脚本按照关键字解析测试用例描述文件;
D、用Perl脚本自动生成测试驱动函数和桩函数。
步骤A中所述的测试用例描述文件必须采用关键字标识的文本格式并按照一定的规则编写,如采用XML格式是较好的选择。测试用例描述文件至少包括被测单元信息以及该单元下的所有测试用例和桩函数参数信息,每个测试用例包含被测单元所需的测试数据(如全局变量输入、参数输入、预期输出)以及打桩信息(如桩函数名、桩函数返回信息),还包括测试类型和用例初始化信息。一个测试用例描述文件可以只对应一个被测单元,也可以是多个被测单元的测试描述集合。
步骤B所述的测试辅助模块主要将一些常用的测试操作模块化,并进行测试记录,该模块主要供测试驱动调用,采用单元测试框架要求的编程语言。
步骤C的具体方法为逐行扫描文本格式的测试用例描述文件,按以下规则提取所需信息:
1)如果检测到被测单元相关的关键字,则提取被测单元名;
2)如果检测到被调用函数相关的关键字,则提取被调用函数名以及相关的输入/输出参数列表,其中所述的被调用函数主要是指需要打桩的函数;
3)如果检测到测试类型相关的关键字,则提取测试类型,并形成格式为“测试类型_被测单元名_序号”的唯一测试用例标识;
4)如果检测到初始化相关的关键字,则提取测试用例初始化信息;
5)如果检测到全局变量输入相关的关键字,则提取全局变量名、类型以及输入值;
6)如果检测到参数输入相关的关键字,则提取输入参数名、类型以及输入值;
7)如果检测到预期输出相关的关键字,则提取预期输出变量名、类型以及期望值;
8)如果检测到打桩相关的关键字,则提取打桩信息。
如果有多个测试用例描述文件,则重复以上规则继续扫描,直到所有文件处理完毕。
步骤D生成的测试驱动和桩函数采用单元测试框架要求的编程语言。为每一个被测单元,根据步骤C提取的测试相关信息并结合步骤B编写的测试辅助模块自动生成测试驱动函数,根据步骤C提取的被调用函数参数信息和打桩信息自动生成桩函数。
本发明具有以下有益效果:
1)测试用例采用特定格式的文本文件进行描述,编写灵活,同时有利于测试数据的管理和重用;
2)用Perl脚本实现了测试驱动和桩函数的自动生成,代替了大量的人工劳动,减少了人为错误,同时提高测试效率,另一方面,由于Perl具有强大的文本处理能力,实现方便,运行速度快;
3)测试辅助模块的设置提高了测试驱动程序的模块化程度,使代码结构简化,可读性增强。
附图说明
图1为本发明方法的过程框图;
图2为本发明用Perl解析测试用例描述文件流程图;
图3和图4分别为测试驱动和桩函数生成流程图。
具体实施方式
为使本发明的技术方案更清楚,下面将结合附图及具体实施例对本发明进行详细描述。
实施例
采用XML格式编写测试用例描述文件,生成的测试驱动和桩函数要求符合C语言规则。
请参照图1,具体实现如下:
1、编写XML格式的测试用例描述文件:
用关键字<TestedFunc>标识被测单元信息;
用关键字<CalledFunc>标识被调用函数信息;
用关键字<TestType>标识测试类型;
用关键字<TestInit>标识测试用例初始化信息;
用关键字<GlobInputVar>标识全局输入变量信息;
用关键字<InputPar>标识输入参数信息;
用关键字<OutVar>标识测试用例预期输出信息;
用关键字<StubFunc>标识打桩信息。
2、编写测试辅助模块,将一些常用的测试操作模块化:定义Testing_Begin、Testing_End用于界定测试的开始和结束;定义Assign_Begin、Assign_End用于界定测试输入设置的开始和结束;定义Verify_Begin、Verify_End用于界定验证的开始和结束;定义一些通用的赋值函数和测试结果比较函数;根据项目要求定义测试结果记录函数和输出函数。
3、用Perl按图2所示的流程解析测试用例描述文件,本例子中按以下规则逐行扫描:
a)如果检测到关键字“<TestedFunc>”,则提取被测单元名;
b)如果检测到关键字“<CalledFunc>”,则提取被调用函数名以及输入/输出参数列表;
c)如果检测到关键字“<TestType>”,则提取测试类型标识,并形成唯一的测试用例标识,如:“GN_myfun_001”;
d)如果检测到关键字“<TestInit>”,则提取测试用例初始化信息;
e)如果检测到关键字“<GlobInputVar>”,则提取全局输入变量名、类型以及设置值;
f)如果检测到关键字“<InputPar>”,则提取输入参数名、类型以及设置值;
g)如果检测到关键字“<OutVar>”,则提取预期输出变量名、类型以及期望值;
h)如果检测到关键字“<StubFunc>”,则提取桩函数名和桩函数体内的返回信息。
最终提取的测试相关信息按被测单元以及测试用例标识分类保存,提取的各测试用例打桩信息按桩函数分类保存。
4、用Perl按图3所示的流程,根据步骤3提取的测试相关信息,同时结合测试辅助模块,自动生成驱动函数。对于每一个被测单元,先按提取的被测单元名创建函数名为“Test_<提取的被测单元名>”的驱动函数,然后往函数体内逐个加入测试用例,每个测试用例生成信息如下:使用测试辅助模块定义的函数Testing_Begin()生成测试用例开始标记代码、利用提取的初始化信息生成测试用例初始化代码、利用提取的全局变量输入信息和参数输入信息并结合测试辅助模块定义的赋值函数生成测试输入代码、利用提取的被测单元名和输入参数信息生成被测单元调用代码、利用提取的预期输出信息并结合测试辅助模块定义的验证和输出函数分别生成测试结果验证代码和测试结果输出代码、使用测试辅助模块定义的函数Testing_End()生成测试用例结束标记代码。
用Perl按图4所示的流程,根据步骤3提取的桩函数信息(被调函数参数信息和各测试用例打桩信息),自动生成桩函数。对于每一个桩函数,先用提取的桩函数名和输入/输出参数列表,进行函数的创建,接着用提取的打桩信息为每一个相关测试用例生成各自的桩代码。
Claims (10)
1.一种基于Perl的驱动函数和桩函数生成方法,包括以下步骤:
A.编写关键字标识的采用文本格式的测试用例描述文件;测试用例描述文件至少包括被测单元信息以及该单元下的所有测试用例和桩函数参数信息,每个测试用例包含被测单元所需的测试数据以及打桩信息,还包括测试类型和用例初始化信息;
B.编写测试辅助模块;
C.用Perl脚本按照关键字解析测试用例描述文件;
D.用Perl脚本自动生成测试驱动函数和桩函数。
2.根据权利要求1所述的一种基于Perl的驱动函数和桩函数生成方法,其特征在于:A步骤中所述的被测单元所需的测试数据包括全局变量输入、参数输入、预期输出。
3.根据权利要求1所述的一种基于Perl的驱动函数和桩函数生成方法,其特征在于:A步骤中所述的被测单元所需的打桩信息包括桩函数名和桩函数返回信息。
4.根据权利要求1所述的一种基于Perl的驱动函数和桩函数生成方法,其特征在于:A步骤中测试用例描述文件采用关键字识别的特定文本格式编写。
5.根据权利要求4所述的一种基于Perl的驱动函数和桩函数生成方法,其特征在于:A步骤中测试用例描述文件采用关键字识别的特定文本格式为XML格式。
6.根据权利要求1所述的一种基于Perl的驱动函数和桩函数生成方法,其特征在于:步骤A中所述的一个测试用例描述文件可以只对应一个被测单元,也可以是多个被测单元的测试描述集合。
7.根据权利要求1所述的一种基于Perl的驱动函数和桩函数生成方法,其特征在于:步骤B所述的测试辅助模块是将一些常用的测试操作模块化,并进行测试记录,采用单元测试框架要求的编程语言。
8.根据权利要求1所述的一种基于Perl的驱动函数和桩函数生成方法,其特征在于:步骤C的具体方法为逐行扫描文本格式的测试用例描述文件,按以下规则提取所需信息:
1)如果检测到被测单元相关的关键字,则提取被测单元名;
2)如果检测到被调用函数相关的关键字,则提取被调用函数名以及相关的输入/输出参数列表,其中所述的被调用函数主要是指需要打桩的函数;
3)如果检测到测试类型相关的关键字,则提取测试类型,并形成格式为“测试类型被测单元名序号”的唯一测试用例标识;
4)如果检测到初始化相关的关键字,则提取测试用例初始化信息;
5)如果检测到全局变量输入相关的关键字,则提取全局变量名、类型以及输入值;
6)如果检测到参数输入相关的关键字,则提取输入参数名、类型以及输入值;
7)如果检测到预期输出相关的关键字,则提取预期输出变量名、类型以及期望值;
8)如果检测到打桩相关的关键字,则提取打桩信息;
如果有多个测试用例描述文件,则重复以上规则继续扫描,直到所有文件处理完毕。
9.根据权利要求1所述的一种基于Perl的驱动函数和桩函数生成方法,其特征在于:所述步骤D生成的测试驱动和桩函数采用单元测试框架要求的编程语言。
10.根据权利要求1、7和8中任意一项所述的一种基于Perl的驱动函数和桩函数生成方法,其特征在于:每一个被测单元根据步骤C提取的测试相关信息并结合步骤B编写的测试辅助模块自动生成测试驱动函数,根据步骤C提取的被调用函数参数信息和打桩信息自动生成桩函数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012105403796A CN102955740A (zh) | 2012-12-13 | 2012-12-13 | 一种基于Perl的驱动函数和桩函数生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012105403796A CN102955740A (zh) | 2012-12-13 | 2012-12-13 | 一种基于Perl的驱动函数和桩函数生成方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102955740A true CN102955740A (zh) | 2013-03-06 |
Family
ID=47764564
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2012105403796A Pending CN102955740A (zh) | 2012-12-13 | 2012-12-13 | 一种基于Perl的驱动函数和桩函数生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102955740A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104503900A (zh) * | 2014-11-21 | 2015-04-08 | 北京奇虎科技有限公司 | 测试用例生成方法及装置 |
CN105468525A (zh) * | 2015-11-27 | 2016-04-06 | 苏州同元软控信息技术有限公司 | 基于c代码模型的构件接口单元测试方法 |
WO2016065753A1 (zh) * | 2014-10-28 | 2016-05-06 | 中兴通讯股份有限公司 | 一种测试方法、装置及系统 |
CN105607996A (zh) * | 2015-11-27 | 2016-05-25 | 苏州同元软控信息技术有限公司 | 基于c代码模型的构件接口组装测试方法 |
CN106250280A (zh) * | 2016-07-25 | 2016-12-21 | 北京联盛德微电子有限责任公司 | 一种时钟信号测试方法和装置 |
CN106933741A (zh) * | 2017-03-16 | 2017-07-07 | 东软集团股份有限公司 | 联调测试的方法及装置 |
CN110928760A (zh) * | 2018-09-20 | 2020-03-27 | 杭州海康汽车技术有限公司 | 一种嵌入式系统中的单元测试方法与装置 |
CN112527657A (zh) * | 2020-12-17 | 2021-03-19 | 展讯通信(上海)有限公司 | 单元测试中自动插桩的方法及设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050044536A1 (en) * | 2003-08-19 | 2005-02-24 | Kwong Man K. | Method and system for dynamic generation of Perl language debugging tool |
CN1873626A (zh) * | 2005-06-01 | 2006-12-06 | 中兴通讯股份有限公司 | 一种自动生成桩和驱动函数的单元测试系统及方法 |
CN101706753A (zh) * | 2009-12-11 | 2010-05-12 | 武汉虹信通信技术有限责任公司 | 一种基于Perl的单元测试框架及方法 |
CN102360331A (zh) * | 2011-10-09 | 2012-02-22 | 中国航空无线电电子研究所 | 基于形式化描述的测试程序自动生成方法 |
-
2012
- 2012-12-13 CN CN2012105403796A patent/CN102955740A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050044536A1 (en) * | 2003-08-19 | 2005-02-24 | Kwong Man K. | Method and system for dynamic generation of Perl language debugging tool |
CN1873626A (zh) * | 2005-06-01 | 2006-12-06 | 中兴通讯股份有限公司 | 一种自动生成桩和驱动函数的单元测试系统及方法 |
CN101706753A (zh) * | 2009-12-11 | 2010-05-12 | 武汉虹信通信技术有限责任公司 | 一种基于Perl的单元测试框架及方法 |
CN102360331A (zh) * | 2011-10-09 | 2012-02-22 | 中国航空无线电电子研究所 | 基于形式化描述的测试程序自动生成方法 |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016065753A1 (zh) * | 2014-10-28 | 2016-05-06 | 中兴通讯股份有限公司 | 一种测试方法、装置及系统 |
CN104503900A (zh) * | 2014-11-21 | 2015-04-08 | 北京奇虎科技有限公司 | 测试用例生成方法及装置 |
CN105468525A (zh) * | 2015-11-27 | 2016-04-06 | 苏州同元软控信息技术有限公司 | 基于c代码模型的构件接口单元测试方法 |
CN105607996A (zh) * | 2015-11-27 | 2016-05-25 | 苏州同元软控信息技术有限公司 | 基于c代码模型的构件接口组装测试方法 |
CN106250280A (zh) * | 2016-07-25 | 2016-12-21 | 北京联盛德微电子有限责任公司 | 一种时钟信号测试方法和装置 |
CN106250280B (zh) * | 2016-07-25 | 2021-03-19 | 北京联盛德微电子有限责任公司 | 一种时钟信号测试方法和装置 |
CN106933741A (zh) * | 2017-03-16 | 2017-07-07 | 东软集团股份有限公司 | 联调测试的方法及装置 |
CN110928760A (zh) * | 2018-09-20 | 2020-03-27 | 杭州海康汽车技术有限公司 | 一种嵌入式系统中的单元测试方法与装置 |
CN110928760B (zh) * | 2018-09-20 | 2023-10-20 | 杭州海康汽车技术有限公司 | 一种嵌入式系统中的单元测试方法与装置 |
CN112527657A (zh) * | 2020-12-17 | 2021-03-19 | 展讯通信(上海)有限公司 | 单元测试中自动插桩的方法及设备 |
CN112527657B (zh) * | 2020-12-17 | 2022-08-30 | 展讯通信(上海)有限公司 | 单元测试中自动插桩的方法及设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102955740A (zh) | 一种基于Perl的驱动函数和桩函数生成方法 | |
CN101339534B (zh) | 一种软件测试的方法及装置 | |
CN101661460B (zh) | 管理系统报表生成方法和装置 | |
CN110852065A (zh) | 一种文档审核方法、装置、系统、设备及存储介质 | |
CN104317589A (zh) | 一种用于加载动态链接库的代码自动生成方法及装置 | |
CN104268073A (zh) | 一种批量生成测试用例的方法 | |
CN106547681B (zh) | 数据自动加载并复用模拟服务测试的方法和装置 | |
CN101996131A (zh) | 基于xml封装关键字的gui自动测试方法及自动测试平台 | |
CN102567193A (zh) | 测试用例转化为自动化测试脚本的方法及系统 | |
CN103488482A (zh) | 一种生成测试用例的方法和装置 | |
CN105528287A (zh) | 用于代码的单元测试的装置及方法 | |
CN102402430A (zh) | 一种利用脚本生成随机测试例方法和系统 | |
CN105786505A (zh) | 一种基于json的复杂web页面组件自定义方法及装置 | |
CN101859303A (zh) | 元数据管理方法及管理系统 | |
CN102650995A (zh) | 多维数据分析模型生成系统及方法 | |
CN102231109A (zh) | 无痕可管理的源代码自动插桩方法 | |
CN103677821A (zh) | 软件开发工具代码发布的方法和装置 | |
CN106484613A (zh) | 一种基于fitnese的接口自动化测试框架 | |
CN102236573A (zh) | 用于类型化程序设计语言的名称绑定可扩展性 | |
CN112988601A (zh) | 测试脚本开发方法及装置 | |
CN103399848A (zh) | 发动机试验数据标准化特定格式导入处理方法 | |
CN104156198A (zh) | 一种自动生成软件集成版本更新说明方法及装置 | |
CN111027286A (zh) | 一种电子问卷的生成方法 | |
CN116974541A (zh) | 一种基于llm的编程辅助方法 | |
US20080243470A1 (en) | Logical check assist program, recording medium on which the program is recorded, logical check assist apparatus, and logical check assist method |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20130306 |