欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2022年HttpUnit基础教程 .pdf

    • 资源ID:33388139       资源大小:328.88KB        全文页数:24页
    • 资源格式: PDF        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2022年HttpUnit基础教程 .pdf

    TIB 自动化测试工作室http:/ 简介主页:http:/ HttpUnit 是 SourceForge 下面的一个开源项目,它是基于JUnit 的一个测试框架,主要关注于测试 Web 应用,解决使用JUnit 框架无法对远程Web 内容进行测试的弊端。HttpUnit让测试者可以通过Java 类和服务器进行交互,并且将服务器端的响应当作文本或者 DOM对象进行处理。HttpUnit还提供了一个模拟Servlet 容器,让你可以不需要发布Servlet,就可以对Servlet 的内部代码进行测试。为了让 HtpUnit 正常运行,需要安装JDK1.3.1 或者以上版本。Automated testing is a great way to ensure that code being maintained works. The Extreme Programming (XP) methodology relies heavily on it, and practitioners have available to them a range of testing frameworks , most of which work by making direct calls to the code being tested. But what if you want to test a web application? Or what if you simply want to use a web-site as part of a distributed application? In either case, you need to be able to bypass the browser and access your site from a program. HttpUnit makes this easy. Written in Java, HttpUnit emulates the relevant portions of browser behavior, including form submission, JavaScript , basic http authentication, cookies and automatic page redirection, and allows Java test code to examine returned pages either as text, an XML DOM, or containers of forms, tables, and links. When combined with a framework such as JUnit , it is fairly easy to write tests that very quickly verify the functioning of a web site. The same techniques used to test web sites can be used to test and develop servlets without a servlet container using ServletUnit, included in the download. 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 24 页 - - - - - - - - - HTTPUnit的工作原理:HttpUnit 通过模拟浏览器的行为,处理页面框架(frames),cookies,页面跳转( redirects)等。通过HttpUnit提供的功能,你可以和服务器端进行信息交互,将返回的网页内容作为普通文本、 XML DOM对象或者是作为链接、页面框架、图像、表单、表格等的集合进行处理。可以结合使用JUnit 框架进行测试。还可以导向一个新的页面,然后进行新页面的处理,这个功能使你可以处理一组在一个操作链中的页面。WebConversation类模拟浏览器与网站服务器进行交互WebRequest类发送请求WebResponse类接收响应getText getURL getTables getLinks、getLinkWith getForms 可以测试:1、测试某个指定的页面是否存在2、测试页面跳转是否正确3、测试页面内容是否正确4、测试链接5、测试表单HTTPUnit和其他商业工具的对比:商业工具一般使用记录、回放的功能来实现测试,但是这里有个缺陷,就是当页面设计被修改以后,这些被记录的行为就不能重用了,需要重新录制才能继续测试。举个例子:如果页面上有个元素最先的设计是采用单选框,这个时候你开始测试,那么这些工具记录的就是你的单项选择动作,但是如果你的设计发生了变化,比如说我改成了下拉选择,或者使用文本框接受用户输入,这时候,你以前录制的测试过程就无效了,必须要重新录制。而 HttpUnit因为关注点是这些控件的内容,所以不管你的外在表现形式如何变化,都不影响你已确定测试的可重用性。目前最新版本:20 May 2008 HttpUnit 1.7 released名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 24 页 - - - - - - - - - 下载并解压HttpUnit 之后,目录结构应该如下所示:httpunit +- jars / 包含创建、测试以及运行HttpUnit 所必须的 jar | +- lib / 包含 HttpUnit jar | +- doc /文档| | | +- tutorial /基于 servlet web 网站的测试优先开发的简单教程| | | +- api / javadoc | | | +- manual / 用户手册| +- examples / 采用 HttpUnit 编写的一些示例程序| +- src / HttpUnit 源代码| +- test / HttpUnit 单元测试的一些很好的例子只有 lib 和 jars 两个目录对运行HttpUnit 是必须的。至少你必须将HttpUnit jar 添加到系统的 classpath,而其他的一些jar 均为可选。HttpUnit 包括许多可选的功能。如果你并不需要这些功能,则不必在classpath中包含相应的库但至少你必须有一个HTML 解析器(JTidy 和 NekoHTML都可被支持) 和一个与jaxp兼容的解析器(在发行版中包含了xerces 2.2) 。Jar 名称所需关系相关文档nekohtml.jar HTML解析器即使是再糟糕的HTML也可适用。需要 xerces-j 2.2 或更高版本www.apache.org/andyc/neko/doc/html/index.html. tidy.jar 要求苛刻的HTML解析器。可与任何兼容jaxp 解析器配合使用 xmlParserAPIs.jar 支持 xerces-j 的通用解析API xml.apache.org xercesImpl.jar xerces-j 2.2 可执行单元xml.apache.org js.jar 支持 javascript www.mozilla.org/rhino servlet.jar servlet单 元 测 试 工 具ServletUnit 所必须的J junit.jar 运行单元测试www.junit.org mail.jar 测试文件的上传功能(运行HttpUnit 本身并不需要)J activation.jar 测试文件的上传功能(运行HttpUnit 本身并不需要)J 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 24 页 - - - - - - - - - 直接获取页面内容The very first step in any interaction with a web site is to obtain a start page. To do this, we create a WebConversationobject to play the role of the web browser. This object will store browser state such a cookies, windows, and so on. We then ask for the page by specifying the desired URL: WebConversation wc = new WebConversation(); WebResponse wr = wc.getResponse( http:/ ); System.out.println( wr.getText() ); This example will simply print out the text of the retrieved page. Obviously, given this text, it is easy to search for particular strings on the page, if that is desired. 在 Eclipse 中使用 HttpUnit :import java.io.IOException; import org.xml.sax.SAXException; import com.meterware.httpunit.*; publicclass Test 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 24 页 - - - - - - - - - /* *paramargs*/publicstaticvoid main(String args) WebConversation wc = new WebConversation(); WebResponse wr = null; try wr = wc.getResponse( http:/127.0.0.1:1080/WebTours/ ); System.out .println( wr.getText() ); catch (IOException e) e.printStackTrace(); catch (SAXException e) e.printStackTrace(); 通过 Get 方法访问页面并且加入参数例:System.out .println( 向服务器发送数据,然后获取网页内容: ); /建立一个 WebConversation实例WebConversation wc = new WebConversation(); /向指定的 URL发出请求WebRequest req = newGetMethodWebRequest( http:/127.0.0.1:1080/WebTours/nav.pl); /给请求加上参数req.setParameter(in, home); /获取响应对象WebResponse resp; try resp = wc.getResponse( req ); /用 getText方法获取相应的全部内容/用 System.out.println将获取的内容打印在控制台上System.out .println( resp.getText() ); catch (IOException e) e.printStackTrace(); catch (SAXException e) e.printStackTrace(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 24 页 - - - - - - - - - 测试 WebTours 的例子:import java.io.IOException; import org.xml.sax.SAXException; import com.meterware.httpunit.*; public class Test /* * param args */ public static void main(String args) WebConversation wc = new WebConversation(); WebResponse wr = null; String userSession = ; try wr = wc.getResponse( http:/127.0.0.1:1080/WebTours/ ); wr = wc.getResponse(http:/127.0.0.1:1080/WebTours/header.html); wr = wc.getResponse(http:/127.0.0.1:1080/WebTours/welcome.pl?signOff=1); /wr = wc.getResponse(http:/127.0.0.1:1080/WebTours/images/hp_logo.png); /wr = wc.getResponse(http:/127.0.0.1:1080/WebTours/images/webtours.png); wr = wc.getResponse(http:/127.0.0.1:1080/WebTours/nav.pl?in=home); String responseText = wr.getText() ; System.out.println( responseText ); String toFind = userSession value=; int LB = responseText.indexOf(toFind) + toFind.length(); int RB = responseText.indexOf(,LB); userSession = responseText.substring(LB,RB); System.out.println(userSession value = + userSession); catch (IOException e) e.printStackTrace(); catch (SAXException e) e.printStackTrace(); System.out.println( 向服务器发送数据,然后获取网页内容:); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 24 页 - - - - - - - - - /建立一个 WebConversation 实例/WebConversation wc = new WebConversation(); /向指定的 URL 发出请求WebRequest req = new GetMethodWebRequest( http:/127.0.0.1:1080/WebTours/login.pl); /给请求加上参数req.setParameter(userSession,userSession); req.setParameter(username,jojo); req.setParameter(password,bean); req.setParameter(JSFormSubmit,off); req.setParameter(login.x,54); req.setParameter(login.y,13); /获取响应对象WebResponse resp; try resp = wc.getResponse( req ); /用 getText 方法获取相应的全部内容/用 System.out.println 将获取的内容打印在控制台上System.out.println( resp.getText() ); catch (IOException e) e.printStackTrace(); catch (SAXException e) e.printStackTrace(); 通过 Post方法访问页面并且加入参数例:System.out .println( 向服务器发送数据,然后获取网页内容: ); /建立一个 WebConversation实例/WebConversation wc = new WebConversation(); /向指定的 URL发出请求WebRequest req = newPostMethodWebRequest( http:/127.0.0.1:1080/WebTours/login.pl); /给请求加上参数req.setParameter(userSession,userSession); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 24 页 - - - - - - - - - req.setParameter(username, jojo); req.setParameter(password, bean); req.setParameter(JSFormSubmit, off); req.setParameter(login.x, 54); req.setParameter(login.y, 13); /获取响应对象WebResponse resp; try resp = wc.getResponse( req ); /用 getText方法获取相应的全部内容/用 System.out.println将获取的内容打印在控制台上System.out .println( resp.getText() ); catch (IOException e) e.printStackTrace(); catch (SAXException e) e.printStackTrace(); 可以看到,使用Get、Post 方法访问页面的区别就是使用的请求对象不同。注, Get 和 Post 的区别:1HTTP 请求格式:在 HTTP 请求中,第一行必须是一个请求行(request line ),用来说明请求类型、要访问的资源以及使用的HTTP 版本。紧接着是一个首部(header)小节,用来说明服务器要使用的附加信息。 在首部之后是一个空行,再此之后可以添加任意的其他数据 称之为主体 (body ) 。2GET与 POST区别HTTP定义了与服务器交互的不同方法,最基本的方法是 GET 和 POST.名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 24 页 - - - - - - - - - HTTP-GET和 HTTP-POST 是使用 HTTP的标准协议动词,用于编码和传送变量名/ 变量值对参数,并且使用相关的请求语义。每个 HTTP-GET和 HTTP-POST都由一系列HTTP请求头组成, 这些请求头定义了客户端从服务器请求了什么,而响应则是由一系列HTTP应答头和应答数据组成,如果请求成功则返回应答。HTTP-GET以使用 MIME类型 application/x-www-form-urlencoded的 urlencoded文本的格式传递参数。 Urlencoding是一种字符编码,保证被传送的参数由遵循规范的文本组成,例如一个空格的编码是%20 。附加参数还能被认为是一个查询字符串。与 HTTP-GET类似, HTTP-POST 参数也是被URL编码的。然而,变量名/ 变量值不作为URL的一部分被传送,而是放在实际的HTTP请求消息内部被传送。(1)get 是从服务器上获取数据, post 是向服务器传送数据。(1)在客户端, Get 方式在通过URL 提交数据,数据在 URL中可以看到; POST方式,数据放置在HTML HEADER 内提交。(2) 对于 get 方式,服务器端用Request.QueryString获取变量的值,对于post 方式,服务器端用Request.Form获取提交的数据。(2)GET方式提交的数据最多只能有 1024 字节 ,而 POST则没有此限制 。(3)安全性问题。正如在(1)中提到,使用Get 的时候,参数会显示在地址栏上,而Post 不会 。所以,如果这些数据是中文数据而且是非敏感数据,那么使用get;如果用户输入的数据不是中文字符而且包含敏感数据,那么还是使用post 为好。注: 所谓安全的意味着该操作用于获取信息而非修改信息。幂等的意味着对同一URL 的多个请求应该返回同样的结果。完整的定义并不像看起来那样严格。换句话说,GET 请求一般不应产生副作用。从根本上讲,其目标是当用户打开一个链接时,她可以确信从自身的角度来看没有改变资源。比如,新闻站点的头版不断更新。虽然第二次请求会返回不同的一批新闻,该操作仍然被认为是安全的和幂等的,因为它总是返回当前的新闻。反之亦然。POST 请求就不那么轻松了。POST 表示可能改变名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 24 页 - - - - - - - - - 服务器上的资源的请求。仍然以新闻站点为例,读者对文章的注解应该通过POST 请求实现,因为在注解提交之后站点已经不同了(比方说文章下面出现一条注解)。下面举一个简单的例子来说明它们的区别: % If Request.QueryString(Text) Then % 通过 get 方式传递的字符串是: % If Request.Form(Text) Then % 通过 Post 方式传递的字符串是: 处理页面中的链接找到页面中的某一个链接,然后模拟用户的单击行为,获得它指向文件的内容。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 24 页 - - - - - - - - - 例:publicstaticvoid Link() System.out .println( 获取页面中链接指向页面的内容: ); /建立一个 WebConversation实例WebConversation wc = new WebConversation(); /获取响应对象WebResponse resp; try resp = wc.getResponse( http:/127.0.0.1:1080/WebTours/ ); resp = wc.getResponse(http:/127.0.0.1:1080/WebTours/header.html); resp = wc.getResponse(http:/127.0.0.1:1080/WebTours/welcome.pl?signOff=true ); resp = wc.getResponse(http:/127.0.0.1:1080/WebTours/nav.pl?in=home); resp = wc.getResponse(http:/127.0.0.1:1080/WebTours/home.html); /String respText = resp.getText();/System.out.println(respText);/获得页面链接对象WebLink link = resp.getLinks(); String linkURL = link1.getURLString(); String linkName = link1.getName(); String linkText = link1.getText(); String linkID = link1.getID(); System.out .println(linkURL:+linkURL +n); System.out .print(linkName:+linkName+n); System.out .print(linkText:+linkText+n); System.out .print(linkID:+linkID+n); /模拟用户单击事件link0.click(); /获得当前的响应对象WebResponse nextLink = wc.getCurrentPage(); /用 getText方法获取相应的全部内容/用 System.out.println将获取的内容打印在控制台上System.out .println( nextLink.getText() ); catch (IOException e) e.printStackTrace(); catch (SAXException e) e.printStackTrace(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 24 页 - - - - - - - - - 处理页面中的表格表格是用来控制页面显示的常规对象,在HttpUnit中使用数组来处理页面中的多个表格,你可以用resp.getTables()方法获取页面所有的表格对象。他们依照出现在页面中的顺序保存在一个数组里面。例:try resp = wc.getResponse( http:/127.0.0.1:1080/WebTours/welcome.pl?page=itinerary ); resp = wc.getResponse( http:/127.0.0.1:1080/WebTours/nav.pl?page=menu&in=itinerary ); resp = wc.getResponse( http:/127.0.0.1:1080/WebTours/itinerary.pl ); /获得对应的表格对象WebTable webTable = resp.getTables()0; int rowCount = webTable.getRowCount(); System.out .println(n表格行数: + rowCount); catch (SAXException e) e.printStackTrace(); catch (IOException e) e.printStackTrace(); 处理页面中的表单表单是用来接受用户输入,也可以向用户显示用户已输入信息(如需要用户修改数据时,通常会显示他以前输入过的信息),在 HttpUnit 中使用数组来处理页面中的多个表单,你可以名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 24 页 - - - - - - - - - 用 resp.getForms()方法获取页面所有的表单对象。他们依照出现在页面中的顺序保存在一个数组里面。例:WebRequest reqs = newGetMethodWebRequest( http:/127.0.0.1:1080/WebTours/welcome.pl?page=search); reqs = newGetMethodWebRequest( http:/127.0.0.1:1080/WebTours/nav.pl?page=menu&in=flights); reqs = newGetMethodWebRequest( http:/127.0.0.1:1080/WebTours/reservations.pl?page=welcome); WebResponse resps = null; try resps = wc.getResponse( reqs ); System.out .println( resps.getText() ); /获得表单对象WebForm webForms = resps.getForms(); /获得表单中所有控件的名字String pNames = webForms0.getParameterNames(); int i = 0; int m = pNames.length; /循环显示表单中所有控件的内容while(i ,LB); userSession = responseText.substring(LB,RB); System.out .println(userSession value = + userSession); catch (IOException e) e.printStackTrace(); catch (SAXException e) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 24 页 - - - - - - - - - e.printStackTrace(); WebRequest req = newPostMethodWebRequest( http:/127.0.0.1:1080/WebTours/login.pl); req.setParameter(userSession,userSession); req.setParameter(username, jojo); req.setParameter(password, bean); req.setParameter(JSFormSubmit, off); req.setParameter(login.x, 54); req.setParameter(login.y, 13); WebResponse resp = null; try resp = wc.getResponse( req ); System.out .println( resp.getText() ); catch (IOException e) e.printStackTrace(); catch (SAXException e) e.printStackTrace(); try resp = wc.getResponse( http:/127.0.0.1:1080/WebTours/welcome.pl?page=itinerary ); resp = wc.getResponse( http:/127.0.0.1:1080/WebTours/nav.pl?page=menu&in=itinerary ); resp = wc.getResponse( http:/127.0.0.1:1080/WebTours/itinerary.pl ); /获得对应的表格对象WebTable webTable = resp.getTables()0; int rowCount = webTable.getRowCount(); System.out .println(n表格行数: + rowCount); /将表格对象的内容传递给字符串数组String datas = webTable.asText(); /对表格内容进行测试String expect = A total of 1 scheduled flights.; assertEquals(expect,datas40.toString(); catch (SAXException e) e.printStackTrace(); catch (IOException e) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 24 页 - - - - - - - - - e.printStackTrace(); 对 Servlet 进行测试除了对页面内容进行测试外,有时候(比如开发复杂的Servlets 的时候),你需要对Servlet本身的代码块进行测试,这时候你可以选择HttpUnit ,它可以提供一个模拟的Servlet 容器,让你的 Servlet 代码不需要发布到Servlet 容器(如 tomcat)就可以直接测试。使用 httpunit 测试 Servlet 时,请创建一个ServletRunner 的实例,他负责模拟Servlet 容器环境。如果你只是测试一个Servlet,你可以直接使用registerServlet 方法注册这个Servlet,如果需要配置多个Servlet,你可以编写自己的web.xml ,然后在初始化ServletRunner 的时候将它的位置作为参数传给ServletRunner 的构造器。在测试Servlet 时,应该记得使用ServletUnitClient类作为客户端,他和前面用过的WebConversation 差不多, 都继承自WebClient,所以他们的调用方式基本一致。要注意的差别是,在使用ServletUnitClient时,他会忽略URL 中的主机地址信息,而是直接指向他的ServletRunner 实现的模拟环境。简单例子:1、创建被测试的Servlet:import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; publicclass HelloWorldExample extends HttpServlet publicvoid doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 24 页 - - - - - - - - - response.setContentType(text/html); PrintWriter out = response.getWriter(); out.println(); out.println(); String title = helloworld.title; out.println( + title + ); out.print

    注意事项

    本文(2022年HttpUnit基础教程 .pdf)为本站会员(C****o)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开