CN104809056B - 一种接口测试代码的生成方法和装置 - Google Patents
一种接口测试代码的生成方法和装置 Download PDFInfo
- Publication number
- CN104809056B CN104809056B CN201410040301.7A CN201410040301A CN104809056B CN 104809056 B CN104809056 B CN 104809056B CN 201410040301 A CN201410040301 A CN 201410040301A CN 104809056 B CN104809056 B CN 104809056B
- Authority
- CN
- China
- Prior art keywords
- file
- name
- simulation imput
- imput device
- device operation
- 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)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明提供了一种接口测试代码的生成方法和装置,其中方法包括:确定待测试接口的待测试方法;通过模拟输入设备操作,针对所述待测试方法生成用例驱动文件和用例驱动文件中各用例所驱动的测试代码。本发明将测试代码的生成过程实现了自动化,无需测试人员手工编写测试代码,一方面提高了测试开发效率,减少人力投入,降低了人力成本;另一方面,测试代码的生成不受测试人员的素质影响。
Description
【技术领域】
本发明涉及计算机应用技术领域,特别涉及一种接口测试代码的生成方法和装置。
【背景技术】
在企业内部,为了避免***的过于复杂,往往倾向于将***中比较公用的功能拆分出来作为公共的平台,以公共服务的方式供其他***调用。基于这种平台化的思想,***与***之间暴露出来的外部接口越来越多,如何快速保证这些外部接口的质量是每个企业面临的问题。目前主流的方式是采用编写接口测试代码的方式来保证这些暴露出来的接口的质量。
然而,编写测试代码一方面对测试人员来说门槛相对较高,编写质量与测试人员的素质存在较大关联;另一方面,编写测试代码浪费人力成本,效率低下。
【发明内容】
有鉴于此,本发明提供了一种接口测试代码的生成方法和装置,以便于提高测试开发效率,降低人力成本。
具体技术方案如下:
本发明提供了一种接口测试代码的生成方法,该方法包括:
确定待测试接口的待测试方法;
通过模拟输入设备操作,针对所述待测试方法生成用例驱动文件和用例驱动文件中各用例所驱动的测试代码。
根据本发明一优选实施方式,该方法还包括:在集成开发环境中集成testNG插件或者testNG基础上的二次封装工具插件;
所述testNG基础上的二次封装工具包括:JSpec、jtester或Qtester。
根据本发明一优选实施方式,所述确定待测试接口的待测试方法具体包括:
获取待测试对象的参数信息;
如果所述待测试对象的参数信息中只有接口名,则通过模拟输入设备操作解析所述接口名中声明的所有方法作为所述待测试方法;
如果所述待测试对象的参数信息中既有接口名又有方法名,则将所述方法名对应的方法作为所述待测试方法。
根据本发明一优选实施方式,所述通过模拟输入设备操作解析所述接口名中声明的所有方法具体包括:
通过模拟输入设备操作打开集成开发环境的打开类型窗口;
在所述打开类型窗口输入所述接口名,模拟输入设备操作进入所述接口名的声明文件;
模拟输入设备操作找到所述声明文件声明的最后一个方法名,复制该方法名至粘贴板;
判断当前复制的字符串是否与所述接口名相同,如果是,收集粘贴板中所有的方法名;否则,模拟输入设备操作找到上一个方法名,复制该方法名至粘贴板,转至执行所述当前复制的字符串是否与所述接口名相同的步骤。
根据本发明一优选实施方式,所述生成用例驱动文件具体包括:
模拟输入设备操作打开集成开发环境的文件新增菜单;
模拟输入设备操作选择所述文件新增菜单中的文件新增选项,进入文件新增窗口;
模拟输入设备操作将要生成的用例驱动文件名输入所述文件新增窗口;
模拟输入设备操作清除所述文件新增窗口中默认的文件保存路径,并将所述用例驱动文件的保存路径输入所述文件新增窗口;
加载预先设置的用例驱动文件模板,并填充所述用例驱动文件模板中的自定义部分。
根据本发明一优选实施方式,若在集成开发环境中集成JSpec插件,则所述用例驱动文件为story文件;
所述生成用例驱动文件中各用例所驱动的测试代码具体包括:
模拟输入设备操作点击story文件中的关键字Given后返回story文件;
模拟输入设备操作点击story文件中的关键字When后返回story文件;
模拟输入设备操作点击story文件中的关键字Then。
根据本发明一优选实施方式,所述生成用例驱动文件中各用例所驱动的测试代码具体包括:
加载预先设置的测试代码模板;
根据用例驱动文件中的具体用例,模拟输入设备操作填充所述测试代码模板中的自定义部分。
根据本发明一优选实施方式,该方法还包括:
跳转到测试代码文件后,模拟输入设备操作搜索方法名以定位到具体的方法;
模拟输入设备操作关闭搜索窗口并跳转到方法行的最后;
模拟输入设备操作进入方法体;
对方法体进行初始化。
根据本发明一优选实施方式,所述模拟输入设备操作是通过调用具有模拟输入设备操作功能的工具所提供的API实现的。
本发明还提供了一种接口测试代码的生成装置,该装置包括:
确定单元,用于确定待测试接口的待测试方法;
文件生成单元,用于通过模拟输入设备操作,针对所述待测试方法生成用例驱动文件;
代码生成单元,用于通过模拟输入设备操作,生成用例驱动文件中各用例所驱动的测试代码。
根据本发明一优选实施方式,该装置所在的集成开发环境中集成了testNG插件或者testNG基础上的二次封装工具插件;
所述testNG基础上的二次封装工具包括:JSpec、jtester或Qtester。
根据本发明一优选实施方式,所述确定单元具体包括:
参数子单元,用于获取待测试对象的参数信息;
判断子单元,用于判断所述待测试对象的参数信息中是否只有接口名,如果是,则触发解析子单元;如果所述待测试对象的参数信息中既有接口名又有方法名,则将所述方法名对应的方法作为所述待测试方法;
解析子单元,用于受到所述判断子单元的触发时,通过模拟输入设备操作解析所述接口名中声明的所有方法作为所述待测试方法。
根据本发明一优选实施方式,所述解析子单元具体用于:
通过模拟输入设备操作打开集成开发环境的打开类型窗口;
在所述打开类型窗口输入所述接口名,模拟输入设备操作进入所述接口名的声明文件;
模拟输入设备操作找到所述声明文件声明的最后一个方法名,复制该方法名至粘贴板;
判断当前复制的字符串是否与所述接口名相同,如果是,收集粘贴板中所有的方法名;否则,模拟输入设备操作找到上一个方法名,复制该方法名至粘贴板,转至执行所述当前复制的字符串是否与所述接口名相同的操作。
根据本发明一优选实施方式,所述文件生成单元具体用于:
模拟输入设备操作打开集成开发环境的文件新增菜单;
模拟输入设备操作选择所述文件新增菜单中的文件新增选项,进入文件新增窗口;
模拟输入设备操作将要生成的用例驱动文件名输入所述文件新增窗口;
模拟输入设备操作清除所述文件新增窗口中默认的文件保存路径,并将所述用例驱动文件的保存路径输入所述文件新增窗口;
加载预先设置的用例驱动文件模板,并填充所述用例驱动文件模板中的自定义部分。
根据本发明一优选实施方式,若在集成开发环境中集成了JSpec插件,则所述用例驱动文件为story文件;
所述代码生成单元具体用于:
模拟输入设备操作点击story文件中的关键字Given后返回story文件;
模拟输入设备操作点击story文件中的关键字When后返回story文件;
模拟输入设备操作点击story文件中的关键字Then。
根据本发明一优选实施方式,所述代码生成单元具体用于:
加载预先设置的测试代码模板;
根据用例驱动文件中的具体用例,模拟输入设备操作填充所述测试代码模板中的自定义部分。
根据本发明一优选实施方式,该装置还包括:方法体进入单元,用于跳转到测试代码文件后,模拟输入设备操作搜索方法名以定位到具体的方法;模拟输入设备操作关闭搜索窗口并跳转到方法行的最后;模拟输入设备操作进入方法体;对方法体进行初始化。
根据本发明一优选实施方式,所述模拟输入设备操作是通过调用具有模拟输入设备操作功能的工具所提供的API实现的。
由以上技术方案可以看出,本发明将测试代码的生成过程实现了自动化,无需测试人员手工编写测试代码,一方面提高了测试开发效率,减少人力投入,降低了人力成本;另一方面,测试代码的生成不受测试人员的素质影响。
【附图说明】
图1为本发明实施例提供的接口测试代码的生成方法的整体流程图;
图2为本发明实施例提供的解析接口名中声明的方法的流程图;
图3为本发明实施例提供的生成story文件的方法流程图;
图4为本发明实施例提供的生成测试代码的方法流程图;
图5为本发明实施例提供的文件新增菜单的示意图;
图6为本发明实施例提供的进入测试代码的方法体的流程图;
图7为本发明实施例提供的接口测试代码的生成装置结构图。
【具体实施方式】
为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。
本发明的核心思想在于,获取待测试接口的待测试方法,通过模拟输入设备操作针对待测试方法生成用例驱动文件和接口测试代码。
本发明可以在集成开发环境中集成testNG(Testing Next Gerneration,下一代测试技术)插件或者testNG基础上的二次封装工具插件,testNG是一种开源工具,根据JUnit和Nunit思想而构建的利用注释来强化测试功能的测试框架。这种集成能够实现测试用例与测试代码分离,并且由测试用例驱动测试代码的运行。
例如可以在eclipse(Eclipse是一个开放源代码的、基于Java的可扩展开发平台,用于通过插件组件构建开发环境)中集成JSpec插件、jtester插件、Qtester插件等。在集成不同的插件时,对应的用例驱动文件可能具有不同的形式。例如当集成JSpec插件时,生成的用例驱动文件为story文件,当集成jtester插件时,生成的用例驱动文件可以为wiki文件,当集成Qtester插件时,生成的用例驱动文件可以为wiki文件。另外,模拟输入设备操作时,可以利用模拟输入设备操作的工具实现,例如通过调用sikuli的API提供的模拟键盘操作的功能,这里的输入设备操作可以包括但不限于键盘操作、鼠标操作。
在本发明的下述实施例中均以在eclipse中集成JSpec插件以及通过sikuli提供的模拟键盘操作的功能为例进行描述。
图1为本发明实施例提供的接口测试代码的生成方法的整体流程图,如图1中所示,该方法可以包括以下步骤:
步骤101:获取待测试对象的参数信息。
待测试对象的参数信息主要是用于确定待测试接口中的待测试方法,可以通过向测试人员提供交互界面,由测试人员实时输入待测试对象的参数信息,也可以由测试人员预先将待测试对象的参数信息写入预定的文件,本步骤从该预定的文件中获取待测试对象的参数信息。
待测试对象的参数信息至少包括接口名,还可以进一步包括方法名,还可以包括用例驱动文件名和用例驱动文件的保存路径。
步骤102:判断所述待测试对象的参数信息是否只有接口名,如果是,执行步骤103;如果除了接口名之外还有方法名,则执行步骤104。
步骤103:通过模拟输入设备操作,解析接口名中声明的所有方法,执行步骤104。
如果待测试对象的参数信息仅包含接口名,则需要解析该接口名中声明的所有方法,解析方式通过模拟输入设备操作来实现,具体过程可以如图2中所示,将在后续进行具体描述。
步骤104:通过模拟输入设备操作,针对各方法生成story文件。
如果待测试对象的参数信息仅包含接口名,在解析出该接口中声明的所有方法后,针对所有方法生成story文件和测试代码;如果待测试对象的参数信息包括接口名和方法名,则仅针对该方法名对应的方法生成story文件和测试代码。生成story文件的具体过程如图3所示,将在后续进行具体描述。
步骤105:生成story文件所驱动的测试代码。
生成测试代码的具体过程如图4所示,将在后续进行具体描述。
图2为本发明实施例提供的解析接口名中声明的方法的流程图,如图2中所示,可以包括以下步骤:
步骤201:通过sikuli提供的模拟键盘操作功能打开eclipse的打开类型窗口。
由于默认采用键盘操作“ctrl+shift+t”来打开eclipse窗口,因此,在本步骤中可以通过模拟键盘操作“ctrl+shift+t”来实现。
步骤202:在eclipse的打开类型窗口输入接口名,模拟键盘操作进入该接口名的声明文件。
将待测试的接口名输入打开类型窗口后,模拟键盘操作“回车”进入该接口名的声明文件。
步骤203:模拟键盘操作查看声明文件中声明的方法。
本步骤中可以模拟键盘操作“ctrl+o”查看声明文件中声明的方法。
步骤204:模拟键盘操作找到声明文件中声明的最后一个方法名,复制该方法名至粘贴板。
本步骤中可以模拟键盘操作“down”和“end”找到声明文件中声明的最后一个方法名。
复制该方法名至粘贴板时,模拟键盘操作“ctrl+v”。
步骤205:判断当前复制的字符串是否与接口名相同,如果是,执行步骤206;否则执行步骤207。
步骤206:确定该接口的所有方法收集完成,获取粘贴板中所有的方法名,结束流程。
在获取粘贴板中所有的方法名时可以调用sikuli的API提供的方法tt=env.getclipboard。
步骤207:模拟键盘操作找到上一个方法名,复制该方法名至粘贴板,转至步骤205。
本步骤中可以通过模拟键盘操作“↑”找到上一个方法名。
上述步骤204至步骤207完成的是声明文件中方法名的遍历,在本实施例中采用的方式是从后至前的遍历顺序,即从最后一个方法名开始逐一向前遍历,如果遍历到声明文件中的接口名,则说明所有方法名遍历完成。当然也可以采用其他遍历方式,在此不再列举。
图3为本发明实施例提供的生成story文件的方法流程图,本发明的一个重要思想是将测试用例与测试代码进行分离,并且由测试用例驱动测试代码,在此将测试用例所在的用于驱动测试代码的文件称为用例驱动文件,本实施例中的用例驱动文件为story文件。如图3所示,该方法可以包括以下步骤:
步骤301:通过sikuli提供的模拟键盘操作功能,模拟键盘操作打开eclipse的文件新增菜单。
本步骤中可以模拟键盘操作“shift+alt+n”打开eclipse的文件新增菜单,如图5所示,该文件新增菜单中包含文件新增选项“File”。
步骤302:模拟键盘操作选择文件新增菜单中的文件新增选项,进入文件新增窗口。
本步骤中可以模拟键盘操作输入两次“f”选择文件新增选项,然后“回车”进入文件新增窗口。
步骤303:将要生成的story文件的文件名输入文件新增窗口。
该要生成的story文件的文件名以及后续步骤中用到的文件保存路径可以由测试人员实时输入,也可以从预先写入预定的文件的待测试对象的参数信息中获取。
步骤304:模拟键盘操作清除文件新增窗口中默认的文件保存路径。
在有些情况下,文件新增窗口中会保存默认的文件保存路径,在此就需要首先将其清除才能输入新的文件保存路径。在此该清除的步骤需要一系列的模拟键盘操作,包括模拟键盘操作按下“shift”,同时敲“home”键,松开“shift”后敲“delete”键,为了提高效率,可以将该一系列的模拟键盘操作封装为一个方法,在后续需要清除文件新增窗口中默认的文件保存路径时,调用该方法的执行即可。另外这种将一系列的模拟键盘操作封装为一个方法也可以应用于其他步骤中。
步骤305:将文件保存路径输入文件新增窗口。
步骤306:加载预先设置的story文件模板,并填充所述story文件模板中的自定义部分。
story文件的模板格式可以如下所示:
○-story
Author:xxxxx
Create time:Wed Dec2512:00:24CST2013
Case description:
[case1]:please descript your case at there……
[case2]:please descript your case at there……
○-Scenario[case1]
○-Given init data
【param1=‘’】
【param2=‘’】
○-When testpick
【param1=‘’】
【param2=‘’】
○-Then Check result
【param1=‘’】
【param2=‘’】
上述格式中,story到Scenario中间的部分是测试用例的说明部分,类似注释,主要说明本次测试用例集合主要测试什么功能,包括哪些测试用例,对于story文件模板中的case数量,测试人员可以通过交互界面进行修改,并且对于Case description(用例描述部分)测试人员也可以通过交互界面进行填充。每一个Scenario对应一个测试用例,其中Given部分是测试数据准备部分,如果没有可以为空;When部分是测试代码所在部分,方法名,对应测试代码中的测试方法;【】中的部分为传递的参数;Then部分是测试后的检验和校验以及测试数据清理,如果没有可以为空。Given、When和Then部分中的参数可以由测试人员通过交互界面进行填充,另外,对于Given、When和Then关键字之后的方法名,也可以给与测试人员一定自由进行自定义和修改。
图3所示的过程中,在输入要生成的story文件的文件名、清除和输入文件保存路径时,需要定位到文件名输入框和文件保存路径输入框,在定位时可以调用sikuli的API,使用sikuli的图片匹配定位功能来进行定位。
图4为本发明实施例提供的生成测试代码的方法流程图,在生成测试代码时,可以利用JSpec插件本身具有的功能,即按下“ctrl”键的同时点击story文件中的“Given”,返回story文件后按下“ctrl”键的同时点击story文件中的“When”,再返回story文件后按下“ctrl”键的同时点击story文件中的“Then”,就会生成一个文件名相同的测试代码文件,该测试代码文件中会包含大部分的测试代码框架。如图4所示,该流程包括以下步骤:
步骤401:模拟点击story文件中的“Given”后返回story文件。
本步骤中可以通过模拟键盘操作按下“ctrl”键的同时点击story文件中的“Given”,该关键字“Given”类似于一个超链接,当被点击时,后台自动生成测试代码文件并且跳转到测试代码中“Given”对应的方法,在上面所举的story文件模板格式中,跳转到测试代码文件中的方法“init data”。返回story文件时模拟键盘操作“alt+left”。
步骤402:模拟点击story文件中的“When”后返回story文件。
本步骤中可以通过模拟键盘操作按下“ctrl”键的同时点击story文件中的“When”,该关键字“When”类似于一个超链接,当被点击时,后台自动在点击“Given”时生成的测试代码文件中接续生成测试代码并且跳转到测试代码中“When”对应的方法,在上面所举的story文件模板格式中,跳转到测试代码文件中的方法“testpick”。返回story文件时模拟键盘操作“alt+left”。
步骤403:模拟点击story文件中的“Then”。
本步骤中可以通过模拟键盘操作按下“ctrl”键的同时点击story文件中的“Then”,该关键字“Then”类似于一个超链接,当被点击时,后台自动在点击“Given”时生成的测试代码文件中接续生成测试代码并且跳转到测试代码中“Then”对应的方法,在上面所举的story文件模板格式中,跳转到测试代码文件中的方法“Check result”。
如果eclipse集成的是jtester插件或Qtester而非JSpec插件,由于生成的用例驱动文件可能是wiki,而jtester或Qtester本身也不具备图4中所示的自动生成测试代码的功能,对于这种情况,可以采用的生成测试代码的方法为:加载预先设置的测试代码模板,该测试代码模板实际上是抽取了接口测试的测试代码的公共部分,而其中的自定义部分则根据wiki文件中具体的用例进行填充,在填充时,同样可以采用模拟输入设备操作的方式进行。当然,即便集成JSpec插件也可以采用这种方式生成测试代码。
在大部分的测试代码框架生成后,需要进入测试代码的方法体进行一些初始化的操作,进入测试代码的方法体的过程可以如图6中所示,包括以下步骤:
步骤601:跳转到测试代码文件后,搜索方法名以定位到具体的方法。
在图4所示流程结束后,已经跳转到测试代码文件,本步骤中,通过模拟键盘操作“ctrl+f”打开搜索窗口,输入方法名后“回车”以实现搜索方法名。
步骤602:模拟键盘操作关闭搜索窗口并跳转到方法行的最后。
本步骤可以通过模拟键盘操作“alt+f4”关闭搜索窗口,然后模拟键盘操作敲“end”键跳转到方法行的最后。
步骤603:模拟键盘操作进入方法体。
本步骤可以通过模拟键盘操作连续敲3次“Down”键进入方法体。
进入方法体后,具体进行哪些初始化的操作可以采用自定义的方式实现,在此对初始化的方式不加以限制。
另外,在本发明的上述实施例中,实例化接口对象会涉及到spring的配置文件加载和spring的bean注入,其中spring的配置文件加载位置在确定时可以通过调用sikuli提供的API进行图片匹配定位,然后在定位到的位置进行spring的配置文件记载。而spring的bean注入既可以采用上述图片匹配定位的方式,也可以采用模拟输入设备操作的方式来确定具体的注入位置。
以上是对本发明所提供方法的详细描述,下面对本发明所提供的装置进行详细描述。图7为本发明实施例提供的接口测试代码的生成装置结构图,如图7中所示,该装置可以包括确定单元00、文件生成单元10和代码生成单元20;还可以进一步包括方法体进入单元30。
其中确定单元00确定待测试接口的待测试方法。具体地,该确定单元00可以包括参数子单元01、判断子单元02和解析子单元03。
参数子单元01获取待测试对象的参数信息。该参数信息可以由测试人员实时通过交互界面输入,也可以由测试人员预先将待测试对象的参数信息写入预定的文件,参数子单元01从该预定的文件中获取待测试对象的参数信息。其中待测试对象的参数信息至少包括接口名,还可以进一步包括方法名,还可以包括用例驱动文件名和用例驱动文件的保存路径。
判断子单元02判断待测试对象的参数信息中是否只有接口名,如果是,则触发解析子单元03;如果待测试对象的参数信息中既有接口名又有方法名,则将方法名对应的方法作为待测试方法。
解析子单元03受到判断子单元02的触发时,通过模拟输入设备操作解析接口名中声明的所有方法作为待测试方法。具体地,解析子单元03具体执行以下解析操作:
通过模拟输入设备操作打开集成开发环境的打开类型窗口,例如可以通过模拟键盘操作“ctrl+shift+t”打开eclipse的打开类型窗口;
在打开类型窗口输入接口名,模拟输入设备操作进入接口名的声明文件,例如将待测试的接口名输入打开类型窗口后,模拟键盘操作“回车”进入该接口名的声明文件;
模拟输入设备操作找到声明文件声明的最后一个方法名,复制该方法名至粘贴板,例如可以模拟键盘操作“ctrl+o”查看声明文件中声明的方法,再模拟键盘操作依次敲“down”键和“end”键找到声明文件中声明的最后一个方法名;
判断当前复制的字符串是否与接口名相同,如果是,收集粘贴板中所有的方法名;否则,模拟输入设备操作找到上一个方法名,复制该方法名至粘贴板,转至执行当前复制的字符串是否与接口名相同的操作。可以通过模拟键盘操作“↑”找到上一个方法名,复制方法名至粘贴板时,模拟键盘操作“ctrl+v”,在获取粘贴板中所有的方法名时可以调用sikuli的API提供的方法tt=env.getclipboard。
然后由文件生成单元10通过模拟输入设备操作,针对待测试方法生成用例驱动文件。具体地,文件生成单元10执行以下操作来生成用例驱动文件:
模拟输入设备操作打开集成开发环境的文件新增菜单,例如可以模拟键盘操作“shift+alt+n”打开eclipse的文件新增菜单;
模拟输入设备操作选择文件新增菜单中的文件新增选项,进入文件新增窗口,例如可以模拟键盘操作输入两次“f”选择文件新增选项,然后“回车”进入文件新增窗口;
模拟输入设备操作将要生成的用例驱动文件名输入文件新增窗口,这里用户驱动文件名可以由测试人员实时输入,也可以从预先写入预定的文件的待测试对象的参数信息中获取;
模拟输入设备操作清除文件新增窗口中默认的文件保存路径,并将用例驱动文件的保存路径输入文件新增窗口,在此清除的步骤需要一系列的模拟键盘操作,包括模拟键盘操作按下“shift”键,同时敲“home”键,松开“shift”键后敲“delete”键,为了提高效率,可以将该一系列的模拟键盘操作封装为一个方法,在后续需要清除文件新增窗口中默认的文件保存路径时,调用该方法的执行即可;
加载预先设置的用例驱动文件模板,并填充用例驱动文件模板中的自定义部分。
其中在文件生成单元10执行的上述操作中,输入要生成的用例驱动文件的文件名、清除和输入文件保存路径时,需要定位到文件名输入框和文件保存路径输入框,在定位时可以调用sikuli的API,使用sikuli的图片匹配定位功能来进行定位。
接着,代码生成单元20通过模拟输入设备操作,生成用例驱动文件中各用例所驱动的测试代码。
在此需要说明的是,该装置所在的集成开发环境中集成了testNG插件或者testNG基础上的二次封装工具插件,以此将测试用例和测试代码分离,并由测试用例驱动测试代码运行。例如在eclipse中集成JSpec、jtester或Qtester等。
若在集成开发环境中集成了JSpec插件,则用例驱动文件为story文件,此时代码生成单元20可以利用JSpec插件本身具有的功能来生成测试代码,此时代码生成单元20具体执行以下操作:
模拟输入设备操作点击story文件中的关键字Given后返回story文件,例如模拟键盘操作按下“ctrl”键的同时点击story文件中的关键字“Given”,该关键字“Given”类似于一个超链接,当被点击时,后台自动生成测试代码文件并且跳转到测试代码中“Given”对应的方法,返回story文件时模拟键盘操作“alt+left”;
模拟输入设备操作点击story文件中的关键字When后返回story文件,例如模拟键盘操作按下“ctrl”键的同时点击story文件中的关键字“When”,该关键字“When”类似于一个超链接,当被点击时,后台自动在点击“Given”时生成的测试代码文件中接续生成测试代码并且跳转到测试代码中“When”对应的方法,返回story文件时模拟键盘操作“alt+left”;
模拟输入设备操作点击story文件中的关键字Then,例如模拟键盘操作按下“ctrl”键的同时点击story文件中的关键字“Then”,该关键字“Then”类似于一个超链接,当被点击时,后台自动在点击“Given”时生成的测试代码文件中接续生成测试代码并且跳转到测试代码中“Then”对应的方法。
如果集成的是jtester插件或Qtester插件,这些插件本身不具备生成测试代码的功能,此时代码生成单元20具体执行以下操作:
加载预先设置的测试代码模板,该测试代码模板实际上是抽取了接口测试的测试代码的公共部分;
根据用例驱动文件中的具体用例,模拟输入设备操作填充测试代码模板中的自定义部分。
需要说明的是,即便集成JSpec插件也可以采用这种方式生成测试代码。
在大部分的测试代码框架生成后,需要进入测试代码的方法体进行一些初始化的操作,因此方法体进入单元30具体用于执行以下操作:跳转到测试代码文件后,模拟输入设备操作搜索方法名以定位到具体的方法,例如通过模拟键盘操作“ctrl+f”打开搜索窗口,输入方法名后“回车”以实现搜索方法名;模拟输入设备操作关闭搜索窗口并跳转到方法行的最后,例如可以通过模拟键盘操作“alt+f4”关闭搜索窗口,然后模拟键盘操作敲“end”跳转到方法行的最后;模拟输入设备操作进入方法体,例如可以通过模拟键盘操作连续敲3次“Down”进入方法体;对方法体进行初始化进入方法体后,具体进行哪些初始化的操作可以采用自定义的方式实现,在此对初始化的方式不加以限制。
上述装置中各单元进行的模拟输入设备操作是通过调用具有模拟输入设备操作功能的工具所提供的API实现的,该具有模拟输入设备操作功能的工具可以是sikuli,模拟的输入设备操作可以是诸如键盘操作、鼠标操作等。
由以上描述可以看出,本发明提供的方法和装置具备以下优点:
1)将测试代码的生成过程实现了自动化,无需测试人员手工编写测试代码,提高了测试开发效率,减少人力投入,降低了人力成本。
2)测试代码的生成不受测试人员的素质影响,降低了编写接口测试代码的门槛,测试人员只需要完成测试数据的准备、参数的封装等工作。
3)经试验,通过本发明提供的方法和装置能够完成一个接口60%左右的测试代码的生成工作,将测试人员从重复性的工作中解脱出来,提高了测试效率。
4)可扩展性强,测试代码生成的整个过程对测试人员可见,测试人员可以根据测试需要进行扩展。
在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
Claims (16)
1.一种接口测试代码的生成方法,其特征在于,该方法包括:
确定待测试接口的待测试方法;
通过模拟输入设备操作,在用例驱动文件的保存路径下新增用例驱动文件,加载预先设置的用例驱动文件模板,并填充所述用例驱动文件模板中的自定义部分,以针对所述待测试方法生成用例驱动文件;
加载预先设置的测试代码模板,根据用例驱动文件中的具体用例,模拟输入设备操作填充所述测试代码模板中的自定义部分,以生成用例驱动文件中各用例所驱动的测试代码。
2.根据权利要求1所述的方法,其特征在于,该方法还包括:在集成开发环境中集成testNG插件或者testNG基础上的二次封装工具插件;
所述testNG基础上的二次封装工具包括:JSpec、jtester或Qtester。
3.根据权利要求1所述的方法,其特征在于,所述确定待测试接口的待测试方法具体包括:
获取待测试对象的参数信息;
如果所述待测试对象的参数信息中只有接口名,则通过模拟输入设备操作解析所述接口名中声明的所有方法作为所述待测试方法;
如果所述待测试对象的参数信息中既有接口名又有方法名,则将所述方法名对应的方法作为所述待测试方法。
4.根据权利要求3所述的方法,其特征在于,所述通过模拟输入设备操作解析所述接口名中声明的所有方法具体包括:
通过模拟输入设备操作打开集成开发环境的打开类型窗口;
在所述打开类型窗口输入所述接口名,模拟输入设备操作进入所述接口名的声明文件;
模拟输入设备操作找到所述声明文件声明的最后一个方法名,复制该方法名至粘贴板;
判断当前复制的字符串是否与所述接口名相同,如果是,收集粘贴板中所有的方法名;否则,模拟输入设备操作找到上一个方法名,复制该方法名至粘贴板,转至执行所述当前复制的字符串是否与所述接口名相同的步骤。
5.根据权利要求1所述的方法,其特征在于,所述在用例驱动文件的保存路径下新增用例驱动文件包括:
模拟输入设备操作打开集成开发环境的文件新增菜单;
模拟输入设备操作选择所述文件新增菜单中的文件新增选项,进入文件新增窗口;
模拟输入设备操作将要生成的用例驱动文件名输入所述文件新增窗口;
模拟输入设备操作清除所述文件新增窗口中默认的文件保存路径,并将所述用例驱动文件的保存路径输入所述文件新增窗口。
6.根据权利要求2所述的方法,其特征在于,若在集成开发环境中集成JSpec插件,则所述用例驱动文件为story文件;
所述生成用例驱动文件中各用例所驱动的测试代码具体包括:
模拟输入设备操作点击story文件中的关键字Given后返回story文件;
模拟输入设备操作点击story文件中的关键字When后返回story文件;
模拟输入设备操作点击story文件中的关键字Then。
7.根据权利要求1所述的方法,其特征在于,该方法还包括:
跳转到测试代码文件后,模拟输入设备操作搜索方法名以定位到具体的方法;
模拟输入设备操作关闭搜索窗口并跳转到方法行的最后;
模拟输入设备操作进入方法体;
对方法体进行初始化。
8.根据权利要求1至7任一权项所述的方法,其特征在于,所述模拟输入设备操作是通过调用具有模拟输入设备操作功能的工具所提供的API实现的。
9.一种接口测试代码的生成装置,其特征在于,该装置包括:
确定单元,用于确定待测试接口的待测试方法;
文件生成单元,用于通过模拟输入设备操作,在用例驱动文件的保存路径下新增用例驱动文件,加载预先设置的用例驱动文件模板,并填充所述用例驱动文件模板中的自定义部分,以针对所述待测试方法生成用例驱动文件;
代码生成单元,用于加载预先设置的测试代码模板,根据用例驱动文件中的具体用例,模拟输入设备操作填充所述测试代码模板中的自定义部分,以生成用例驱动文件中各用例所驱动的测试代码。
10.根据权利要求9所述的装置,其特征在于,该装置所在的集成开发环境中集成了testNG插件或者testNG基础上的二次封装工具插件;
所述testNG基础上的二次封装工具包括:JSpec、jtester或Qtester。
11.根据权利要求9所述的装置,其特征在于,所述确定单元具体包括:
参数子单元,用于获取待测试对象的参数信息;
判断子单元,用于判断所述待测试对象的参数信息中是否只有接口名,如果是,则触发解析子单元;如果所述待测试对象的参数信息中既有接口名又有方法名,则将所述方法名对应的方法作为所述待测试方法;
解析子单元,用于受到所述判断子单元的触发时,通过模拟输入设备操作解析所述接口名中声明的所有方法作为所述待测试方法。
12.根据权利要求11所述的装置,其特征在于,所述解析子单元具体用于:
通过模拟输入设备操作打开集成开发环境的打开类型窗口;
在所述打开类型窗口输入所述接口名,模拟输入设备操作进入所述接口名的声明文件;
模拟输入设备操作找到所述声明文件声明的最后一个方法名,复制该方法名至粘贴板;
判断当前复制的字符串是否与所述接口名相同,如果是,收集粘贴板中所有的方法名;否则,模拟输入设备操作找到上一个方法名,复制该方法名至粘贴板,转至执行所述当前复制的字符串是否与所述接口名相同的操作。
13.根据权利要求9所述的装置,其特征在于,所述文件生成单元具体用于:
模拟输入设备操作打开集成开发环境的文件新增菜单;
模拟输入设备操作选择所述文件新增菜单中的文件新增选项,进入文件新增窗口;
模拟输入设备操作将要生成的用例驱动文件名输入所述文件新增窗口;
模拟输入设备操作清除所述文件新增窗口中默认的文件保存路径,并将所述用例驱动文件的保存路径输入所述文件新增窗口;
加载预先设置的用例驱动文件模板,并填充所述用例驱动文件模板中的自定义部分。
14.根据权利要求10所述的装置,其特征在于,若在集成开发环境中集成了JSpec插件,则所述用例驱动文件为story文件;
所述代码生成单元具体用于:
模拟输入设备操作点击story文件中的关键字Given后返回story文件;
模拟输入设备操作点击story文件中的关键字When后返回story文件;
模拟输入设备操作点击story文件中的关键字Then。
15.根据权利要求9所述的装置,其特征在于,该装置还包括:方法体进入单元,用于跳转到测试代码文件后,模拟输入设备操作搜索方法名以定位到具体的方法;模拟输入设备操作关闭搜索窗口并跳转到方法行的最后;模拟输入设备操作进入方法体;对方法体进行初始化。
16.根据权利要求9至15任一权项所述的装置,其特征在于,所述模拟输入设备操作是通过调用具有模拟输入设备操作功能的工具所提供的API实现的。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410040301.7A CN104809056B (zh) | 2014-01-27 | 2014-01-27 | 一种接口测试代码的生成方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410040301.7A CN104809056B (zh) | 2014-01-27 | 2014-01-27 | 一种接口测试代码的生成方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104809056A CN104809056A (zh) | 2015-07-29 |
CN104809056B true CN104809056B (zh) | 2018-10-02 |
Family
ID=53693900
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410040301.7A Active CN104809056B (zh) | 2014-01-27 | 2014-01-27 | 一种接口测试代码的生成方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104809056B (zh) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106610894A (zh) * | 2015-10-26 | 2017-05-03 | 阿里巴巴集团控股有限公司 | 接口的测试方法及装置 |
CN107015903B (zh) * | 2016-01-27 | 2021-08-10 | 菜鸟智能物流控股有限公司 | 一种界面测试程序的生成方法、装置及电子设备 |
CN106528425B (zh) * | 2016-11-18 | 2019-02-22 | 南京南瑞继保电气有限公司 | 一种用于微处理器的平台化插件自动测试方法 |
CN107402884A (zh) * | 2017-07-31 | 2017-11-28 | 深圳乐信软件技术有限公司 | 生成接口测试代码的方法及装置 |
CN107729228A (zh) * | 2017-08-24 | 2018-02-23 | 北京网众共创科技有限公司 | 接口测试方法、装置、存储介质和处理器 |
CN107677301B (zh) * | 2017-10-10 | 2019-11-05 | 四川国信慧通电气技术有限公司 | 监控设备检测方法与装置 |
CN110162310B (zh) * | 2018-02-12 | 2022-03-01 | 腾讯科技(深圳)有限公司 | 插件接口测试方法及装置、计算机设备及存储介质 |
CN108427646B (zh) * | 2018-04-13 | 2021-11-16 | 中国民航信息网络股份有限公司 | 基于Appium的安卓App自动化测试框架构建方法和装置 |
CN108628750B (zh) * | 2018-05-16 | 2021-11-05 | 无线生活(杭州)信息科技有限公司 | 一种测试代码处理方法及装置 |
CN108809998A (zh) * | 2018-06-19 | 2018-11-13 | 北京易途客信息技术有限公司 | 一种接口接入方法及装置 |
CN110196809B (zh) * | 2019-05-30 | 2023-10-24 | 贝壳找房(北京)科技有限公司 | 接口测试方法及装置 |
CN110309071B (zh) * | 2019-06-27 | 2023-01-24 | 杭州数梦工场科技有限公司 | 测试代码的生成方法及模块、测试方法及*** |
CN113688592A (zh) * | 2021-08-12 | 2021-11-23 | 华东计算技术研究所(中国电子科技集团公司第三十二研究所) | 基于驱动中间件的SoC芯片实现***、方法、介质及设备 |
CN114546858B (zh) * | 2022-02-23 | 2024-04-30 | 霖久智慧(广东)科技有限公司 | 基于物业行业的接口自动化测试平台 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6421822B1 (en) * | 1998-12-28 | 2002-07-16 | International Business Machines Corporation | Graphical user interface for developing test cases using a test object library |
CN1866221A (zh) * | 2006-02-27 | 2006-11-22 | 华为技术有限公司 | 一种软件接口测试方法和装置 |
WO2008012172A1 (en) * | 2006-07-27 | 2008-01-31 | International Business Machines Corporation | Automatic globalization verification testing for user interfaces |
CN101576843A (zh) * | 2008-05-07 | 2009-11-11 | 阿里巴巴集团控股有限公司 | 一种测试应用程序接口的方法和装置 |
CN102693183A (zh) * | 2012-05-30 | 2012-09-26 | 瑞斯康达科技发展股份有限公司 | 一种实现软件自动化测试的方法及*** |
CN103136095A (zh) * | 2011-11-28 | 2013-06-05 | 阿里巴巴集团控股有限公司 | 一种测试应用程序接口的方法、装置及*** |
-
2014
- 2014-01-27 CN CN201410040301.7A patent/CN104809056B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6421822B1 (en) * | 1998-12-28 | 2002-07-16 | International Business Machines Corporation | Graphical user interface for developing test cases using a test object library |
CN1866221A (zh) * | 2006-02-27 | 2006-11-22 | 华为技术有限公司 | 一种软件接口测试方法和装置 |
WO2008012172A1 (en) * | 2006-07-27 | 2008-01-31 | International Business Machines Corporation | Automatic globalization verification testing for user interfaces |
CN101576843A (zh) * | 2008-05-07 | 2009-11-11 | 阿里巴巴集团控股有限公司 | 一种测试应用程序接口的方法和装置 |
CN103136095A (zh) * | 2011-11-28 | 2013-06-05 | 阿里巴巴集团控股有限公司 | 一种测试应用程序接口的方法、装置及*** |
CN102693183A (zh) * | 2012-05-30 | 2012-09-26 | 瑞斯康达科技发展股份有限公司 | 一种实现软件自动化测试的方法及*** |
Also Published As
Publication number | Publication date |
---|---|
CN104809056A (zh) | 2015-07-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104809056B (zh) | 一种接口测试代码的生成方法和装置 | |
Linares-Vásquez et al. | Mining android app usages for generating actionable gui-based execution scenarios | |
Joorabchi et al. | Real challenges in mobile app development | |
KR102443654B1 (ko) | 소스 코드에서 작동하는 소프트웨어 도구를 위한 기계 학습 모델 자동 생성 | |
US20170337116A1 (en) | Application testing on different device types | |
US9465718B2 (en) | Filter generation for load testing managed environments | |
CN104536744B (zh) | 一种自动化构建与部署代码的方法及服务器 | |
US8402434B2 (en) | Graphical user interface (GUI) script generation and documentation | |
CN108399124A (zh) | 应用测试方法、装置、计算机设备和存储介质 | |
CN104834600B (zh) | 一种测试Android应用控件的方法 | |
CN102667730A (zh) | 设计时调试 | |
US10162742B2 (en) | System and method for end to end performance response time measurement based on graphic recognition | |
CN107844331A (zh) | 生成引导配置文件的方法、装置及设备 | |
CN107894889A (zh) | 埋点方法、设备及计算机可读存储介质 | |
US20220107882A1 (en) | Rendering engine component abstraction system | |
Hesenius et al. | Automating UI tests for mobile applications with formal gesture descriptions | |
CN109634570A (zh) | 前后端集成开发方法、装置、设备及计算机可读存储介质 | |
Liu | Platform-independent and tool-neutral test descriptions for automated software testing | |
CN106528429A (zh) | 一种ui界面测试方法及装置 | |
Yan et al. | Widget-sensitive and back-stack-aware GUI exploration for testing android apps | |
CN103455672B (zh) | 一种fpga仿真测试用例自动化回归方法 | |
CN109101414B (zh) | 基于埋点数据的海量ui测试生成方法及其装置 | |
WO2021164189A1 (zh) | 应用场景驱动的Android应用微服务自动生成方法 | |
CN108845956A (zh) | 应用程序测试的方法和装置 | |
CN112860587A (zh) | Ui自动测试方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |