`
kakaluyi
  • 浏览: 438889 次
  • 性别: 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

相关推荐

    dhcp_test_tool:DHCP服务器测试工具

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

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

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

    java字节码分析工具

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

    瑞星软件管家 v01.00.00.48.exe

    软件分享 操作简单 把您的装机方案分享给您的好友。为好友指点"迷津"。打造 通用的装机方案,分享给N多电脑,实现一键轻松装机。 软件收藏 查找方便 选择收藏您所喜欢的常用软件,能及时关注最新信息,并 可添加到...

    打造自己的ACER一键恢复系统不完全手册

    今晚下小生花了几个小时,分析了ACER还原分区的目录内容后,决定自己动手改造,最后发现自己定义自己还原盘原来是这么简单的,下面就与大家分享下具体的操作过程. 使用本:ACER Aspire 1810TZ Vista 版,一键恢复系统...

    JAVA上百实例源码以及开源项目源代码

     一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手朋友可以学习一下。 JAVA+JSP的聊天室 8个目标文件 简单 JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 一个...

    writeboard:简单的写字板

    WriteBoard项目地址::创作目的书写板的创作起源说来话长,小组正在写的一门生成DSL的解释器,用于生成各种标记语言的Parser,需要一个简洁易用的前端,这个书写板即组合开源社区现有的工具,形成一个简洁通用的文档...

    流量精灵 v6.1.2 官方版.zip

    今天小编要给大家介绍一款专业好用的网络推广软件——流量精灵。流量精灵采用基于IE内核自主研发的嵌入式...3. 优化测试工具,表现最真实效果; 4. 新增微信、手机QQ、手机QQ空间内置浏览器类型; 流量精灵的截图

    JAVA上百实例源码以及开源项目

    百度云盘分享 简介 笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级、中级、高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情、执着,对...

    乐优商城.xmind

    自己做的乐优商城的XMIND文件,学习分享下。乐优商城 搭建父工程 pom.xml 添加依赖 springCloud mybatis启动器 通用Mapper启动器 mysql驱动 分页助手启动器 FastDFS客户端 其他配置 构建设置 环境设置 ...

    蜘蛛侠论坛2.0 源代码

    5)如何在不能设置IIS的情况下,最大限度的提升网站性能,让你的网站的yslow或page speed这两个工具的测试下拿高分; 6)CommunityServer中的Ajax功能,后由我对其改进完善,使其使用更加简洁; 7)如何在你的网站中...

    java10-http2-springboot-junit5:考虑到使用CI的Spring Boot 2.x和Java 10的简单微服务。 集成的其他功能很少,包括多Maven模块,http2,Junit 5,spring boot test,jacoco

    带有CI的通用微服务 这是我在考虑CI / CD的情况下构建微服务的推荐方法的第一步。 当然,这里的重点是CI。 该项目将不会分享有关如何制作CD的知识。 对于那些初次这样做的人,请继续阅读。 我考虑了最新的库和SDK...

    程序员面试刷题的书哪个好-my-notes::books:我的个人笔记库

    程序员面试刷题的书哪个好我的笔记 ...基准测试工具。 : 用自然语言制作正则表达式的 Javascript 库。 :没有数据挖掘的Chrome。 :窗口切换器和应用程序启动器。 :使用 React 和 Node.js 创建的您自己的 wiki

    asp.net知识库

    自定义通用System.Web.UI.IHierarchicalDataSource简单实现 在 ASP.NET 2.0 中创建 Web 应用程序主题 ASP.NET 2.0 中的数据访问 ASP.NET 2.0:弃用 DataGrid 吧,有新的网格控件了! 将 ASP.NET 2.0 应用程序服务...

    O2O掌上城市(ShopNC本地生活).rar

    ShopNC本地生活系统开发团队尽量使得安装步骤简单方便,但仍然可能会用到一些常用的工具软件。如果 您通过网络将 ShopNC本地生活系统上传到服务器上,您将可能需要一个 FTP 客户端软件.通过您的服务器 FTP账号,...

    C#微软培训资料

    17.3 读 写 文 件 .222 17.4 异步文件操作 .227 17.5 小 结 .234 第十八章 高 级 话 题 .235 18.1 注册表编程 .235 18.2 在 C #代码中调用 C++和 VB 编写的组件 .240 18.3 版 本 控 制 .249 18.4 代 ...

    传智播客扫地僧视频讲义源码

    16_通用链表库集成和测试 17_C提高课程_day05-day07_知识体系梳理_传智扫地僧 源码及文档 第二部分 C++基础目录 01_C++基础课程的安排和需要持之以恒的学习态度 02_简单的C++程序helloworld 03_用面向过程和面向...

    2019千峰Python超详细入门教程(百度云盘分享).docx

    │ 千锋Python教程:01.python概述和工具的安装.mp4 │ 千锋Python教程:02.数据存储与二进制操作1.mp4 │ 千锋Python教程:03.数据存储与二进制操作2.mp4 │ 千锋Python教程:04.第一个Python程序与注释及输入输出....

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    Blog记载了日常发生的事情和自己的兴趣爱好,把自己的思想和知识和他人分享、交流,同时又通过“六度空间”结识了更多志趣相投的朋友;而越来越多专业知识的 Blog 的出现,让我们看到了 Blog 更多所蕴涵的巨大的...

Global site tag (gtag.js) - Google Analytics