Web测试工具:HtmlUnit

jopen 10年前

   介绍
   对于Java程序,HtmlUnit是一个“无界面的浏览器”。以 HTML documents 为模型,且提供了一个API允许你来调用页面、填写表单、点击链接等等,就像操作一般的浏览器一样。
   其对于JavaScript的支持非常强大(且在持续提升),甚至能够支持相当复杂的Ajax库,可以通过配置来模拟你想模拟的FireFox或Internet Explorer浏览器。
   HtmlUnit常常用来测试或者检索网站的数据。
   HtmlUnit不是一般的单元测试框架,以一个特别的方法来模拟浏览器从而达到测试的目的,常常在另外的测试框架如Junit 或 TestNg中使用。
   与一些开源的工具Canoo WebTest, JWebUnit, WebDriver, JSFUnit, Celerity不同,被当做一个看不见的浏览器来使用。

特性

  • 支持HTTP和HTTPS协议
  • 支持cookies
  • 能够制定当从服务端获取响应失败时,是抛出异常还是根据内容类型返回特定的页面
  • 支持提交方法 POST和GET (HEAD, DELETE, ...)
  • 能够定制发送到服务器的请求信息报头
  • 对Html响应的支持
  • 支持代理服务器
  • 支持基本的和 NTLM 认证
  • 非常优秀的JavaScript支持

安装

把所有的Jar包放到ClassPath中即可。

JavaScript支持

     HtmlUnit提供非常棒的JavaScript支持,根据配置来模拟浏览器的工作(Firefox 和 internet explore)。运用了Rhino JavaScript 引擎。
     一些知名的用于单元测试的JavaScript库包含在HtmlUnit中:
  • jQuery 1.2.6: Full support
  • MochiKit 1.4.1: Full support
  • GWT 2.0.0: Full support
  • Sarissa 0.9.9.3: Full support
  • MooTools 1.2.1: Full support
  • Prototype 1.6.0: Very good support
  • Ext JS 2.2: Very good support
  • Dojo 1.0.2: Good support
  • YUI 2.3.0: Good support
    如果要在一个WebClient中关闭</span></span>JavaScript,调用 WebClient.setJavaScriptEnabled(false)

Htmlunit简单使用代码
import java.io.IOException;    import java.net.MalformedURLException;        import com.gargoylesoftware.htmlunit.BrowserVersion;    import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;    import com.gargoylesoftware.htmlunit.WebClient;    import com.gargoylesoftware.htmlunit.html.HtmlPage;        import junit.framework.TestCase;        /**     * @description HtmlUnit工具的简单使用测试     * @author ZhouJingxian     *     */    public class Test_HtmlUnit extends TestCase{                /**         * 测试主页标题         * @throws FailingHttpStatusCodeException         * @throws MalformedURLException         * @throws IOException         */        public void testHomePage() throws FailingHttpStatusCodeException, MalformedURLException, IOException{                final WebClient webClient = new WebClient();            final HtmlPage startPage = webClient.getPage("http://htmlunit.sourceforge.net");    //      assertEquals("HtmlUnit - Welcome to HtmlUnit", startPage.getTitleText());            System.out.println("title:"+startPage.getTitleText());                    }                /**         * 测试浏览器         * @throws Exception         */        public void testHomePage_Firefox() throws Exception {            //火狐2/3    //      final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_2);                        //IE6/7            final WebClient webClient = new WebClient(BrowserVersion.INTERNET_EXPLORER_7);                         final HtmlPage page = webClient.getPage("http://htmlunit.sourceforge.net");                //      assertEquals("HtmlUnit - Welcome to HtmlUnit", page.getTitleText());            System.out.println("title:"+page.getTitleText());        }        /**     * 两个测试类的输出都如下:     * title:HtmlUnit - Welcome to HtmlUnit     */    }  
</div> </span></span></span>