




已阅读5页,还剩49页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
www.automationqa.com目录简介3安装配置5fixture gallery6基本使用8创建测试页面9创建简单样例9运行测试9组织测试9fitness命令行9fitnesse actions9fitnesse字符格式10进阶使用10编写fixturecode10columnfixture10rowfixture11actionfixture11slim测试系统13decisiontable14querytable15scripttable15框架17httpclient和fitnesse17selenium和fitnesse29插件31selenesse31cslim32initial downloads33downloadcslim from github33get cpputest33get fitnesse34building cslim34run fitnesse35create top-level page35writing the fixture36cslim_vs201039object-c slim43fitnessecpp43givwenzen(fitnesse的bdd框架)43.net slim(fitsharp)49使用方法49例子50.net fit51与自动化测试平台atms的整合51参考资料54简介官网/下载/fitnessedownload下载最新build版本:/job/fitnesse/laststablebuild/fitnesse是一个增加了可触发junit测试等附加功能的wiki程序。如果这些测试能够与业务需求结合起来,就会使业务需求更加清晰。而且,测试数据的组织更有逻辑性。使用fitnesse更 重要的是学习隐含在其中的一些思想,某些部分需求可以作为测试的一部分,这意味着,这些需求是可以测试的,或者说是可以进行校验的。利用 fitnesse,开发的工作过程可以这样描述:需求工程师使用fitnesse书写业务需求(取代了一般文档)。他试图尽可能让客户参与其中,当然这并 不是每天都能做到的。而测试者在反复研究这些文档,并从第一天起就开始提问各种问题,因为他们考虑问题的方式不同,不是在考虑“软件应该实现些什么”?而 是在考虑“怎样才能让软件出错?如何让软件中断运行?”等。开发者更象一个需求工程师,他更想知道“软件必须要完成它的功能是什么”?测试人员可以更早地开始测试,甚至在需求没有全部完成前,而且可以把测试写进业务需求中,这些测试不仅仅成为需求的一部分,而且也将成为需求评审和验收的重要过程,并具有以下几方面的重要优点:-客户也会被吸引来开始考虑关于测试的事情,通常他们还会参与到建立测试的工作中来(你也许会吃惊,他们怎么对这些这么感兴趣了。)-相关规范将更详细、更周密,因为测试总比单纯的文字要准确.-通过这种方式,可以更清晰明确地了解软件(象一个软件原形,但是功能更多),因此可以更早地考虑真实的运行场景,提供测试数据和测算结果。最后,需求将提交给开发人员,他的工作要比以前要更容易些,因为需求都附带具体的实例,因而更贴近实际需求,因此减少了被突然改变的机会。安装配置it really takes very little time and effort to get fitnesse running on your machine.click on the most recent fitnesse-standalone.jar file.if this is a brand new installation, just put it in some convenient empty directory.if this is an update, then copy it on top of the old fitnesse(-standalone).jar in your current installation.type java -jar fitnesse-standalone.jarit will ask you to be patient as it installs or updates.your shell should respond with something like this: fitnesse (v20130228) started. port: 8001 root page: fitnesse.wiki.filesystempage at ./fitnesseroot logger: none authenticator: fitnesse.authentication.promiscuousauthenticator page factory: fitnesse.responders.pagefactory page theme: bootstrap page version expiration set to 14 days.start up a browser and go to http:/localhostthe main fitnesse screen should come up. thats it. youre ready to start using fitnesse.most likely you have another web server running. web servers default to port 80, so if another one is running on your machine youll have to specify another port via a commandlineoption?. try this command:java -jar fitnesse-standalone.jar -p 8080then point your browser tohttp:/localhost:8080fixture gallery/cn/news/2008/06/fixture-gallery-2fixture gallery是一个新的开放文档型实用手册,gojko adzic刚刚在近日发布了其2.0版本。新版本增加了python示例代码,为基于python的网络应用开发人员服务。fit/fitnesse验收测试框架使用wiki作为前台界面,客户和开发人员都可以用来创建验收测试并执行。1.0版gallery只提供了java和c#的示例代码,2.0版本中,gojko给我们带来了一些新东西:2.0版最重大的变化是它将python示例代码纳入其中,涵盖此文档中提及的所有fixture和观念。 fitlibrary fixture章节为constraintfixture、 combinationfixture和calculatefixture提供了示例,为setfixture和subsetfixture提供了注解。gojko邀请所有爱好者都来为gallery做贡献:fixture gallery意在发起一个开放的文档项目,大家可以在此添加注解和想法来分享那些更好使用fit/fitnesse fixture的技巧。文档的源代码和所有的示例都存放在sourceforge。请加入到改进文档的队伍中来吧,你可以直接在sourceforge上修改,也可以修改wiki方式的fitn。fit,全称 framework for integrated test,是用于书写和执行验收测试的一个框架软件,最初由ward cunningham开发,用于java。它也可以用作协作工具,所有对项目感兴趣的人都能执行测试来检验代码是否满足了产品需求。让它区别于其他类型的 测试的特殊之处在于,记录需求的是html表格和文档而不是java或是c#代码。fitnesse被看做使用wiki做前台界面的fit,它可以帮助用 户理解相关领域知识,在基于用户故事创建验收测试的时候进行协作和沟通。fixture指的是基于fit的测试。它把html表格或是wiki页面格式的验收测试和应用程序的实际代码联系起来,测试那些代码并显示结果。fixture gallery通过三种方式提供了一套fixture:可以打印的pdf、可执行的fitnesse wiki和web站点。gojko讲到:文档针对每一种fixture都解释了其表格格式和fixture的类结构,还为使用这种fixture的具体时机提供了 意见。每一个示例都伴有对应的fit实现的源代码,包括java、.net和python三种语言,其形式易于拷贝且可以用作相似fixture的模板。其他重要的fit/fitnesse资源包括:fit网站,fitnesse网站,以及ward cunningham和rick mudgridge的最具权威性的fit方面的书籍。david hussman的陈述可以帮助你深入洞察其中奥秘。查看英文原文:fit/fitnesse fixture gallery 2.0 released相关文章:fixture gallery,一个全新的fitnesse how-to快速参考基本使用创建测试页面创建简单样例运行测试组织测试fitness命令行fitnesse actionsfitnesse字符格式进阶使用编写fixturecode在eclipse中编写测试代码(继承fixture)添加classpath编写表格运行测试columnfixture参考:http:/localhost:8001/fitnesse.userguide.fixturecode/fox1986/article/details/1522121被测代码:public class add private int a,b; public add(int a,int b) this.a = a; this.b = b; public int getsum() return a+b; 测试代码:import fit.columnfixture;public class addtest extends columnfixture public int x,y; public int result() add anum = new add(x,y); return anum.getsum(); fitnesse:!path e:workspacetestfitnessebin!|addtest |x|y|result()|1|1|2 |2|2|4 |rowfixtureactionfixture参考:http:/localhost:8001/fitnesse.userguide.slim.scripttableimport fit.fixture;public class studentfixture extends fixture private int student; /initlize the student num to zero public void init() student =0; /add the student num by i public void addstudent(int i) student=student+i; /return the student num public int count() return student; fitnesse:!path e:workspacetestfitnessebin!|action fixture |start|studentfixture|press|init |enter|add student |1|check|count |1|简单介绍一下table的设计要点:1.首先要在!path中声明我们的fixture的类路径,不要包括包在内2.先声明是action fixture3.start表示要启动那个fixture4.press是要invoke一个void,且不带参数的函数5.enter是要invoke一个带有参数的,void的函数6.check就是对于一个有返回值的函数进行期望值的比较这样在这个case中,我们先初始化环境,然后给学生人数加1,然后再统计人数看看是不是返回了1.这样一个简单的action的case就写好了slim测试系统参考:http:/localhost:8001/fitnesse.userguide.slim/wiki/fitnesse#slimslim (simple list invocation method) is an alternative to fit. the slim engine is an implementation of theslim protocol. rather than combining all the elements of wiki-based testing, the slim engine concentrates only on invoking the fixture; it runs as a separate server which is invoked remotely by the fitnesse wiki engine. the interpretation of the wiki page and the generation of the result page is now part of the wiki engine.the slim engine allows for far more light-weight fixtures which are simplepojos. these fixtures are not required to extend or use any framework classes, which simplifies their design and allows the fixture designer to concentrate on calling the system under test properly and in the simplest way possible. it also keeps the inheritance route open, allowing fixture developers to create fixture hierarchies if necessary.fit vs slim/2010/03/12/fit-vs-slim/decisiontable参考:http:/localhost:8001/fitnesse.userguide.slim.decisiontable类似于column fixtureimport java.util.list;public class shouldibuymilk private int dollars; private int pints; private boolean creditcard; public void setcashinwallet(int dollars) this.dollars = dollars; public void setpintsofmilkremaining(int pints) this.pints = pints; public void setcreditcard(string valid) creditcard = yes.equals(valid); public string gotostore() if(pints = 0 & (dollars 2 | creditcard) return yes; else return no; / the following functions are optional. if they arent declared theyll be ignored. public void execute() public void reset() public void table(listlist table) public void begintable() public void endtable() !define test_system slim !path e:workspacetestfitnessebin |shouldibuymilk |cash in wallet|credit card|pints of milk remaining|go to store?|0 |no |0 |no |10 |no |0 |yes |0 |yes |0 |yes |10 |yes |0 |yes |0 |no |1 |no |10 |no |1 |no |0 |yes |1 |no |10 |yes |1 |nope |querytable参考:http:/localhost:8001/fitnesse.userguide.slim.querytable类似于row fixturescripttable参考:http:/localhost:8001/fitnesse.userguide.slim.scripttable类似于do fixturepublic class logindialogdriver private string username; private string password; private string message; private int loginattempts; public logindialogdriver(string username, string password) this.username = username; this.password = password; public boolean loginwithusernameandpassword(string username, string password) loginattempts+; boolean result = this.username.equals(username) & this.password.equals(password); if (result) message = string.format(%s logged in., this.username); else message = string.format(%s not logged in., this.username); return result; public string loginmessage() return message; public int numberofloginattempts() return loginattempts; !define test_system slim !path e:workspacetestfitnessebin!|script |login dialog driver|bob |xyzzy |login with username|bob |and password|xyzzy |check |login message |bob logged in. |reject |login with username|bob |and password|bad password|check |login message |bob not logged in. |ensure |login with username|bob |and password|xyzzy |note |this is a comment |show |number of login attempts |$symbol= |login message |框架参考:/p-399443502.htmlhttpclient和fitnesse/gzh0222/article/details/7870107随着云计算以及soa以及敏捷软件开发的热火朝天,对于测试工程师的要求也渐渐增加。目前很多公司特别是互联网公司都已经开展接口测试这样的工作,随着web架构的日趋复杂,接口的种类也多种多样,有http,webservice,hessian,dao,message以及简单的api接口,那么如何设计或者选择一款测试框架来完成对这些接口的测试成为了一个很大的挑战。本文将简单介绍一款由java开发的开源测试框架fitnesse在接口测试方面的使用,并且列举一些简单的demo来进行演示和说明。 fitnesse是一个轻量级的开源框架,能够帮助开发和测试团队方便的定义接口验收测试(acceptance tests)。fitnesse支持多语言软件产品的测试,包括(java,c,c+,python,php)等等。具体使用可参考:/.fitnesse.userguide,因为关于fitnesse工具的介绍不是本文的主要意图。在fitnesse框架中,总共包括三个部分,wiki,test system,fixtures。其中wiki部分将展现具体的test case以及test suite甚至是test requirement,test system包括两部分slim,fit,也就是fitnesse的执行引擎,fixtures也就是真正的测试代码。fitnesse具体架构图如下所示: 从上图大家可以看到,在wiki pages上描述的是关于业务逻辑的测试用例,fitnesse将会根据你所选择的test system(slim或者fit)来解析wiki pages所传送过来的test cases, 假如我们选择了slim作为我们的test system,那么slim runners将会把网络传输过来的wiki 脚本转换为一系列的指令,然后slim executer将会解析并执行这些指令来调用我们所编写的测试代码也就是fixtures code,fixtures可以是java语言测试代码,c语言测试代码或者其他语言编写的测试代码,测试代码将会调用被测对象来执行测试用例。同理当你选择fit作为test runner的话过程也是一样,只是fit在解析wiki脚本的时候与slim不一样,fit会将wiki page作为html页面,然后通过解析html页面来调用后台的测试代码来执行测试用例,相对于slim性能上较差。另外在使用fit的时候设计测试代码也必须继承fit的类来进行编写,相对slim测试代码编写相对受限。因此我推荐大家使用slim,因为slim会更加的轻量和高效,在过去的两年时间里面我们团队一直使用slim作为test runner,并且在slim的基础做了很多二次开发和改进,相对来说比较稳定。 我们可以使用fitnesse做单元测试,集成测试,接口测试等相关测试。本文重点介绍fitnesse在接口集成测试方面的使用,废话少说,下面上主菜,在下面的例子中,将利用fitnesse slim 做testrunner,进行java环境下的接口测试。http接口测试可以利用第三方工具httpclient.jar编写http接口客户端发送request.在此我们做一个简单的http接口测试,如对infoq登录接口进行测试。首先编写测试代码如下:1. 发送post请求:(1) 设置请求参数该方法有两个参数第一个参数为map类型表示请求表单参数,第二个参数用来表示表单参数的个数,其中parameters为namevaluepair数组,并设为全局变量。(2) 发送请求该方法参数为请求url,postresponse为服务端返回值。(3) 检验返回值当然这里的postresponse可能要根据业务需求的检查点来做一些具体的解析,在本用例中不做详细的解析。接下去用fitnesse来设计测试用例并执行测试:(1) 设置表格环境变量,指定使用slim作为testsystem,并且定义classpath,便于fitnesse能够驱动测试代码执行用例。(2) 定义测试数据,如提交的表单数据用户名和密码,我们是用来测试infoq的登录功能。(3) 定义预期输出值,在登录infoq成功之后,服务器返回参数中会返回”ok”字符串,该测试用例就是用来描述是否登录成功的scenario。点击test按钮执行该case结果如下所示:该用例有一个检查点,也就是调用checkpostresponse方法的时候输入预期值ok,该方法检查返回字符串的时候找到该字符串,因此测试用例通过,测试用例pass,因此执行结果为绿色。只需要更改参数就可以设计其他测试用例,组成infoq登录功能的测试集。该节主要介绍fitnesse对http接口类型的测试。webservice接口自动化测试目前大多数互联网公司都采用soa架构,因此对于webservice接口类型的测试显得更加重要。通常测试工程师可能会借助soapui等工具进行web service的测试,不可否认soapui在进行单一webservice接口测试中具有非常好的效果,但是在接口组合测试,以及在测试结果需要进行数据库校验的情况下就显得不是那么的自动化,总是需要人工干预,这在一定程度上导致测试效率偏低,因此我们在这里介绍如何使用fitnesse这块开源产品实现接口测试自动化。首先我们简单的搭建了一个webservice demo.该webservice接口总共包括4个方法,我们要测试一下addusertotheworld和getuserfromtheworld这两个方法组成的一个scenario。首先,设计测试代码,思路和http接口测试一样,设计webservice client端发送请求,利用spring和cxf设计webservice client端,当然也可以通过cxf或者axis自带客户端生成工具产生客户端代码,但是还是建议自己动手写客户端,这样可以使代码简单清晰。spring context配置如下:客户端测试代码如下所示:我们再来看在fitnesse中如何设计case描述上述代码:测试用例描述如下所示:上图中的用例描述为调用testaddusertotheworld方法将用户加入数据库,然后调用testgetuserfromtheworld从数据库中取出相关数据,这样就作为一个组合场景调用了webservice的addusertotheworld和getuserfromtheworld这两个方法,当然还可以设计更多的场景来测试,如果用soupui的话起码得做两次操作,如果有数据库检查的需要的话可能需要3次操作,不便于做自动化。接下去我们看一下该用例执行结果。执行结果如上图所示测试执行通过。我们再来看一下用例失败的场景:我们将预期输出结果的age的值改为了27,测试用例执行失败,与实际结果不符合。database校验测试我们再来讨论一下数据库校验测试,开源社区已经有很多相关的数据库测试工具如dbunit等等,以及fitnesse/fit测试引擎的dbfit都是很优秀的工具,笔者根据dbfit的功能设计了fitnesse/slim测试引擎的dbslim,来方便对数据库测试的操作。dbslim目前有增删改查的功能,支持对oracle、mysql、sqlserver的操作,源码已上传google.code开源,具体在fitnesse中的使用场景如下所示:使用dbslim首先要设置相关环境变量,由于是使用maven做代码的管理,因此使用的时候需要配置好如上图的dependency。上图中有三个wiki table,第一个table表示所引用的包名,第二个表格是用来连接数据库,我们使用的mysql所以就调用connecttomysql方法,依次配置好数据库url和端口号,数据库名称,用户名和密码。第三个表格是对fitnesse的query表格做了一些改进,用来做数据库的查询工作,query:query是query表格的书写方法,第一个query表示是查询表格的关键字,第二个query是指调用dbslim中的query类,后面的参数为要查询的sql。表格的第二行表示要查询的字段和sql中查询字段一一对应,第三行表示期望值,由此组成了一个数据库查询操作的场景。关于fitnesse中表格的使用方法同样可以参考fitnesse官方的user guide。我们看一下执行结果:本文再此只介绍查询操作,其他操作不再一一介绍。总结本文主要介绍fitnesse在接口测试以及集成测试中的使用,从上面的demo中可以看出,使用fitnesse做接口测试,有以下几点好处:1. 测试代码编写简单,风格自由。2. 测试代码和业务逻辑分离,fitnesse上面只负责业务story的编写,测试代码和业务用例方便维护。3. 测试代码冗余度大大降低,同一段测试代码可以组成多个业务场景使用。4. fitnesse是完全有java开发的测试框架,跨平台并且便于与其他测试框架的合并,笔者曾经做过fitnesse与testng,junit以及selenium的集成。5. fitnesse执行方式多种多样,便于后期的持续集成和持续交付,以及敏捷测试,笔者以完成fitnesse测试报告的解析并且配合hudson做持续构建。6. 更重要的是fitnesse可以用于敏捷测试,这个也是fitnesse的作者,uncle bob的初衷。目前存在很多开源测试框架,但是如何选择并且设计需要根据公司的业务需求来决定,比如说互联网公司就比较适合使用fitnesse这样的测试框架来构建自动化测试框架,使得测试设计、执行以及管理都显得相对简单和清晰,并且对于测试框架的选择最重要的就是要考虑其扩展性,这个便于后期与其他工具和框架的集成,否则我们在后期的工作当中将会遇到想象不到的困难。selenium和fitnesse/thread-1774-1-1.html1. selenium简介selenium是一个用于web应用程序测试的工具,现在使用比较广泛的,是免费的。可以支持多个浏览器,对firefox的支持最好。虽然有时还是需要花时间研究一些控件的定位,但整体来讲,比较好用。开发的过程中,需要用到selenium ide,就像qtp一样可以录制在web page的操作,主要是看控件的操作顺序,然后编写java代码。还要用到firebug(firefox)或者explorer developer(ie),这两个插件的功能是一样的,可以看到web page的html,当用xpath定位控件时,需要仔细研究html。2. fitnesse简介fitnesse也是免费的,在国内似乎用的不多。这个工具基于wiki page,最大的好处是可以调用java code,我们的测试工具正是应用的这个功能。3. 自动化测试工具框架首先用selenium编写一些方法,比如打开浏览器,输入url,然后登录。然后在fitnesse中,去调用这个方法,完成操作。下面是一些示例代码:=java code=import org.openqa.selenium.webdriver;import ernal.profilesini;import org.openqa.selenium.ie.internetexplorerdriver;import com.thoughtworks.selenium.selenium;public class browser private static webdriver driver; private static selenium selenium; private static string baseurl; private static string chosenbrowser; public static webdriver getdriver() return driver; public static selenium getselenium() try thread.sleep(delay); catch (interruptedexception e) return selenium; public boolean setbrowsertotestto(string browser) throws exception if (paretoignorecase(firefox) = 0) profilesini allprofiles = new profilesini(); firefoxprofile profile = allprofiles.getprofile(default); profile.setenablenativeevents(true); browser.driver = new firefoxdriver(profile); chosenbrowser = firefox; try alerter = driver.switchto().alert(); catch (exception ex) /boop boop nothing return true; else if (paretoignorecase(internet explorer) = 0) browser.driver = new internetexplorerdriver(); chosenbrowser = internet explorer; try alerter = driver.switchto().alert(); catch (exception ex) /boop boop nothing return true; return false; public boolean setstarturlto(string url) baseurl = http:/ + url; /browser.selenium = new webdriverbackedselenium(browser.driver, baseurl); browser.driver=new internetexplorerdriver(); driver.get(baseurl); return true; public boolean setreplaydelay(long delay) browser.delay = delay; return true; =fitnesse=#调用browser类的setbrowsertotestto()和setstarturlto()!define browser_to_test internet explorer!define start_url |script|util.browser|set browser to test to |$browser_to_test|set
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 成都中医药大学2025年9月公开招聘事业编制辅导员(12人)考试参考题库及答案解析
- 四川省绵阳第一中学2025年下半年公开考核招聘教师(6人)考试参考题库及答案解析
- 2025年度“黑龙江人才周”校园引才活动绥化市妇幼保健院公开招聘工作人员10人考试参考题库及答案解析
- 2025广东佛山市三水区西南街道招聘专职护林员1人考试参考题库及答案解析
- 2024-2025学年度银行岗位考试黑钻押题附完整答案详解【有一套】
- 2025下半年云南水利水电职业学院公开招聘人员(49人)考试参考题库及答案解析
- 2025河南省城发水务有限公司巩义分公司招聘2人考试参考题库及答案解析
- 托管教育安全培训课件
- 2025年湖北大学知行学院体育场馆管理员招聘1人考试参考题库及答案解析
- 2025年自考专业(金融)练习题附答案详解(综合题)
- 卵巢癌的课件
- 北京市律师协会律师办理法律尽职调查业务操作指引
- (2025年标准)会员销售协议书
- 2025至2030中国专业图片存档和通信系统(PACS)行业项目调研及市场前景预测评估报告
- 妇产科临床路径培训课件
- 编辑出版校对试题及答案
- 2025一级造价工程师《案例分析(土建、安装)》学霸笔记
- 化工仪表基础知识培训课件
- 2025人教版八年级英语上册课文原文及翻译
- 2025年广东省茂名市《公共基础知识》事业单位招聘考试国考真题(含答案)
- 妇科常见肿瘤科普讲座
评论
0/150
提交评论