CN104750606B - 一种基于反射的自动化测试方法 - Google Patents
一种基于反射的自动化测试方法 Download PDFInfo
- Publication number
- CN104750606B CN104750606B CN201510095017.4A CN201510095017A CN104750606B CN 104750606 B CN104750606 B CN 104750606B CN 201510095017 A CN201510095017 A CN 201510095017A CN 104750606 B CN104750606 B CN 104750606B
- Authority
- CN
- China
- Prior art keywords
- test
- cell module
- test cell
- java
- test case
- 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.)
- Active
Links
Landscapes
- Debugging And Monitoring (AREA)
Abstract
一种基于反射的自动化测试方法,首先得到被测系统的所有测试单元模块,并对每个测试单元模块编写对应的Java代码后进行编译;然后选取需要的测试单元模块组成测试用例,并将测试用例及对应测试用例信息存至数据库;最后从数据库中依次读取测试用例,并根据测试用例中的测试单元模块创建Object[]类型的参数数组、Java类的Class对象及对应的Java对象后执行完成测试。本发明与现有技术相比,避免了从测试用例到脚本的翻译转换过程,可以直接根据测试单元模块动态执行测试,同时无需额外的脚本解释器,执行效率高且易扩展。
Description
技术领域
本发明涉及一种自动化测试领域技术,特别是一种基于反射的自动化测试方法。
背景技术
传统的自动化测试领域,测试用例一般通过直接编写脚本来描述与执行。但基于脚本的开发语法较为复杂,且不直观、可维护性较差。与脚本相比,图形化的测试用例开发方法更为简单快捷、直观和易维护。图形化测试用例设计一般由测试用例设计人员通过组合各种测试单元模块来完成,如何驱动测试用例的执行,是一个关键问题。
专利“一种自动化测试系统及测试脚本的生成和运行方法”(申请号CN200710086936)提出一种图形化界面供测试人员选择测试动作(相当于测试单元模块),并设置相应的参数,然后通过测试脚本生成模块提取和显示测试动作库中包含的测试动作信息,并根据选定的测试动作和设置的测试动作的参数生成测试脚本,最终执行测试脚本。这种将测试单元模块序列翻译成中间脚本,再驱动脚本的执行的方法具有代表性。但该方法不足之处在于需要处理测试动作(测试单元模块)到测试脚本的映射关系,生成语法正确的脚本,比较复杂。同时,测试用例的执行实际是通过执行测试脚本实现的,需要事先开发相应的脚本函数,并依靠脚本解释器来解释执行脚本,扩展性较差、复杂度较高,且解释执行的效率较低。
专利“一种基于测试原子的卫星自动化测试方法”(申请号CN201010597273.0)提出了一种基于测试原子的卫星自动化测试方法,通过对测试用例的抽象提炼,归纳出可独立执行的最小测试单元,把这种测试单元定义为测试原子,在该基础上搭建自动化测试平台,测试过程中的测试用例由这些测试原子组合而成,在自动化测试平台上自动执行测试用例。该发明将卫星待测项目进行分解形成多个最小的测试方法序列,使用测试脚本编辑工具,从测试原子库中选择需要的测试原子并按测试顺序进行排列形成与最小测试方法序列相一致的测试脚本,将形成的所有测试脚本集合在一起形成测试脚本库。可见该发明同样是基于生成的中间脚本来驱动执行测试用例的。
发明内容
本发明解决的技术问题是:克服现有技术的不足,提供了一种基于反射的自动化测试方法,无需将组成测试用例的测试单元模块序列翻译为中间脚本,能够直接根据测试用例中每个测试单元模块的测试业务Java类并使用Java反射技术直接执行该测试业务Java类。
本发明的技术解决方案是:一种基于反射的自动化测试方法,包括如下步骤:
(1)对被测系统的所有测试业务进行封装得到对应的测试单元模块后存入测试单元库;所述测试单元模块包括名称、绑定的Java类名及可定制参数,其中,名称为测试单元模块代表的测试业务,绑定的Java类名为用于执行该测试单元模块测试业务的Java类的类名,可定制参数为执行该测试单元模块时需要的输入数据;
(2)对每个测试单元模块编写对应的Java代码并进行编译,其中,测试单元模块对应的代码中Java类名与该测试单元模块的绑定的Java类名相同;
(3)选取一个或多个测试单元模块后组成测试用例,将得到的所有的测试用例保存至数据库;
(4)从数据库中依次读取测试用例,并根据当前测试用例中每个测试单元模块的可定制参数,分别创建Object[]类型的参数数组;
(5)根据当前用例中每个测试单元模块的绑定的Java类名,通过Java反射机制,分别创建Java类的Class对象,然后将步骤(4)创建的参数数组作为newInstance( )方法的参数,并执行Class对象的newInstance( )方法后得到当前用例中每个测试单元模块的绑定的Java类名对应的Java对象;
(6)依次调用当前测试用例中各个测试单元模块的Java对象的run( )方法执行,遍历数据库中测试用例直至测试用例均被执行完成。
本发明与现有技术相比的优点在于:
(1)本发明与现有技术相比,避免了从组成测试用例的测试单元模块序列到脚本的翻译转换过程,可以直接根据测试单元模块动态执行测试业务Java类,执行简单且易扩展;
(2)本发明与现有技术相比,无需额外的脚本解释器,能够直接编译执行测试单元模块,执行效率更高;
(3)本发明与现有技术相比,实现测试单元模块功能的测试业务Java类使用Java语言开发,与脚本相比,可以实现复杂的功能。
附图说明
图1为本发明与图形化测试用例传统执行方法的技术对比图;
图2为本发明基于反射的自动化测试方法原理图。
具体实施方式
本发明提出一种基于反射的自动化测试方法,对传统的传统的图形化测试用例执行技术进行改进,如图1所示为本发明与图形化测试用例传统执行方法的技术对比图。图1中上方为传统的图形化测试用例执行技术,经历了从用例模块翻译到中间脚本再到执行的过程,图1下方为本发明基于反射的用例执行方式,可直接根据模块信息并基于反射技术实时执行测试用例,如图2所示,本发明具体步骤包括:
(1)针对被测系统的所有典型的不可再拆分的测试业务,使用多个对应的测试单元模块封装对应的测试业务,测试单元模块可在建立测试用例时重复使用,由3个字段组成:名称、绑定的Java类名以及可定制参数,其中,名称用于说明测试单元模块所代表的测试业务;绑定的Java类名是一个用于执行该测试单元模块具体测试过程的Java类的类名;可定制参数是执行该测试单元模块时需要的输入数据。
(2)将所有测试单元模块存入测试单元库,其中测试单元库是所有测试单元模块的集合。
(3)为每个测试单元模块编写对应的Java代码,其中1个测试单元模块对应1个Java类,代码中Java类名应与测试单元模块的绑定的Java类名(包括包名)相同,并且对应的Java代码须实现run()方法,在run()方法中实现测试单元模块的测试功能。
(4)将编写好的Java类代码进行编译。
(5)根据测试需要,从测试单元库中选取特定的测试单元模块,作为测试用例的一个步骤。通过若干测试单元模块的组合,形成测试用例并将测试用例保存至数据库。
(6)从数据库中读取测试用例的测试用例信息,其中测试用例信息是组成该测试用例的每个测试单元模块信息(包括名称,绑定的Java类名以及可定制参数)组成的序列。
(7)根据每个测试单元模块的可定制参数,创建Object[]类型的参数数组。
(8)根据每个测试单元模块绑定的Java类名,通过Java反射机制,创建Java类的Class对象。
(9)执行Class对象的newInstance( )方法,并将步骤(7)中创建的参数数组作为newInstance( )方法的参数,从而最终创建测试单元模块绑定的Java类名所对应的Java对象。
(10)调用Java对象的run( )方法,从而执行当前步骤的测试。
(11)当一个测试用例的测试单元模块序列逐个按照上述步骤被执行完成后,就完成了整个测试用例的执行。
下面结合实施例对本发明做更进一步说明。
(1)实现一个图形化的测试单元模块,该模块用于判断被测对象的一项指标值是否符合上下限要求,该模块由3部分组成:
【模块名称】
判断指标值上下限
【模块对应的测试业务Java类名】
com.test.ParamJudge(Java类名)
【可由用户指定的参数】
●指标序号
●指标波道
●指标预期上限
●指标预期下限
●判读超时时间(秒)
通过编程语言的图形化控件,实现该模块,效果如下:
(2)针对该测试单元模块的测试需求,编写对应的Java类代码。该Java类包含3部分:
(3)根据测试需要,将若干测试单元模块组成测试用例。同时,给出测试用例中各模块的参数。例如,对于“判断指标值上下限”模块,指定其参数:
指标序号:VY9
指标波道:PK1/134
指标预期上限:0
指标预期下限:0
判读超时时间(秒):60
(4)在运行时(runtime),从数据库中读取测试用例,获取每一步的测试模块信息。例如,当执行到“判断指标值上下限模块”时,测试用例反射执行引擎根据测试单元模块中的测试业务Java类名字符串com.test.ParamJudge,用Java反射技术动态加载测试业务Java类的Class对象。
Class<?>cls=Class.forName(“com.test.ParamJudge”);
(5)根据读取的模块参数,反射构造测试业务Java类对象。
ParamJudge object=(ParamJudge)cls.newInstance(new Ojbect[]{“VY9”,“VY9”,0,0,60});
(6)执行Java类对象的测试业务方法。执行过程中,会用到上一步中传入的测试业务相关的各种参数,进行测试业务相关的逻辑判断等。
obj.run();
本发明说明书中未作详细描述的内容属本领域技术人员的公知技术。
Claims (1)
1.一种基于反射的自动化测试方法,其特征在于包括如下步骤:
(1)对被测系统的所有测试业务进行封装得到对应的测试单元模块后存入测试单元库;所述测试单元模块包括名称、绑定的Java类名及可定制参数,其中,名称为测试单元模块代表的测试业务,绑定的Java类名为用于执行该测试单元模块测试业务的Java类的类名,可定制参数为执行该测试单元模块时需要的输入数据;
(2)对每个测试单元模块编写对应的Java代码并进行编译,其中,测试单元模块对应的代码中Java类名与该测试单元模块的绑定的Java类名相同;
(3)选取一个或多个测试单元模块后组成测试用例,将得到的所有的测试用例保存至数据库;
(4)从数据库中依次读取测试用例,并根据当前测试用例中每个测试单元模块的可定制参数,分别创建Object[]类型的参数数组;
(5)根据当前测试用例中每个测试单元模块的绑定的Java类名,通过Java反射机制,分别创建Java类的Class对象,然后将步骤(4)创建的参数数组作为newInstance()方法的参数,并执行Class对象的newInstance()方法后得到当前测试用例中每个测试单元模块的绑定的Java类名对应的Java对象;
(6)依次调用当前测试用例中各个测试单元模块的Java对象的run()方法执行,遍历数据库中测试用例直至测试用例均被执行完成。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510095017.4A CN104750606B (zh) | 2015-03-03 | 2015-03-03 | 一种基于反射的自动化测试方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510095017.4A CN104750606B (zh) | 2015-03-03 | 2015-03-03 | 一种基于反射的自动化测试方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104750606A CN104750606A (zh) | 2015-07-01 |
CN104750606B true CN104750606B (zh) | 2017-11-07 |
Family
ID=53590339
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510095017.4A Active CN104750606B (zh) | 2015-03-03 | 2015-03-03 | 一种基于反射的自动化测试方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104750606B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105095077B (zh) * | 2015-07-17 | 2018-01-16 | 北京奇虎科技有限公司 | 用户界面自动化测试方法和装置 |
CN106598853A (zh) * | 2016-12-05 | 2017-04-26 | 广州唯品会信息科技有限公司 | 自动生成测试项目方法及系统 |
CN108628729B (zh) * | 2017-03-15 | 2021-11-30 | 北京嘀嘀无限科技发展有限公司 | 一种软件测试方法和软件测试客户端 |
CN107133174A (zh) * | 2017-05-04 | 2017-09-05 | 浙江路港互通信息技术有限公司 | 测试用例代码自动生成装置与方法 |
CN107766252A (zh) * | 2017-11-08 | 2018-03-06 | 平安科技(深圳)有限公司 | 测试脚本自动化执行方法、装置、设备以及存储介质 |
CN108446223B (zh) * | 2018-03-06 | 2021-07-27 | 吉旗(成都)科技有限公司 | 一种基于动态编译的业务场景自动化测试方法 |
CN110515827A (zh) * | 2019-07-05 | 2019-11-29 | 中国平安财产保险股份有限公司 | 自动化测试方法、装置、计算机设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102402483A (zh) * | 2011-12-27 | 2012-04-04 | 苏州佰思迈信息咨询有限公司 | 软件测试方法 |
CN103530231A (zh) * | 2013-10-12 | 2014-01-22 | 北京京东尚科信息技术有限公司 | 一种基于业务流程控制的应用程序测试方法及系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9135150B2 (en) * | 2013-02-27 | 2015-09-15 | International Business Machines Corporation | Automated execution of functional test scripts on a remote system within a unit testing framework |
-
2015
- 2015-03-03 CN CN201510095017.4A patent/CN104750606B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102402483A (zh) * | 2011-12-27 | 2012-04-04 | 苏州佰思迈信息咨询有限公司 | 软件测试方法 |
CN103530231A (zh) * | 2013-10-12 | 2014-01-22 | 北京京东尚科信息技术有限公司 | 一种基于业务流程控制的应用程序测试方法及系统 |
Non-Patent Citations (1)
Title |
---|
自动化测试工具Workload的设计与实现;李倩;《中国优秀硕士学位论文全文数据库》;20131215;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN104750606A (zh) | 2015-07-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104750606B (zh) | 一种基于反射的自动化测试方法 | |
CN100578446C (zh) | 基于数据驱动的测试用例设计测试方法及自动测试平台 | |
CN105608258B (zh) | 一种基于模型的系统设计及信息流可视化仿真系统及方法 | |
CN101339534B (zh) | 一种软件测试的方法及装置 | |
CN102495789B (zh) | 一种自动化测试方法和设备 | |
Ostrand et al. | A visual test development environment for GUI systems | |
CN104156314B (zh) | 一种应用于测试系统的代码重用方法 | |
CN109783084A (zh) | 一种计算机代码自动生成方法、系统、装置和存储介质 | |
CN105760296B (zh) | 自动化测试控制方法、装置及终端 | |
CN110321281A (zh) | 基于混合自动化测试框架的Web测试平台及测试方法 | |
CN110109897A (zh) | 数据库脚本生成方法、装置、计算机设备和存储介质 | |
CN110134400A (zh) | 数据获取方法、装置、电子设备及计算机可读存储介质 | |
CN104035873A (zh) | 测试代码生成方法及生成装置 | |
CN106598834A (zh) | Ui测试方法及装置 | |
CN106648587A (zh) | 一种基于注解的Web应用代码生成方法 | |
Torgo | An infra-structure for performance estimation and experimental comparison of predictive models in r | |
US20070061641A1 (en) | Apparatus and method for generating test driver | |
CN101866315B (zh) | 软件开发工具的测试方法及系统 | |
CN102567201A (zh) | 跨模型的图形用户界面测试脚本自动修复方法 | |
CN105446865A (zh) | 多种环境下的测试方法及装置 | |
CN111428431A (zh) | 一种支持eda软件的自动化测试并记录的方法及系统 | |
CN103605606A (zh) | 一种可自动转换的嵌入式软件测试用例批量执行方法 | |
CN100437513C (zh) | 实现自动测试的方法与系统 | |
CN104834510A (zh) | Can协议代码源文件的生成方法和装置 | |
CN104598382B (zh) | 一种测试控制方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |