有时候大家做测试的时候需要验证web后台压力,如果让测试人员去不断的填写提交表单的话可能会让人吃不消,利用程序则可以很好的解决这一问题。

 

比如有一个web工程,其主页index.:

[] 
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 
<% 
String path = request.getContextPath(); 
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 
%> 
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
  <head> 
    <base href="<%=basePath%>"> 
     
    <title>My JSP 'index.jsp' starting page</title> 
    <meta http-equiv="pragma" content="no-cache"> 
    <meta http-equiv="cache-control" content="no-cache"> 
    <meta http-equiv="expires" content="0">     
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 
    <meta http-equiv="description" content="This is my page"> 
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    --> 
  </head> 
   
  <body> 
    <form action="<%=path %>/LoginServ" method="post" name="loginForm" id="loginForm"> 
         <table width="250" border="0"> 
           <tr> 
             <td>账号:</td><td><input type="text" name="username" id="username"/></td> 
           </tr> 
           <tr> 
             <td>密码:</td><td><input type="password" name="pass" id="pass"/></td> 
           </tr> 
           <tr> 
             <td colspan=2><input type="submit" value="登陆" name="testlogin"/></td> 
           </tr> 
         </table> 
    </form> 
  </body> 
</html> 

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
   
    <title>My JSP 'index.jsp' starting page</title>
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">   
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->
  </head>
 
  <body>
    <form action="<%=path %>/LoginServ" method="post" name="loginForm" id="loginForm">
         <table width="250" border="0">
           <tr>
             <td>账号:</td><td><input type="text" name="username" id="username"/></td>
           </tr>
           <tr>
             <td>密码:</td><td><input type="password" name="pass" id="pass"/></td>
           </tr>
           <tr>
             <td colspan=2><input type="submit" value="登陆" name="testlogin"/></td>
           </tr>
         </table>
    </form>
  </body>
</html>

其后台servlet为:

[java] 
package com.test; 
 
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; 
 
public class LoginServ extends HttpServlet { 
 
    /**
     * Constructor of the object.
     */ 
    public LoginServ() { 
        super(); 
    } 
 
    /**
     * Destruction of the servlet. <br>
     */ 
    public void destroy() { 
        super.destroy(); // Just puts "destroy" string in log  
        // Put your code here  
    } 
 
    /**
     * The doGet method of the servlet. <br>
     *
     * This method is called when a form has its tag value method equals to get.
     * 
     * @param request the request send by the client to the server
     * @param response the response send by the server to the client
     * @throws ServletException if an error occurred
     * @throws IOException if an error occurred
     */ 
    public void doGet(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException { 
 
        this.doPost(request, response); 
    } 
 
    /**
     * The doPost method of the servlet. <br>
     *
     * This method is called when a form has its tag value method equals to post.
     * 
     * @param request the request send by the client to the server
     * @param response the response send by the server to the client
     * @throws ServletException if an error occurred
     * @throws IOException if an error occurred
     */ 
    public void doPost(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException { 
 
        String username = request.getParameter("username"); 
        String pass = request.getParameter("pass"); 
        username = new String(username.getBytes("ISO-8859-1"),"utf-8"); 
        System.out.println("用户登录,账号=【"+username+"】,密码=【"+pass+"】"); 
         
    } 
 
    /**
     * Initialization of the servlet. <br>
     *
     * @throws ServletException if an error occurs
     */ 
    public void init() throws ServletException { 
        // Put your code here  
    } 
 

package com.test;

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;

public class LoginServ extends HttpServlet {

 /**
  * Constructor of the object.
  */
 public LoginServ() {
  super();
 }

 /**
  * Destruction of the servlet. <br>
  */
 public void destroy() {
  super.destroy(); // Just puts "destroy" string in log
  // Put your code here
 }

 /**
  * The doGet method of the servlet. <br>
  *
  * This method is called when a form has its tag value method equals to get.
  *
  * @param request the request send by the client to the server
  * @param response the response send by the server to the client
  * @throws ServletException if an error occurred
  * @throws IOException if an error occurred
  */
 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

  this.doPost(request, response);
 }

 /**
  * The doPost method of the servlet. <br>
  *
  * This method is called when a form has its tag value method equals to post.
  *
  * @param request the request send by the client to the server
  * @param response the response send by the server to the client
  * @throws ServletException if an error occurred
  * @throws IOException if an error occurred
  */
 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

  String username = request.getParameter("username");
  String pass = request.getParameter("pass");
  username = new String(username.getBytes("ISO-8859-1"),"utf-8");
  System.out.println("用户登录,账号=【"+username+"】,密码=【"+pass+"】");
  
 }

 /**
  * Initialization of the servlet. <br>
  *
  * @throws ServletException if an error occurs
  */
 public void init() throws ServletException {
  // Put your code here
 }

}

将这个项目部署运行后,我们来编写测试代码,模拟表单提交数据:

[java] 
package com.test; 
 
import com.gargoylesoftware.htmlunit.WebClient; 
import com.gargoylesoftware.htmlunit.html.HtmlForm; 
import com.gargoylesoftware.htmlunit.html.HtmlPage; 
import com.gargoylesoftware.htmlunit.html.HtmlPasswordInput; 
import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput; 
import com.gargoylesoftware.htmlunit.html.HtmlTextInput; 
 
public class Test { 
    public static void submittingForm() throws Exception { 
        final WebClient webClient = new WebClient(); 
        //1.获取某个待测页面  
        final HtmlPage page1 = webClient.getPage("http://localhost:8081/HtmlUnitTest"); 
        //2.获取页面上的表单  
        final HtmlForm form = page1.getForms().get(0); 
        //3.获取页面上的各个元素  
        final HtmlSubmitInput button = form.getInputByName("testlogin"); 
        final HtmlTextInput textField = form.getInputByName("username"); 
        final HtmlPasswordInput pass= form.getInputByName("pass"); 
        //4.给元素赋值  
        textField.setValueAttribute("我是张三"); 
        pass.setValueAttribute("routon"); 
        //5.提交  
        button.click(); 
    } 
    public static void main(String[] args) { 
        try { 
            submittingForm(); 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
    }