JUnit学习笔记-5 HttpUnit介绍

HttpUnit是一个能模拟WEB浏览器功能的工具,能和junit一同来测试页面。
这个框架简单好用,能测试页面内容,模拟、修改、提交表单,测试超链接等。

下面是一个测试类,举了一些常用的测试例子。这些例子也是httpunit官网上的例子。

package com.yuchujin;

import java.io.IOException;

import junit.framework.Assert;

import org.junit.Test;
import org.xml.sax.SAXException;

import com.meterware.httpunit.GetMethodWebRequest;
import com.meterware.httpunit.PostMethodWebRequest;
import com.meterware.httpunit.WebConversation;
import com.meterware.httpunit.WebForm;
import com.meterware.httpunit.WebLink;
import com.meterware.httpunit.WebRequest;
import com.meterware.httpunit.WebResponse;
import com.meterware.httpunit.WebTable;

public class WebTest {
	
	/**
	 * 测试URL是否有返回response。可用来测试URL地址存在和服务是否存在等。
	 */
	@Test
	public void testWebExists(){
		//核心类,用来模拟一个浏览器的操作,相当于拥有了一个浏览器
		WebConversation web = new WebConversation();

			try {
				//使用URL字符串地址作为参数,测试服务是否开启。
				//geResponse获得返回的response
				web.getResponse("http://localhost:8080/HttpUnitProject");
			} catch (IOException e) {
				e.printStackTrace();
			} catch (SAXException e) {
				e.printStackTrace();
			}

	}
	/**
	 * 使用WebRequest作为参数测试服务是否开启。
	 */
	@Test
	public void testWebExists2(){
		WebConversation web = new WebConversation();
		//使用GET方法创建request对象
		WebRequest request = new GetMethodWebRequest("http://localhost:8080/HttpUnitProject");
		try {
			web.getResponse(request);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	/**
	 * 测试response中的内容
	 */
	@Test
	public void testWebContent(){
		WebConversation web = new WebConversation();
		//使用GET方法创建request对象
		WebRequest request = new GetMethodWebRequest("http://localhost:8080/HttpUnitProject/index.jsp");
		try {
			WebResponse response = web.getResponse(request);
			//显示response中的html内容
			System.out.println(response.getText());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	/**
	 * 测试带参数的request
	 */
	@Test
	public void testWebContentWithParamenter(){
		WebConversation web = new WebConversation();
		WebRequest request = new GetMethodWebRequest("http://localhost:8080/HttpUnitProject/index.jsp");
		//使用reuqest的setParameter方法可以为生成的request添加参数
		request.setParameter("username", "yuchujin");
		try {
			WebResponse response = web.getResponse(request);
			System.out.println(response.getText());
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	/**
	 * 测试页面的跳转
	 */
	@Test
	public void testWebRedirectSuccess(){
		WebConversation web = new WebConversation();
		//生成POST的request
		WebRequest request = new PostMethodWebRequest("http://localhost:8080/HttpUnitProject/validate.jsp");
		//使用reuqest的setParameter方法可以为生成的request添加参数
		request.setParameter("username", "ycj");
		request.setParameter("password", "123");
		try {
			WebResponse response = web.getResponse(request);
			String expectedURL = "http://localhost:8080/HttpUnitProject/success.jsp";
			Assert.assertEquals("validate fail",expectedURL, response.getURL().toString());
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	/**
	 * 测试页面跳转失败
	 */
	@Test
	public void testWebRedirectFail(){
		WebConversation web = new WebConversation();
		WebRequest request = new PostMethodWebRequest("http://localhost:8080/HttpUnitProject/validate.jsp");
		//使用reuqest的setParameter方法可以为生成的request添加参数
		request.setParameter("username", "ycj");
		request.setParameter("password", "321");
		try {
			WebResponse response = web.getResponse(request);
			String expectedURL = "http://localhost:8080/HttpUnitProject/fail.jsp";
			Assert.assertEquals("validate fail",expectedURL, response.getURL().toString());
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	/**
	 * 测试获得页面中的table节点
	 */
	@Test
	public void testWebTables(){
		WebConversation web = new WebConversation();
		WebRequest request = new GetMethodWebRequest("http://localhost:8080/HttpUnitProject/table.jsp");
		WebResponse response = null;
		try {
			response = web.getResponse(request);
			//WebTable代表返回的html中的table标签封装的对象
			//response.getTables返回html中所有table dom对象数组
			WebTable tables = response.getTables()[0];
			Assert.assertEquals(2, tables.getColumnCount());
			Assert.assertEquals(3, tables.getRowCount());
			//获得表格中某个单元格中的文本
			Assert.assertEquals("male", tables.getTableCell(2, 1).getText());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SAXException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	/**
	 * 测试超链接内容
	 */
	@Test
	public void testWebLink(){
		WebConversation web = new WebConversation();
		WebRequest request  = new GetMethodWebRequest("http://localhost:8080/HttpUnitProject/linkFrom.jsp");
		try {
			WebResponse response = web.getResponse(request);
			//模拟html中的超链接,在页面中通过超连接的文本获得超连接的URL
			WebLink link = response.getLinkWith("click me to linkTo");
			//将超链接生成request
			WebRequest linkReq = link.getRequest();
			//访问刚超链接页面
			response = web.getResponse(linkReq);
			Assert.assertEquals("http://localhost:8080/HttpUnitProject/linkTo.jsp",response.getURL().toString());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SAXException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	/**
	 * 测试form中的内容
	 */
	@Test
	public void testWebForm(){
		WebConversation web = new WebConversation();
		WebRequest request = new GetMethodWebRequest("http://localhost:8080/HttpUnitProject/form.jsp");
		WebResponse response = null;
		try {
			response = web.getResponse(request);
			//获得Html中的form表单,HttpUnit将他封装成WebForm对象
			WebForm form = response.getForms()[0];
			//WebForm对象提供getParameterValue的方法将根据表单中的name获得对应的value,而不用管该元素的类型。
			Assert.assertEquals("yuchujin", form.getParameterValue("name"));
			Assert.assertEquals("mela", form.getParameterValue("sex"));
			Assert.assertEquals("high", form.getParameterValue("school"));
			Assert.assertEquals("on", form.getParameterValue("cj"));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SAXException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	/**
	 * 测试WebForm的处理表单和提交能力
	 */
	@Test
	public void testFormSubmit(){
		WebConversation web = new WebConversation();
		WebRequest request = new PostMethodWebRequest("http://localhost:8080/HttpUnitProject/form.jsp");
		WebResponse response = null;
		try {
			response = web.getResponse(request);
			//获得Html中的form表单,HttpUnit将他封装成WebForm对象
			WebForm form = response.getForms()[0];
			//WebForm对象提供getParameterValue的方法将根据表单中的name获得对应的value,而不用管该元素的类型。
			Assert.assertEquals("yuchujin", form.getParameterValue("name"));
			Assert.assertEquals("mela", form.getParameterValue("sex"));
			Assert.assertEquals("high", form.getParameterValue("school"));
			Assert.assertEquals("on", form.getParameterValue("cj"));
			//对表单进行处理操作(根据name)
			form.setParameter("name", "zhoujianzhen");
			// TODO 有的元素不能够remove,比如说radio。限制只发现checkbox能删,能研究一下再修改文章。
			form.removeParameter("school");
			//提交表单 获得新的response
			response = form.submit();
			Assert.assertEquals("http://localhost:8080/HttpUnitProject/handleForm.jsp", response.getURL().toString());
			System.out.println(response.getText());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SAXException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

你可能感兴趣的:(jsp,Web,JUnit,单元测试,webform)