`
aa8945163
  • 浏览: 270433 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

http通用请求测试

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

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

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


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;
}
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics