RFT与Spring结合进行自动化脚本开发之一
- 格式:wps
- 大小:70.50 KB
- 文档页数:11
RFT工作原理RFT(回归测试生成技术)是一种自动化测试技术,旨在加速软件回归测试的过程。
它利用先前的测试集合和应用程序的历史版本来生成新的测试用例,以发现潜在的错误或回归问题。
RFT的工作原理基于以下几个关键步骤:1.初始测试用例收集:RFT首先需要一个初始的测试集合,该集合通常由手动编写的测试用例组成。
这些测试用例反映了软件的功能和特性,旨在覆盖各种测试场景。
2.测试用例执行:RFT通过执行初始的测试用例来获取应用程序的运行信息和覆盖率数据。
它模拟用户的各种操作,与被测程序进行交互,并记录每个测试用例的执行结果。
3.代码覆盖率分析:RFT使用代码覆盖率工具来分析被测程序的代码覆盖情况。
这些工具能够检测测试用例所访问的代码路径和执行次数。
通过分析覆盖率数据,RFT能够识别出未被覆盖或覆盖较少的代码块。
4.变异操作:RFT通过变异操作对初始测试用例进行扩充和修改。
这些变异操作可以包括参数修改、函数调用插入、操作排序变化等。
通过变异操作,RFT能够生成新的测试用例,以测试不同的场景和情况。
5.评估和选择:生成的新测试用例需要经过评估和选择,以保证其质量和有效性。
RFT可以利用一些评估准则,例如代码覆盖率、错误发现率、执行时间等,来评估和选择最佳的测试用例。
6.执行生成的测试用例:最后,RFT执行生成的测试用例来发现潜在的错误和回归问题。
执行过程中,RFT还会记录测试用例的执行结果和代码覆盖情况,以供后续的分析和优化。
RFT的工作原理可以总结为以下几点:通过收集初始的测试用例,执行和分析这些测试用例,利用覆盖率数据进行变异操作和评估选择,最终生成新的测试用例并执行。
这个过程旨在高效地发现软件中的错误和回归问题,提高测试效率和质量。
RFT的优点包括:1.自动化:RFT能够自动生成测试用例,减少了手动编写和执行测试用例的工作量。
2.高效性:RFT通过分析覆盖率和执行结果,能够优化测试用例的生成和执行过程,提高测试效率。
RFT概述RFT(Rational Functional Tester)是由IBM推出的针对Java、.Net和Web应用程序的自动化功能测试工具,拥有功能强大的编辑器并支持多种脚本语言,还集成了ScriptAssure 技术、模式匹配功能及数据驱动,以增强测试脚本的灵活性。
借助这一工具,测试人员可以轻松地录制或编写脚本来进行自动化测试,极大地提高了测试效率。
通过录制一个应用程序的测试您可以很快产生测试脚本,您还可以测试这个应用程序之中的任何对象,包括这个对象的属性和数据。
注:开始记录之前,要针对你所录的应用程序的脚本,先配置测试环境、配置测试应用程序和创建功能测试项目。
1.创建Functional Test项目文件—新建—Functional Test项目,点击弹出创建Functionnal Test项目的对话框,在该窗口需要你指定项目名称和存放该项目的路径,点击【完成】按钮,Functional Test项目创建完成。
或连接到现有项目,连接到项目后才能记录脚本。
注:如果有源控制选项可用,则不要选择将项目添加到源控制中。
如果有关联项目选项可用,则不要选择将Functional Test 项目与当前Rational 项目相关联。
2.编辑应用程序信息配置—配置应用程序进行测试,点击弹出编辑用程序信息对话框,如下图所示。
在该窗口点击【添加】按钮,在弹出的“选择应用程序种类”窗口中选择你要添加的应用程序的种类,如图所示。
然后点击【下一步】,直至完成。
3.启用环境进行测试配置—启用环境进行测试,点击弹出“启用环境”窗口,在该窗口中,你可以进行选择:注:窗口中的三个选项卡是需要用到的三个类别或领域,它们是根据您所测试的应用程序的类型而定。
(1)一般情况下,Internet Explorer是测试回放的默认浏览器,并默认被启用。
(2)选择Java选项卡,是用于测试Java应用程序的默认运行环境。
(3)如果您已经安装了Eclipse平台,那么您也可以选择Eclipse 选项卡。
RobotFramework⾃动化测试之脚本编写(⼀)接触了上⼀篇的RF环境搭建及安装,相⽐⼤家都会觉得,哇塞,为什么要做这么多,那么复杂?装那么多⼲什么有什么⽤?写脚本会不会也很复杂?其实⾸次安装的话会觉得有点蒙,也不知道安装那么多是拿来⼲什么的,没关系,后续会慢慢了解到。
第⼀步:创建测试项⽬菜单栏file----->New Project第三步:创建测试套件右键点击“测试项⽬”选择New Suite输⼊Name(⽤例名称)Type:File点击OK,第三步:创建测试⽤例右键点击“测试项⽬”选择New Test Case输⼊名称Name即可点击OK⾃动化脚本就是在右侧的表格中实现的。
当然,可能有⼈会问,这些脚本最终保存到哪⾥去了?细⼼的童鞋可能早就发现了点击测试套件,可以看到测试项⽬的保存路径因为RF框架编写基于web 的测试⽤例,所以,我们需要selenium 的库⽀持。
所以,我们在使⽤的过程中需要加载selenium2library库。
导⼊selenium2library库在“测试套件”的Edit标签页,点击“Library”按钮,弹出输⼊框,Name输⼊:Selenium2Library ,点击OK 完。
如果导⼊的库显⽰为红⾊,表⽰导⼊的库不存在。
如果是⿊⾊则表⽰导⼊成功。
有些童鞋可能不管怎么输⼊都是红⾊,那么可以找出⽬录直接复制⽂件夹的名字下⾯就可以来编写测试⽤例了,RF中按F5就可以去查找对应的需要⽤到的关键字了1:打开浏览器关键字:open browser(不分⼤⼩写)2:睡眠2S 关键字 sleep3:输⼊⽂本关键字:input text...................... “Open Browser”变蓝了,说明它是⼀个合法的关键字,后⾯有⼀个⽅框是红⾊的,表⽰这个参数不能缺省的。
通过说明信息中,我发现它需要⼀个url 地址是必填的,当然还需要指定browser (默认不填为 friefox) 更多关键的使⽤,请参考相关API ⽂档。
基于RFT的软件功能自动化测试研究张晋桂【摘要】文章对Rational Functional Tester进行了探讨和研究,基于该平台二次研发了包含对象地图库、脚本管理和任务调度三层架构的功能自动化测试框架,实现了测试脚本批量执行、任务调试、测试报告汇总、异常处理、验证点处理、日志回收以及公共类库、通用脚本等功能,可以解决实际项目中的脚本执行效率、加快结果分析和重复利用等问题,具有良好的可移植性和应用效果.【期刊名称】《江苏科技信息》【年(卷),期】2016(000)019【总页数】2页(P38-39)【关键词】Rational Functional Tester;功能自动化;测试框架【作者】张晋桂【作者单位】广东拓思软件科学园有限公司,广东广州 510663【正文语种】中文2.1 路基的维修养护方法RFT是一款基于前端页面GUI的功能自动化测试平台,工作原理就是通过配置被测试应用程序,来建立与之通信的渠道,向被测程序(或进程)的控件发出执行指令,从而使得RFT可以进而对Java,HTML,. Net,Siebel,SAP,Ajax等程序进行测试,通常可以通过简单自动录制、检测和回放用户的应用操作,来执行重复性的手工测试,主要是用于回归测试和测试同一软件产品的新版本。
RFT中的对象可以理解为前端GUI界面元素对象,包括页面按钮对象、文本框对象、数据表格对象、图片对象、标签对象、单选框对象、复选框对象、下拉列表框对象、表单对象、菜单对象、窗体对象以及组件对象等控件。
对象分为2种类型:私有对象和公共对象,每个对象都有一个或多个可以标识该对象的属性。
RFT对象的操作主要有单击、双击、选择、验证、等待等操作。
RFT中的对象地图库是一组GUI对象的集合,是测试对象的资源库,通过对象树记录对象之间的关系。
RFT中的数据对象是指测试脚本中所用到的测试数据,数据对象分为2种类型:私有数据对象和共享数据对象。
私有数据是跟单一脚本一一对应;共享数据对象则多个脚本可共用。
RFT⾃动化测试平台常见问题及解决⾃动化测试平台常见问题及解决1、回放脚本时提⽰找到相同属性的多个组件原因:页⾯存在属性相同的对象解决办法:第⼀步:在RFT中利⽤⾃定义代码查找要使⽤的对象的序号,下⾯为⾃定义代码com.rational.test.ft.object.interfaces.TestObject testObj[];com.rational.test.ft.object.interfaces.RootTestObject root = com.rational.test.ft.object.interfaces.RootTestObject.getRootTestObject();testObj=root.find(atDescendant(".属性类型", "属性值", "属性类型", "属性值"));if(testObj!=null){com.rational.test.ft.object.interfaces.GuiTestObjectgtObj=(com.rational.test.ft.object.interfaces.GuiTestObject) testObj[对象序号];gtObj.click();}第⼆步:在⾃动化测试平台中的该类型对象属性中增加序号属性值2、回放运⾏脚本时,提⽰找不到⽤例原因:执⾏引擎端脚本没有正确编译,解决办法:检查脚本中是否使⽤了⾃定义组件,将代码复制到RFT项⽬中检查语法是否正确。
3、在联创CRM系统中,回放运⾏脚本时,IE异常关闭原因:联创的OCX控件导致IE崩溃解决办法:在IE加载项中禁⽤联创的OCX控件4、回放运⾏脚本时,对象地图设置正确,但是还是提⽰找不到对象原因:该原因经常出现在页⾯跳转和DIV层切换时发⽣,页⾯跳转和DIV层切换时由于对象还没有完全加载,此时容易出现找不到对象。
IBM i GreenScreen 自动化测试方法介绍2011 年 10 月 27 日夏 梓峻软件工程师IBMIBM i 是 IBM 推出的一款中小型,多用户商业计算机系统。
在 IBMi 系统上有大量基于绿屏终端的应用产品,对这些产品的自动化测试需求普遍存在。
本文以 RFTExtension 对基于终端应用程序的自动化测试为基础,通过对绿屏终端和绿屏命令的研究分析,设计出一种自动化测试方法,使自动化测试过程能够简单、直观,使测试人员能专注测试用例设计,为实现 IBMi 上基于绿屏的产品自动化测试提供一种思路。
IBM i 系统绿屏测试IBM i 系统将文件表示为对象,对象管理均通过绿屏 (Green Screen) 实现,且执行速度快。
因此,了解、掌握好绿屏操作,能够提高用户或管理人员在 IBM i 系统中的工作效率。
同时,借助绿屏我们可以进行产品功能的回归测试,发现产品问题,提高产品的稳定性和可靠性。
IBM i 产品在绿屏终端提供丰富的命令来完成各种任务。
但是,命令执行流程各不相同,操作过程需要人为控制,执行结果依靠人为判断。
因此,人为干预测试流程导致了回归测试效率较低,测试误差也相对较多。
自动化测试则能够有效避免人为干预带来的问题。
它能够减少人为干预因素,降低不利影响,提高测试效率和准确率。
所以,结合 IBM i 绿屏和产品功能测试需求,实现 IBM i 绿屏自动化测试有着重大的意义。
Rational Functional Tester Extension for Terminal-Based Applications Rational Functional Tester(RFT) 是一款回归测试工具,能够进行自动化测试,支持多个领域的应用程序测试,如 Java、Siebel、SAP 等。
它侧重 GUI 方面的测试,能够模拟用户的使用行为,进行复杂测试。
Rational Functional Tester Extension for Terminal-Based Applications 是 RFT 的一个补充和扩展,它可以用来模拟终端程序,如 3270 (zSeries™) 系统终端和 5250 (iSeries™) 系统终端,使得 RFT Extension 能够基于终端应用程序进行自动化测试,扩大 RFT 的应用范围。
rf自动化测试流程English Answer:RF Automation Testing Process.1. Test Planning.Define the scope and objectives of the testing.Identify the test cases to be automated.Prioritize the test cases based on risk and importance.2. Script Development.Create test scripts using an RF automation framework.Use keywords and libraries to simplify script development.Integrate test data and perform parameterization.3. Environment Setup.Configure the test environment to support RF automation.Install the necessary software and drivers.Ensure compatibility with the system under test.4. Test Execution.Run automated test scripts.Manage test execution using tools or frameworks.Capture and analyze test results.5. Result Analysis.Review test results and identify failures.Perform root cause analysis to determine the cause of failures.Report test findings to stakeholders.6. Maintenance and Improvement.Maintain and update test scripts as the system evolves.Improve test coverage and efficiency by optimizing scripts.Continuously improve the automation process to maximize its benefits.Key Benefits of RF Automation Testing.Increased Efficiency: Automating tests saves time and effort, allowing teams to focus on higher-value tasks.Improved Accuracy: Automated tests are less prone tohuman errors, leading to more reliable results.Enhanced Coverage: Automation enables testing of a wider range of scenarios, increasing test coverage.Faster Feedback: Automated tests provide instant feedback, enabling developers to quickly identify and fix issues.Reduced Costs: Automation reduces manual testing costs and improves developer productivity.Best Practices for RF Automation Testing.Use a modular and reusable framework.Employ data-driven testing to increase flexibility.Maximize test coverage with negative testing and edge cases.Implement error handling and logging mechanisms.Continuously optimize scripts for performance. Chinese Answer:射频自动化测试流程。
⾃动化框架RF什么是RF:⾃动化测试⼯具功能测试技术,基于Selenium来实现⾃动化功能测试,⽽RobotFrameWork,简称RF,就是基于Python+Selenium来实现的⾃动化测试框架,⾃动化测试⼯具。
RF纯粹是基于关键字驱动与数据驱动相结合的⼀种⾃动化测试框架,能够完美地对WebUI,APPUI,接⼝来实现⾃动化功能测试,不需要写代码,本⾝是基于RF⾃定义的⼀种表格编写语法的形式来实现的⼯具的⾃动化测试,现在能够完全⽀持python3,Ride+robotframework+python的环境部署之前写的⾃动化脚本环境是python27,后来⽤⼜想重新写脚本的时候发现py27已经不再维护了,就想着那就升级,早晚的事,结果在搭建环境的时候各个版本的匹配让我折腾了⼀⼩天,现在把我的环境直接提供给⼤家,少⾛弯路哦~1.⾸先我使⽤的是python是3.8版本的,双击安装就可以,注意python安装的路径要避免包含空格,否则会影响后⾯的的配置在这⾥插⼊图⽚描述2.python安装完后,需要配置两个环境变量,因为我的安装⽬录D:\Python,所以需要将我的环境变量是:D:\Python;D:\Python\Scripts1)配置环境变量:找到“我的计算机”-右键属性-⾼级系统设置-环境变量,系统变量中找到path,将上⾯两个⽬录放到环境变量中,注意不要有中⽂符号。
2)运⾏窗⼝中在任意位置敲 python,出现以下界⾯,代表python安装成功3.通过pip命令安装以下安装包,pip是python⾃带的安装⼯具。
(注意版本,版本不匹配,容易出现很多问题)pip安装命令,例:pip install robotframeworkpip install robotframework-ride以上是基本库使⽤,如果需要,以此类推,进⾏安装其他⾃⼰所需要的库安装的时候可能会遇到这样的问题:在这⾥插⼊图⽚描述看绿⾊的部分,已经提⽰你的版本太低,需要升级到pip版本,那我们就通过“python -m pip install --upgrade pip”进⾏升级pip后再进⾏安装,⼀切就顺利通过了~~~4.全部安装完后,可能ride的快捷⽅式没有创建在桌⾯上,那我们可以⼿动创建⼀个快捷⽅式:1)桌⾯⿏标右击,在这⾥插⼊代码⽚选择新建-快捷⽅式2)在请键⼊对象的位置输⼊这⼀⾏命令:C:\Python\pythonw.exe -c “from robotide import main; main()”注意:前⾯的c是Python所在⽬录的路径。
Spring具有强大的功能:Ioc,可以实现在xml中把一个测试对象注入到另一个测试对象中,再加上可以利用RFT的find方法可以把spring的配置文件配置成一张RFT测试对象地图。
目前,大部分自动化脚本开发者利用RFT的测试对象地图管理测试脚本的测试对象,RFT 的测试对象地图有两种类型:公有测试对象地图和私有测试对象地图。
(1)大部分脚本采用的都是私有测试对象地图,如果被测试的程序顶层对象发生变化,这样每个脚本关联的测试对象地图都要进行修改,之所以这样,有一个原因:在RFT中测试对象地图不能够继承(仅仅可以合并),如果两个测试对象地图之间可以进行继承,这样把公用的测试对象放在父测试对象地图中,其他的测试对象地图继承这个公用的测试对象地图(同时继承公有的测试对象),如果被测试程序顶层框架发生变化,仅仅只修改父测试对象地图就可以了,但是目前RFT中不能实现(据我了解)。
(2)RFT中还有一种类型的测试对象地图是公有的测试对象地图,公有的测试对象地图可以实现公用的测试对象重复使用,如果测试对象是一模一样的,RFT在公有的测试对象地图中只保留此测试对象的一个实例,但是把多个测试对象都插入到一个测试对象地图中,同样又面临着难以管理的困难。
(3)另外,RFT中的测试对象地图与脚本紧紧的耦合,如果程序即使发生很小的变动,也要更新测试对象地图,修改脚本等等。
(4)一个spring配置文件可以被另一个spring文件import进来。
这样可以把公有的测试对象放在一个spring配置文件中,然后有其他的spring配置文件进行导入,可以实现测试对象地图(spring的配置文件)的继承。
另外,在spring的配置文件中,可以注入一个对象的属性,这样可以人工的更改这个测试对象的父框架,另外可以可以注入测试对象的识别属性,这样可以进行人为的进行测试对象识别属性的更改(这样可以更好的应对被测试程序的变化)。
例如:xml 代码<!--从classpath(类路径)中导入base-test-object-map.xml文件可以使用base-test-object-map.xml文件中定义的bean--><!--导入时候要包含完整的包名--><import resource="classpath:pkg/base-test-object-map.xml"/><!--设置待查找对象的识别属性格式:propertyName-propertyValue--><property name="objectProperties"><list><!--属性名称和属性精确匹配用=--><!--属性名称和属性用正则表达式匹配用:--><value>.class=Html.FORMvalue>然后是怎么使用spring配置文件中的测试对象<value>.name:.*Formvalue>list>property><!--设置从什么对象开始查找注入父测试对象--><!--browserTestObject 引用的是base-test-object-map.xml文件中已经定义的bean--><property name="parentTestObject"><ref bean="browserT estObject"/>property>在脚本中引用测试对象通过如下语句:java 代码TextGuiTestObject text_userName = new TextGuiTestObject((TestObject)context.getBean("userNameText"));text_userName.setText("system");(5)采用spring管理测试对象,也不是说一劳永逸的,如果被测试程序发生变化,避免不了的也要修改spring配置文件。
但是,至少比RFT管理测试对象地图的修改量要小的多。
(6)采用spring管理测试对象也有以下缺点:(1)需要测试脚本开发者有比较高的编程技能(熟悉springIoc基本配置和对RFT API 比较熟悉)(2)被测试程序结构规范,最好每个HTML元素都有其名字,还有每次修改程序,如果HTML元素名称能不修改最后就不修改(RFT可以通过组件名称查找对象)还有就是按钮上面的文本,采用RFT管理测试对象地图也有此要求。
(3)要求对被测程序的组件结构有充分了解(可以通过RFT测试地图了解)(4)开发采用spring管理测试对象地图的脚本比开发有RFT管理的测试对象地图时间要长的多,但是带来的好处也是明显的。
(5)测试对象执行动作的速度也没有RFT管理的测试对象地图快。
base-test-object-map.xml 代码xml 代码<!--sp-->xml version="1.0" encoding="gb2312"?><!--CTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" </sp-->"/dtd/spring-beans.dtd"><beans><!--注册com.rational.test.ft.script.Property属性编辑器--><bean id="customEditorConfigurer" class="org.springframework.beans.factory.config.CustomEditorConfigurer"><property name="customEditors"><map><entry key="com.rational.test.ft.script.Property"><bean class="pkg.TestObjectPropertyEditor"/>entry>map>property>bean><!--实例化pkg.BaseTestObjectScript类--><bean id="baseTestObjectScript" class="pkg.BaseTestObjectScript"/><!--调用baseTestObjectScript中的非静态方法getBrowserTestObject产生一个BrowserT estObject测试对象--><bean id="browserT estObject"factory-bean="baseTestObjectScript"factory-method="getBrowserTestObject"singleton="false"/><!--调用baseTestObjectScript中的非静态方法getDocumentTestObject产生一个DocumentT estObject测试对象--><bean id="documentT estObject"factory-bean="baseTestObjectScript"factory-method="getDocumentTestObject"singleton="false"/>beans>base-test-object-map.xml 可以作为公有的测试对象地图,其中customEditorConfigurer向容器注册了一个属性编辑,pkg.BaseT estObjectScript是一个RFT脚本,此脚本有getBrowserTestObject()和documentTestObject(),可以在这个类中放入基本的测试对象,通过Spring将这些对象封装为bean, 然后有其他的spring配置文件来import,这样就实现了对象的继承。
pkg.BaseTestObjectScript的代码如下:java 代码package pkg;import resources.pkg.BaseTestObjectScriptHelper;import com.rational.test.ft.*;import com.rational.test.ft.object.interfaces.*;import com.rational.test.ft.object.interfaces.siebel.*;import com.rational.test.ft.script.*;import com.rational.test.ft.value.*;import com.rational.test.ft.vp.*;public class BaseTestObjectScript extends BaseTestObjectScriptHelper{public void testMain(Object[] args){}public BrowserT estObject getBrowserTestObject(){return browser_htmlBrowser(document_H(),DEFAULT_FLAGS);}public GuiTestObject getDocumentTestObject(){return document_H();}}pkg.TestObjectPropertyEditor代码如下,其中如果用精确匹配就用=作为分隔符,如果是通过正则表达式匹配就通过:作为分隔符,然后在程序内部就会做正则表达式的转换。
java 代码package pkg;import com.rational.test.ft.script.Property;import java.beans.PropertyEditorSupport;import java.util.StringT okenizer;import com.rational.test.ft.value.RegularExpression;public class TestObjectPropertyEditor extends PropertyEditorSupport{public void setAsText(String text){String delimiter = null;Object propValue = null;if(text == null || text.length() < 1 || (text.indexOf(EQUAL_MARK) == -1 && text.indexOf(COLON) == -1)){throw new IllegalArgumentException("识别属性为空或格式不正确=表示进行精确匹配:表示使用正则表达式匹配");}if(text.indexOf(EQUAL_MARK) != -1){delimiter = EQUAL_MARK;}else if(text.indexOf(COLON) != -1){delimiter = COLON;}//解析字符串StringTokenizer st = new StringTokenizer(text, delimiter);String name = st.nextToken();String value = st.nextToken();propValue = value;if(text.indexOf(COLON) != -1) //如果分隔符为: 将propValue设置为正则表达式{propValue = new RegularExpression(value, false);}setValue(new Property(name, propValue));}public String getAsText(){Property property = (Property)getValue();return property.getPropertyName() + "-" + property.getPropertyValue();}public final String EQUAL_MARK = "="; //"=" 表示进行精确匹配public final String COLON = ":"; //":" 表示使用正则表达式匹配}然后介绍一下其他的Spring配置文件通过导入另一个Spring配置文件实现,测试对象的继承。