`
clarancepeng
  • 浏览: 191716 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

使用HttpClient对web应用进行测试

阅读更多
在几天程序突然报出了数据库连接被管理员销毁的情况! 一时之间也毫无头绪, 甚至怀疑我们的程序能否通过压力测试, 所以就使用了HttpClient整了一段测试跑了来测试一下, 最后虽然找到了问题是因为ArcGis占有了很多连接没有释放导致的, 呵呵, 既然写了, 还是拿出来试试:
package com.gomt.httpclient;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.text.BadLocationException;
import javax.swing.text.html.HTMLDocument;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;



public class AutoTest {

    static final String LOGON_SITE = "192.168.0.93";
    static final int    LOGON_PORT = 7001;
    
	public AutoTest() {
		
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
        HttpClientFrame f = new HttpClientFrame();
        f.setTitle("HttpClient测试");
        f.setSize(700, 500);
        f.addWindowListener(
            new WindowAdapter() {
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            }
        );
        f.setVisible(true);
	}
    
    public static class HttpClientFrame extends JFrame {
		private static final long serialVersionUID = 3348783285573305436L;
		private JComboBox cmbURL;
        private JComboBox runcount;
        private JTextField cmbPort;
        private JTextArea taTextResponse;
        private JEditorPane htmlPane;
        
        private HttpClient client;
        String[] userArr = new String[]{"admin", "tianyy", "jiangzy", "caoxd", "changam", "chejh", "chench", "chengh", "chenhr", "guzm", "hesb", "hep", "laijw"};
        String[] passArr = new String[]{"admin", "tian", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1"};
        long begin = 0;
        
        public HttpClientFrame() {
        	
    		begin = System.currentTimeMillis();
    		System.out.println("start : " + begin);
            //HttpClient 
            client = new HttpClient(new MultiThreadedHttpConnectionManager());
            //client.getHostConfiguration().setHost(LOGON_SITE, LOGON_PORT, "http");
            client.getHttpConnectionManager().getParams().setConnectionTimeout(30000);

            JPanel panInput = new JPanel(new FlowLayout());

            String[] aURLs = {
                "192.168.0.9",
                "192.168.0.10",
                "192.168.0.93"//,
                //"http://www.anybrowser.org/",
                //"http://jakarta.apache.org/",
                //"http://www.w3.org/"
            };

            final JButton btnGET = new JButton("测试");
            btnGET.addActionListener(
                new ActionListener() {
                    public void actionPerformed(ActionEvent ae) {
                        String url = (String) cmbURL.getSelectedItem();
                        if (url != null && url.length() > 0) {
                            //loadPage(url);
                        	int runtimes = 1;
                        	int port = 80;
                        	try {
                        		runtimes = Integer.parseInt((String)runcount.getSelectedItem());
                        		
                        		
                        	} catch(Exception eee) {
                        		runtimes = 1;
                        	}
                        	try {
                        		port = Integer.parseInt(cmbPort.getText());
                        	} catch(Exception ee) {
                        		port = 80;
                        	}

                            java.util.Random rm = new java.util.Random();
                            for (int i = 0; i < runtimes; i++) {
                            	int rmi = rm.nextInt();
                            	int arryp = Math.abs(rmi % 13);
                            	System.out.println("arryp = " + arryp);
                            	loadPage(url, i+1, begin, userArr[arryp], passArr[arryp], port);
//                                PostMethod post = new PostMethod("http://" + url + ":" + LOGON_PORT + "/szsf/loginaction.action");
//                                NameValuePair username = new NameValuePair("user", userArr[arryp]);
//                                NameValuePair password = new NameValuePair("pwd", passArr[arryp]);
//                                NameValuePair method = new NameValuePair("method", "b");
//                                post.setRequestBody(new NameValuePair[]{username, password, method});
                                //get.setFollowRedirects(true);

                            }
                        }
                    }
                }
            );
            
            cmbURL = new JComboBox(aURLs);
            cmbURL.setToolTipText("输入一个地址!");
            cmbURL.setEditable(true);
            cmbURL.setSelectedIndex(0);
            
            cmbPort = new JTextField();
            cmbPort.setToolTipText("请输入端口号!");
            cmbPort.setEditable(true);
            cmbPort.setText("7001");

            JLabel lblURL = new JLabel("地址:");
            
            runcount = new JComboBox(new String[]{"1","10","100","1000"});
            runcount.setToolTipText("运行次数");
            runcount.setEditable(true);
            runcount.setSelectedIndex(0);

            panInput.add(lblURL);
            panInput.add(cmbURL);
            panInput.add(cmbPort);
            panInput.add(btnGET);
            panInput.add(runcount);
            panInput.add(new JLabel("次"));

            taTextResponse = new JTextArea();
            taTextResponse.setEditable(false);
            taTextResponse.setCaretPosition(0);

            htmlPane = new JEditorPane();
            htmlPane.setContentType("text/html;charset=UTF-8");
            htmlPane.setEditable(false);

            JSplitPane splitResponsePane = new JSplitPane(
                JSplitPane.HORIZONTAL_SPLIT,
                new JScrollPane(taTextResponse),
                new JScrollPane(htmlPane)
            );
            splitResponsePane.setOneTouchExpandable(false);
            splitResponsePane.setDividerLocation(350);
            // it would be better to set resizeWeight, but this method does
            // not exist in JRE 1.2.2
//            splitResponsePane.setResizeWeight(0.5);

            this.getContentPane().setLayout(new BorderLayout());
            this.getContentPane().add(panInput, BorderLayout.NORTH);
            this.getContentPane().add(splitResponsePane, BorderLayout.CENTER);
        }

        /**
         * Sets the HTML content to be displayed.
         * 
         * @param content an HTML document
         * @throws UnsupportedEncodingException 
         */
        private void setDocumentContent(String content, InputStream in) throws UnsupportedEncodingException {
        
            HTMLDocument doc = new HTMLDocument();
            
//            try {
//                doc.remove(0, doc.getLength());
//            } catch (BadLocationException e) {
//                e.printStackTrace();
//            }
            doc.putProperty("IgnoreCharsetDirective", Boolean.TRUE);

            taTextResponse.setText(new String(content.getBytes("GBK"), "UTF-8"));
            taTextResponse.setCaretPosition(0);
            try {
                htmlPane.read(new java.io.ByteArrayInputStream(taTextResponse.getText().getBytes()), doc);
            } catch (IOException e) {
                e.printStackTrace();
            }
            if(doc.getLength() != 0) {
	            htmlPane.setDocument(doc);
	            htmlPane.setCaretPosition(0);
            }
            taTextResponse.requestFocus();

        }
        
        /**
         * Loads the page at the given URL from a separate thread.
         * @param url
         */
        private void loadPage(final String url, final int id, final long begin, 
        		final String usernames, final String passwords, final int port) {
            // create a new thread to load the URL from
            new Thread() {
                public void run() {
                    PostMethod post = new PostMethod("http://" + url + ":" + port + "/szsf/loginaction.action");
                    NameValuePair username = new NameValuePair("user", usernames);
                    NameValuePair password = new NameValuePair("pwd", passwords);
                    NameValuePair method = new NameValuePair("method", "b");
                    post.setRequestBody(new NameValuePair[]{username, password, method});
                    
                    try {
                        int iGetResultCode = client.executeMethod(post);
                        final InputStream in = post.getResponseBodyAsStream();
                        java.io.ByteArrayOutputStream byteout = new java.io.ByteArrayOutputStream(5120);
                        byte[] b = new byte[5120];
                        int len = 0;
                        while((len =in.read(b)) > -1) {
                        	byteout.write(b, 0, len);
                        }
                        
                        final String strGetResponseBody = new String(byteout.toByteArray());//post.getResponseBodyAsString();
                        System.out.println("返回状态为:" + iGetResultCode);

                        if (strGetResponseBody != null) {
                            // set the HTML on the UI thread
                            SwingUtilities.invokeLater(
                                new Runnable() {
                                    public void run() {
                                        try {
											setDocumentContent(strGetResponseBody, in);
										} catch (UnsupportedEncodingException e) {
											e.printStackTrace();
										}
                                    }
                                }
                            );
                        }
                    } catch (Exception ex) {
                        ex.printStackTrace();
                    } finally {
                        post.releaseConnection();
                    }
                }
            }.start();
        }

    }
    
    /**
     * A thread that performs a GET.
	 */
//    static class PostThread extends Thread {
//        
//        private HttpClient httpClient;
//        private PostMethod method;
//        private int id;
//        private long begin;
//        
//        public PostThread(HttpClient httpClient, PostMethod method, int id, long begin) {
//            this.httpClient = httpClient;
//            this.method = method;
//            this.id = id;
//            this.begin = begin;
//            
//        }
//        
//        /**
//         * Executes the GetMethod and prints some satus information.
//         */
//        public void run() {
//            
//            try {
//                
//                System.out.println(id + " - about to get something from " + method.getURI());
//                // execute the method
//                httpClient.executeMethod(method);
//                
//                //System.out.println(id + " - get executed");
//                // get the response body as an array of bytes
//                ///byte[] bytes = method.getResponseBody();
//                
//                //System.out.println(id + " - " + bytes.length + " bytes read");
//                final String resString = method.getResponseBodyAsString();
//                if (resString != null) {
//                    // set the HTML on the UI thread
//                    SwingUtilities.invokeLater(
//                        new Runnable() {
//                            public void run() {
//                                setDocumentContent(resString);
//                            }
//                        }
//                    );
//                }
//                //System.out.println("返回字串为: " + resString);
//                
//            } catch (Exception e) {
//                System.out.println(id + " - error: " + e);
//            } finally {
//                // always release the connection after we're done 
//                method.releaseConnection();
//                //System.out.println(id + " - connection released");
//                System.out.println(id + " begin: " + begin + " end : "+ System.currentTimeMillis() + " cost : " + (System.currentTimeMillis() - begin)/1000.0);
//            }
//        }
//       
//    }    

}

分享到:
评论

相关推荐

    四、使用HttpClient上传测试文件服务器

    在IT行业中,网络通信是不可或缺的一部分,而...理解HttpClient的工作原理和使用方法,对于进行Web服务的测试和集成具有重要意义。在具体应用时,还需要结合实际的服务器接口文档和项目需求,进行适当的调整和优化。

    全栈自动化测试实战 基于testng,httpclient,selenium.appium

    Selenium是一个广泛使用的Web应用程序自动化测试工具,它支持多种浏览器,并且有多种语言绑定,如Java、Python等。Selenium WebDriver是其核心部分,通过模拟用户行为与浏览器进行交互,如点击按钮、填写表单、选择...

    httpClient测试工具

    在使用HttpClient进行web请求时,首先需要创建一个HttpClient实例。这个实例是执行HTTP操作的基础,可以设置各种连接参数,如超时时间、重试策略等。然后,根据需求选择合适的HttpMethod子类,如HttpGet、HttpPost等...

    HTTPClient

    本节将详细介绍如何使用HttpClient 4.x版本来获取HTTP响应的状态码,并对其进行验证。这对于开发人员来说是一个非常实用的功能,可以帮助快速定位请求是否成功、服务器是否正确处理了请求等问题。 **1.2 从...

    httpclient测试登录并提交表单功能

    在Web应用开发过程中,常常需要模拟用户的登录行为及提交表单数据,例如自动化测试、爬虫开发等场景。本示例提供了一个基于Apache HttpClient的解决方案。 #### 示例程序解析 ##### 类结构 示例程序主要由以下几个...

    httpclient4.5.5所有包

    HttpClient 在多个领域都有广泛的应用,如 Web 服务调用、数据抓取、API 接口测试等。例如,开发人员可以使用 HttpClient 进行 RESTful API 的调用,获取 JSON 数据,或者进行自动化测试中的 HTTP 请求模拟。 6. *...

    httpclient httpclient.jar

    在本文中,我们将深入探讨HttpClient的核心概念、使用方法以及如何通过`httpclient.jar`进行实战应用。 首先,HttpClient的主要组件包括: 1. **HttpClient实例**:这是整个HTTP通信的核心,负责管理连接、请求和...

    httpclient-4.5.3官方API中文文档_最新译版_2886K

    HttpClient广泛应用于Web服务调用、爬虫程序、数据同步、自动化测试等领域。例如,在Web服务API调用中,HttpClient可以方便地构造和发送GET、POST请求,获取并解析响应内容;在爬虫程序中,HttpClient可以处理登录、...

    Httpclient依赖包

    在Java应用程序中,HttpClient常用于Web服务的调用、数据抓取或自动化测试等场景。 HttpClient的核心特性包括: 1. **请求构造与执行**:HttpClient允许开发者精确控制HTTP请求的每一个细节,如方法类型(GET、...

    Java HttpClient 全部的jar包

    Java HttpClient 是一个强大的HTTP客户端库,它允许Java开发者在应用程序中发送HTTP请求并接收响应,广泛应用于Web服务的调用、API接口测试以及自动化脚本等场景。在Java项目中,使用HttpClient可以实现与Web服务器...

    web API 单元测试

    本主题将深入探讨如何针对Web API进行单元测试,特别是结合IOC(Inversion of Control)容器如Autofac和UnityContainer,以及使用HttpClient进行远程调用。 首先,让我们理解什么是单元测试。单元测试是一种编程...

    httpclient3.1 javadoc chm版

    它广泛应用于需要与Web服务器进行交互的应用程序中,如数据抓取、网页自动化测试等场景。 二、核心概念 1. HttpClient:HttpClient的核心类,负责发起HTTP请求和接收响应。 2. HttpRequest:表示一个HTTP请求,包含...

    commons-httpclient相关jar包

    这个库为开发者提供了丰富的功能,使得与Web服务器进行交互变得更加简单和高效。在提供的压缩包中,包含以下三个关键的jar文件: 1. **commons-codec-1.4.jar**: 这个库是Apache Commons Codec,它提供了各种编码和...

    httpclient-4.5.6.rar

    HttpClient 4.5.6 版本对之前的版本进行了优化,修复了一些已知问题,提升了整体的稳定性和兼容性。 二、HttpClient 4.5.6 的新特性 1. **连接管理**:HttpClient 4.5.6 引入了更先进的连接管理策略,允许用户...

    httpclient4.0

    - 自动化测试:模拟用户行为,测试 Web 应用功能。 总结,HttpClient 4.0 作为 Java 中的网络通信库,其强大的功能和灵活性使得它在各种项目中都得到了广泛的应用。理解和熟练使用 HttpClient 4.0,对于提升 Java ...

    HttpClient所需JAR包

    HttpClient是Apache基金会开发的...总的来说,HttpClient是一个强大且灵活的HTTP客户端工具,对于任何需要与Web服务器进行交互的Java应用来说都是不可或缺的。正确理解和使用HttpClient,可以提高程序的效率和可靠性。

    org.apache.commons.httpclient-3.1.jar

    此库特别适用于需要与Web服务器进行复杂交互的应用程序,如Web服务客户端、数据抓取或自动化测试工具。 核心特性: 1. **多协议支持**:HttpClient支持HTTP/1.0和HTTP/1.1协议,同时提供了对HTTPS的安全连接支持。 ...

    Ionic+Angular+Express实现前后端交互使用HttpClient发送get请求数据并加载显示示例代码.zip

    这是一个常见的应用场景,对于开发跨平台移动应用或者Web应用来说至关重要。 首先,让我们了解这三个技术的核心概念: 1. **Ionic**:是一个开源的HTML5移动应用框架,基于Angular和Web组件技术,用于构建原生感观...

    httpclient4.4

    HttpClient 4.4作为一个成熟的HTTP客户端库,广泛应用于各种Java应用程序,包括Web服务客户端、数据抓取、自动化测试等领域。其强大的功能和易用性,使得开发者能够高效地处理网络通信任务,而无需关注底层细节。...

    HttpClient基本功能使用(结合Struts2传参)

    HttpClient是Apache基金会开发的一个HTTP客户端API,用于在Java应用程序中执行HTTP请求。...通过理解和熟练掌握HttpClient的使用,可以提高我们的Web应用开发效率,同时增强系统的稳定性和可靠性。

Global site tag (gtag.js) - Google Analytics