`
kakaluyi
  • 浏览: 444379 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

分享一下自己写的简单的通用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;
		}
	}

 

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

相关推荐

    自己写的一个小工具,能将自己的电脑上的WEB发布到外网。

    标题中的“自己写的一个小工具,能将自己的电脑上的WEB发布到外网”表明这是一个自编程序,其功能是使得在局域网内的Web服务能够被外部互联网访问。这个过程通常涉及到了内网穿透技术,也就是所谓的NAT穿透,因为...

    Modbus Poll_modbus_mobus_modbus测试工具_modbus通讯工具_modus_

    6. **报告生成**:生成测试报告,方便记录和分享测试结果。 在实际应用中,Modbus Poll对于验证设备的正确配置、确保系统稳定运行、排查通信问题等方面都非常有用。无论是新手还是经验丰富的工程师,都能通过这款...

    自己写的一个很简单的日历功能

    标题中的“自己写的一个很简单的日历功能”表明这是一个个人开发的日历应用或者模块,可能是用编程语言实现的。从描述中的“博文链接”来看,作者在某技术社区分享了这个项目的实现细节,我们可以期待在博客中找到更...

    dhcp_test_tool:DHCP服务器测试工具

    dhcp_test_tool介绍MFC的DHCP服务器测试工具可用于测试 DHCP 服务器的性能。闲话其实我是一名 Linux 程序员 :) 我很久以前作为一名新开发人员完成了这个,所以它非常简单,但有点有用。 它诞生于 2007 年,据我所知...

    WinCE系统15个工具打包

    6. **网络诊断工具**:可能包括网络连接测试工具,如ping、traceroute等,帮助用户检查网络连接状况,定位网络问题。 7. **备份与恢复工具**:这些工具可以备份系统设置、应用程序数据,甚至整个系统映像,以便在...

    unittestreport框架HTML测试报告模板

    unittestreport框架是一款用于生成HTML测试报告的工具,它基于Python的unittest库,旨在提供更直观、易读的测试结果展示。在Python的自动化测试中,unittest是常用的单元测试框架,而unittestreport则增强了其报告...

    Robot Framework 源代码阅读笔记 之 一 - CSDN博客

    总之,本文作为Robot Framework源代码阅读笔记的一部分,作者不仅分享了对Robot Framework的了解,还整理了众多与Python测试相关的库和工具,为我们展示了丰富的测试工具生态,为测试开发人员提供了宝贵的学习和参考...

    postman接口自动化测试功能测试

    Postman是一款广受欢迎的API(应用程序编程接口)测试工具,尤其在接口自动化测试领域中扮演着重要角色。它提供了一种直观、高效的方式来发送HTTP请求并解析响应数据,从而帮助开发者和测试人员验证接口的功能、性能...

    关键字驱动自动化测试PPT

    8. **最佳实践与案例研究**:PPT可能会分享一些成功的自动化测试项目案例,以展示关键字驱动测试的实际应用和效果。 通过"有效实施自动化测试之框架-RRAFS.ppt"这份文档,你可以系统地学习关键字驱动自动化测试的...

    Java开源常用工具

    这些工具都是Java开源社区的宝贵贡献,它们经过广泛测试,稳定性高,且有着丰富的文档和社区支持。在实际开发中,结合这些工具,开发者可以构建出高效、稳定的系统。例如,SmartUpload和FileUpload可以用于搭建安全...

    VC6.0通用补丁2011

    VC6.0通用补丁2011的安装过程相对简单,只需下载解压后的压缩包,按照指示运行补丁程序,然后按照提示进行安装即可。安装完成后,无需重启计算机,可以直接打开VC6.0进行测试,体验修复后的各项改进。 四、注意事项...

    微软软件测试之道(How We Test Software at Microsoft)

    我在天津市软件测试中心工作了7年,一直都在寻找不同软件的测试方法、测试工具的使用、测试流程及管理。所以,一直都非常关注软件测试方面的书,以便用它来指导我们测试业务的开展,同时对 于软件开发企业控制软件...

    软件测试入门精要介绍

    3. **成为性能测试专家:** 精通各种性能测试工具和技术,具备制定通用性能测试方案的能力,以满足不同产品的测试需求。 4. **转为产品经理:** 利用对产品的深入了解,转向产品经理岗位。这需要优秀的沟通能力和对...

    桌面发泄小工具

    虽然具体的实现方式因软件而异,但我们可以探讨一下这类工具可能包含的一些通用功能和涉及的技术知识点。 1. **用户界面设计**:桌面发泄小工具的吸引力在于其直观易用的界面。设计师会采用吸引人的图形元素和色彩...

    LICEcap(屏幕录制工具,).zip

    LICEcap是一款高效且易于使用的屏幕录制工具,尤其适合那些需要快速捕捉屏幕动态并以GIF动画格式分享的用户。它的主要特点包括其轻量级的设计、简单的操作流程以及灵活的录屏区域选择功能。 1. **轻量级设计**:...

    java字节码分析工具

    该系统乃本人本科毕业设计作品,拿来和大家分享,代码结构组织很简单。对于反编译出java源码还未能做到,主要是由于条件语句本人无法想出通用的反编译算法,不过对于class文件结构已经做了完整的分析,哪位仁兄如果...

    UVM 验证测试平台搭建简单示例(详细)

    标题“UVM 验证测试平台搭建简单示例(详细)”表明本文档是一个关于如何使用UVM(Universal Verification Methodology,通用验证方法学)来搭建一个简单的System Verilog测试平台的教程。UVM是一种流行于现代数字...

    python接口自动化测试脚本

    在接口自动化测试中,Python提供了丰富的库和工具,如`requests`和`unittest`,使得编写测试脚本变得简单。 2. `requests`库: 这是Python的一个HTTP客户端库,可以方便地发送GET、POST等HTTP请求。通过`requests....

    通用excel题库制作软件

    本篇文章将深入探讨“通用Excel题库制作软件”的相关知识,旨在帮助用户了解如何利用这类软件高效地创建、管理和分享题库。 首先,我们要明确什么是Excel题库制作软件。这类软件通常基于Microsoft Excel,结合了其...

Global site tag (gtag.js) - Google Analytics