|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
ASP在国内异常流行,因为国内大多使用的是盗版的Windows和盗版的SQLServer,而ASP+COM+SQLServer实际上也是一种不错的搭配,其性能也不输于PHP+MYSQL,特别是Windows系统和SQLServer都有图形界面,比APACHE和MYSQL易于维护,因此对于不重视知识产权的国家来说也是一种不错的选择。web|程序|创立您是不是正在寻觅一种把主动测试手艺使用到Web开辟中的办法?那末不必再找了!JWebUnit就是为Web使用程序创立测试用例的一个开源框架,它能够简单地拔出到年夜多半JavaIDE中。经由过程利用一个示例使用程序,形貌了天生简便测试用例的具体步骤,软件工程师AmitTuli对JWebUnit举行了先容。
主动测试能够节俭反复实行不异测试步骤的工夫和精神。本文将先容jWebUnit,这是一组Java类,用于为Web使用程序开辟测试用例。jWebUnit是一个开源项目,能够在BSD允许下收费取得。我将先容怎样下载JWebUnit库、设置Eclipse平台来开辟jWebUnit测试用例,和怎样构建一个示例测试用例。
JWebUnit简介
JWebUnit以HttpUnit(一个举行Web使用程序主动测试的Java库)和JUnit单位测试框架为基本(请参阅参考材料)。jWebUnit供应了导航Web使用程序的初级API,并组合了一组断言,用它们来考证链接导航、表单输出项和提交、表格内容和其他典范商务Web使用程序特征的准确性。jWebUnit以JAR文件情势供应的,能够很简单地将它拔出年夜多半IDE中,jWebUnit也包括其他需要的库。
用HttpUnit举行测试
对Web使用程序主动举行测试意味着跳过Web扫瞄器,经由过程程序来处置Web站点。起首,我要先容HttpUnit(JWebUnit的构建块之一)是怎样简化这项事情的。HttpUnit能够摹拟帧、javascript、页面重定向cookie,等等。在将HttpUnit用于JUnit时,它能够敏捷地对Web站点的功效举行考证。
清单1显现了一个用HttpUnit编写的测试用例,它试图单击HttpUnit主页上的“Cookbook”链接:
清单1.单击HttpUnit主页上Cookbook链接的HttpUnit代码
- 1publicclassHttpUnitTest{2publicstaticvoidmain(String[]args){3try{4WebConversationwc=newWebConversation();5WebRequestrequest=newGetMethodWebRequest("http://httpunit.sourceforge.net/index.html");6wc.setProxyServer("your.proxy.com",80);7WebResponseresponse=wc.getResponse(request);8WebLinkhttpunitLink=response.getFirstMatchingLink(WebLink.MATCH_CONTAINED_TEXT,"Cookbook");9response=httpunitLink.click();10System.out.println("Testsuccessful!!");11}catch(Exceptione){12System.err.println("Exception:"+e);13}14}15}
复制代码 清单1中的代码用your.proxy.com(第6行)毗连Internet。假如存在间接Internet毗连,那末能够把这个语句正文失落。第8行的语句在页面中搜刮包括文本Cookbook的Web链接。第9行的语句用于单击这个链接。假如找到链接,那末用户会看到TestSuccessful!这条动静。
用JWebUnit举行的测试更复杂
清单2的测试用例用JWebUnitAPI实行和清单1不异的义务:
清单2.单击HttpUnit主页上Cookbook链接的JWebUnit代码
- 1publicclassJWebUnitTestextendsWebTestCase{2publicstaticvoidmain(String[]args){3junit.textui.TestRunner.run(newTestSuite(JWebUnitTest.class));4}5publicvoidsetUp(){6getTestContext().setBaseUrl("http://httpunit.sourceforge.net");7getTestContext().setProxyName("webproxy.watson.ibm.com");8getTestContext().setProxyPort(8080);9}10publicvoidtestSearch(){11beginAt("/index.html");12clickLinkWithText("Cookbook");13}14}
复制代码
假如没注重清单2中特定于JUnit的代码,那末您能够看到,测试用例如今变得相称整齐、简洁。必要检察的主要的行是第6行、第11行和第12行。
在第6行,基础URL被设置到HttpUnit的主页中。第11行用绝对路径/index.html毗连站点。第12行用于单击页面上具有文本Cookbook的链接。假如链接无效,那末JUnit会呈报乐成;不然,JUnit会呈报非常。
JWebUnitAPI:进一步察看
每一个JWebUnit测试的中心都是net.sourceforge.jwebunit.WebTestCase类,它代表测试用例。每一个测试用例都必需是从这个类扩大而来。(net.sourceforge.jwebunit.WebTestCase类自己则是从junit.framework.TestCase类扩大而来的,它在JUnit中代表测试用例。)表1形貌了这个类的一些经常使用办法:
表1.net.sourceforge.jwebunit.WebTestCase类的主要办法另外一个主要的类是net.sourceforge.jwebunit.TestContext。它为测试创立高低文。能够用这个类来处置像cookie、会话和受权之类的信息。表2显现了这个类的一些主要办法:
表2.net.sourceforge.jwebunit.TestContext类的主要办法
下载jWebUnit,在Eclipse中设置jWebUnit
JWebUnit是用纯Java代码完成的,以是能够以JAR文件的情势取得它(请参阅参考材料,从中取得下载链接)。在完成下载以后,请按以下步骤在Eclipse平台上设置JWebUnit库:
把下载的文件jwebunit-1.2.zip开释光临时目次中(假定是C: emp)。
在Eclipse中创立新Java项目,将其定名为jWebUnit。
右击PackageExplorer视图中的jWebUnit项目,然后选择Properties。
单击JavaBuildPath。单击Libraries标签中的AddExternalJARs。
扫瞄到C: empjwebunit-1.2lib目次,选择这个目次中的一切JAR文件。
单击OK。
如今能够在Eclipse中的jWebUnit项面前目今开辟jWebUnit测试用例了。构建示例使用程序
如今就能够检察jWebUnitAPI的实践使用了。我将带您研讨一个示例使用程序,匡助您更好地舆解jWebUnit的真正能力。这个使用程序是一个测试用例,用于翻开一个Google搜刮页面并搜刮文本HttpUnit。使用程序必要测试以了局景:
翻开Google主页http://www.google.com。
断定该页包括一个名为q的表单位素。(在Google的主页上,名为q的文本框是承受用户查询输出的文本框。)使用程序用这个元素输出搜刮参数。
在搜刮文本框中输出字符串HttpUnitHome,并提交表单。
取得了局页,并断定该页面包括的链接中包括文本HttpUnitHome。
单击包括文本HttpUnitHome的链接。
如今测试场景已停当,能够编写Java使用程序,用jWebUnit完成这些需求了。
第一步是声明一个从WebTestCase扩大而来的类,如清单3所示:
清单3.声明测试用例类
- publicclassGoogleTestextendsWebTestCase{staticStringsearchLink="";}
复制代码
正如我在后面提到过的,jWebUnit请求每一个测试用例都是从WebTestCase中扩大而来的。searchLink保留传进的搜刮参数。这个值以命令行参数的情势传送给测试用例。
下一步是声明出口点――main()办法,如清单4所示:
清单4.main()办法
- publicstaticvoidmain(String[]args){searchLink=args[0];junit.textui.TestRunner.run(newTestSuite(GoogleTest.class));}
复制代码 main()办法挪用junit.textui.TestRunner.run()实行JTest测试用例。由于必要运转GoogleTest测试用例,以是,作为参数传送给run()办法的测试套件接纳GoogleTest.class作为参数。
接上去,JTest挪用setUp()办法来设置基础URL和代办署理,如清单5所示:
清单5.设置- publicvoidsetUp(){getTestContext().setBaseUrl("http://www.google.com");getTestContext().setProxyName("proxy.host.com");getTestContext().setProxyPort(80);}
复制代码 清单5把基础URL设置为http://www.google.com。这意味着测试用例的启动是相对这个URL的。上面两个语句设置毗连到Internet的代办署理主机和代办署理端口。假如是间接毗连到Internet,那末能够疏忽代办署理设置语句。
如今入手下手扫瞄站点并输出搜刮参数。清单6显现了会见Web页面,然后测试一切场景的代码:
清单6.测试一切场景
- publicvoidtestSearch(){beginAt("/");assertFormElementPresent("q");setFormElement("q","HttpUnit");submit("btnG");assertLinkPresentWithText(searchLink);clickLinkWithText(searchLink);}
复制代码 清单6的代码毗连到基础URL,并相对/入手下手扫瞄。然后它判定页面中包括一个名为q的表单位素――q是Google主页上查询输出文本框的称号。下一条语句用值HttpUnit设置名为q的文本框。
再下一条言语提交表单上名为btnG的提交按钮。(在Google的主页上,名为btnG的按钮是标签为GoogleSearch的按钮。)表单是在这个对话中提交的,下一页列出搜刮了局。在了局页面上,代码起首反省是不是有一个链接的文本是HttpUnitHome。假如该链接不存在,那末测试就以AssertionFailedError失利。假如该链接存在,则测试实行的下一个操纵是单击链接。
运转示例使用程序
如今把示例使用程序投进利用傍边:
下载示例使用程序j-webunitsample.jar。
在一个目次中解紧缩j-webunitsample.jar。比方,假如把它开释到C: emp中,那末就要把源文件和类文件放在C: empcomjweb est中,而setclasspth.bat则放在C: emp中。
编纂setclasspath.bat:设置JAR_BASE指向包括一切必须JAR文件的目次。比方,假如在C: emp中开释jwebunit-1.2.zip文件,那末将JAR_BASE设置为C: empjwebunit-1.2lib。
翻开命令行提醒符,切换到C: emp目次。
实行setclasspath.bat。这会设置实行测试用例所需的CLASSPATH。
用命令javacom.jweb.test.GoogleTest"HttpUnitHome"运转使用程序。
示例输入
在实行了测试用例以后,会在命令行输入一个测试用例呈报。假如测试失利,呈报看起来如清单7中所示:
清单7.带有断言失利的输入
- C: emp>javacom.jweb.test.GoogleTest"HttpUnitHwee".FTime:5.338Therewas1failure:1)testSearch(com.jweb.test.GoogleTest)junit.framework.AssertionFailedError:Linkwithtext[HttpUnitHwee]notfoundinresponse.atnet.sourceforge.jwebunit.WebTester.assertLinkPresentWithText(WebTester.java:618)atnet.sourceforge.jwebunit.WebTestCase.assertLinkPresentWithText(WebTestCase.java:244)atcom.jweb.test.GoogleTest.testSearch(GoogleTest.java:36)atsun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)atsun.reflect.NativeMethodAccessorImpl.invoke(UnknownSource)atsun.reflect.DelegatingMethodAccessorImpl.invoke(UnknownSource)atcom.jweb.test.GoogleTest.main(GoogleTest.java:19)FAILURES!!!Testsrun:1,Failures:1,Errors:0
复制代码 正如在清单7中能够看到的,能够用HttpUnitHwee作为参数来实行测试用例。这个测试用例碰到断言的中央会失利,由于了局页面中不包括带有这个文本的链接。由此也就发生了junit.framework.AssertionFailedError。
清单8实行时用HttpUnitHome作为参数。测试用例找到一个带有这个文本的链接,以是测试经由过程了:
清单8.乐成测试的输入
- C: emp>javacom.jweb.test.GoogleTest"HttpUnitHome".Time:6.991OK(1test)
复制代码 停止语
本文经由过程会商jWebUnit框架的一些凸起特征和最主要的类,先容怎样用它创立简便的测试用例,让您对jWebUnit框架有一个熟悉。jWebUnit另有更多特征能够用在测试用例中。它撑持测试Web页面中的链接行数。能够对字符串、表大概带有指定标签的表单输出元素是不是存在于页面长进行断言。别的,jWebUnit还能够处置cookie(比方断言存在某个cookie、删除cookie等。)测试能够对某个文本以后呈现的特定文本的链接举行单击。假如想为Web使用程序构建快而无效的测试用例,jWebUnit多是您最好的伴侣。缺点:正版成本价格贵(盗版就不说了)、不够安全,大多数服务器用windows系统,没有linux安全 |
|