分享一上自己写的简单的通用http测试工具

分享一下自己写的简单的通用http测试工具

  晕要发到博客上频道的怎么发到了这里。。。管理员能帮忙移动一下吗  

  會議系統的优化有了改进,谢谢大家的建议,同时分享一下我写的http通用请求测试工具。保持session是这类测试工具的难点,因为你要进行一系列的操作,比如登录---建立会议---删除会议---登出,你每次请求都要保证你hold住前一次请求的sessionId,我这里是用cookie 携带上一次访问的sessionId, 分享一下我做的通用http请求测试工具,可以自己携带参数比如用户名,密码等等,封装到Map中。

    以下可以模拟单线程请求。还可以改装一下,变成多线程的并发,可以分析每次的返回结果,测试时间和返回码(200or404?).

 	import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.net.URLEncoder;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    import java.util.Map.Entry;
    import com.avonaco.testPojo.GeneralUrlResult;	
public class HttpRequestProxy
	{
	   
	    private static int connectTimeOut = 15000;
	    private static int readTimeOut = 20000;
	    private static String requestEncoding = "UTF-8";
	   private static String JESSIONID;
	    public static  GeneralUrlResult doPost(String reqUrl, Map parameters,
	            String recvEncoding){
                        //统计测试开始结束时间
	    	Long begin=System.currentTimeMillis(); 
	    	Long end=System.currentTimeMillis();
	    	GeneralUrlResult gr=new GeneralUrlResult();
	       HttpURLConnection url_con = null;
	        String responseContent = null;
	        int code=0;
	        try
	        {
	            StringBuffer params = new StringBuffer();
	            for (Iterator iter = parameters.entrySet().iterator(); iter
	                    .hasNext();)
	            {
	                Entry element = (Entry) iter.next();
	                params.append(element.getKey().toString());
	                params.append("=");
	                params.append(URLEncoder.encode(element.getValue().toString(),
	                        HttpRequestProxy.requestEncoding));
	                params.append("&");
	            }
	            if (params.length() > 0)
	            {
	                params = params.deleteCharAt(params.length() - 1);
	            }
	            URL url = new URL(reqUrl);
	            url_con = (HttpURLConnection) url.openConnection();
	            url_con.setUseCaches(false);
	            url_con.setRequestMethod("GET");
        	           if(JESSIONID==null)
        		  {
//这里的requUrl可以写成网站的通用,比如登录的地址以后每次测试都用这个sessionId保持测试的连贯性
        		 JESSIONID=testUrlConnection("http://192.168.9.225:8080/Conference/login.do?userName=luyi&&password=123456&&loginType=WEB");
        		  }
        		  System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>123456"+JESSIONID);
        	   	   url_con.setRequestProperty("Cookie",JESSIONID );

 
//	            
//	            System.setProperty("sun.net.client.defaultConnectTimeout", String
//	                    .valueOf(HttpRequestProxy.connectTimeOut));// (单位:毫秒)jdk1.4换成这个,连接超时
//	            System.setProperty("sun.net.client.defaultReadTimeout", String
//	                    .valueOf(HttpRequestProxy.readTimeOut)); // (单位:毫秒)jdk1.4换成这个,读操作超时
        	   	 
        	   	   url_con.setConnectTimeout(12000);//(单位:毫秒)jdk
//	             1.5换成这个,连接超时
	             url_con.setReadTimeout(50000);//(单位:毫秒)jdk 1.5换成这个,读操作超时
	          
	             url_con.setDoOutput(true);
	     
	            byte[] b = params.toString().getBytes();
	            url_con.getOutputStream().write(b, 0, b.length);
	            url_con.getOutputStream().flush();
	            url_con.getOutputStream().close();
	            
	          
	            code=url_con.getResponseCode();
	            String header;
	            for(int i=0;true;i++){
	                header=url_con.getHeaderField(i);
	                if(header==null)break;
	                System.out.println("header:"+header);
	                //System.out.println(c.getContentType());
	            }
	                     
	           InputStream in = url_con.getInputStream();
	          
	            BufferedReader rd = new BufferedReader(new InputStreamReader(in,
	                    recvEncoding));
	            String tempLine = rd.readLine();
	            StringBuffer tempStr = new StringBuffer();
	            String crlf=System.getProperty("line.separator");
	            while (tempLine != null)
	            {
	                tempStr.append(tempLine);
	                tempStr.append(crlf);
	                tempLine = rd.readLine();
	            }
                      //得到请求网站返回的内容
	            responseContent = tempStr.toString();
	           end=System.currentTimeMillis();
	            rd.close();
	            in.close();
	       }
	        catch (IOException e)
	        {
	         System.out.println(e.toString());
	        }
	        finally
	        {
	            if (url_con != null)
	            {
	                url_con.disconnect();
	            }
	        }
                 //得到测试的每次响应时间
	        Long between=end-begin;
//gr是我写的一个简单的结果类,其中有测试时间,返回结果200?or404,还有返回内容
	        gr.setBetween(between);
	        gr.setCode(code);
	        gr.setResult(responseContent);
	        return gr;
	    }
	   
	    public static int getConnectTimeOut()
	    {
	        return HttpRequestProxy.connectTimeOut;
	    }
	  
	    public static int getReadTimeOut()
	    {
	        return HttpRequestProxy.readTimeOut;
	    }
	    
	    public static String getRequestEncoding()
	    {
	        return requestEncoding;
	    }
	    
	    public static void setConnectTimeOut(int connectTimeOut)
	    {
	        HttpRequestProxy.connectTimeOut = connectTimeOut;
	    }

	  
	    public static void setReadTimeOut(int readTimeOut)
	    {
	        HttpRequestProxy.readTimeOut = readTimeOut;
	    }
	    public static void setRequestEncoding(String requestEncoding)
	    {
	        HttpRequestProxy.requestEncoding = requestEncoding;
	    }
	    public static String testUrlConnection(String Strurl){ 
	        String urlStr=Strurl;
	        OutputStream out=null; 
	        InputStream in=null; 
	        try { 
	            URL url=new URL(urlStr); 
	            HttpURLConnection con=(HttpURLConnection)url.openConnection(); 
	            con.setRequestMethod("GET"); 
	             
	            //打印请求头信息 
	            Map hfs=con.getHeaderFields(); 
	            Set<String> keys=hfs.keySet(); 
	            for(String str:keys){ 
	                List<String> vs=(List)hfs.get(str); 
	                System.out.print(str+":"); 
	                for(String v:vs){ 
	                    System.out.print(v+"\t"); 
	                } 
	                System.out.println(); 
	            } 
	            System.out.println("-----------------------"); 
	            String cookieValue=con.getHeaderField("Set-Cookie"); 
	            System.out.println("cookie value:"+cookieValue); 
	            String sessionId=cookieValue.substring(0, cookieValue.indexOf(";")); 
	            return sessionId; 
	        } catch (Exception e) { 
	            e.printStackTrace(); 
	            return null; 
	        }finally{ 
	            try { 
	                if(in!=null) 
	                    in.close(); 
	                if(out!=null) 
	                    out.close(); 
	            } catch (IOException e) { 
	                e.printStackTrace(); 
	            } 
	        } 
	    } 
	    public static void main(String[] args)
	    {
	    	 Map map = new HashMap();
	        map.put("chart", "555555");
	        map.put("conId","727622");
	        GeneralUrlResult temp = HttpRequestProxy.doPost("http://192.168.9.225:8080/Conference/readChart.jsp", map, "UTF-8");
	        System.out.println("页面为:\n"+temp);
	    }

		public static String getJESSIONID() {
			return JESSIONID;
		}

		public static void setJESSIONID(String jessionid) {
			JESSIONID = jessionid;
		}
	}

 

1 楼 kxyk 2009-08-15  
缺这个类.GeneralUrlResult
2 楼 alswl 2010-02-24  
中间的注释让我想起 com.hengpeng.common.web.HttpRequestProxy 这个包~
呵呵