httpclient.HttpBenchmark.java Source code

Java tutorial

Introduction

Here is the source code for httpclient.HttpBenchmark.java

Source

/*
 * $HeadURL$
 * $Revision: 1.1 $
 * $Date: 2007/10/25 09:29:57 $
 *
 * ====================================================================
 *
 *  Licensed to the Apache Software Foundation (ASF) under one or more
 *  contributor license agreements.  See the NOTICE file distributed with
 *  this work for additional information regarding copyright ownership.
 *  The ASF licenses this file to You under the Apache License, Version 2.0
 *  (the "License"); you may not use this file except in compliance with
 *  the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 * ====================================================================
 *
 * This software consists of voluntary contributions made by many
 * individuals on behalf of the Apache Software Foundation.  For more
 * information on the Apache Software Foundation, please see
 * <http://www.apache.org/>.
 *
 */
package httpclient;

import org.apache.http.HttpVersion;
import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.HttpClients;

/**
 * <p>A simple HTTP benchmark tool, which implements a subset of AB (Apache Benchmark) interface</p>
 * 
 * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
 *
 * @version $Revision: 1.1 $
 */
public class HttpBenchmark {

    private static HttpClient createRequestExecutor() {
        HttpClient httpclient = HttpClients.createDefault();
        //        httpclient.getParams().setVersion(HttpVersion.HTTP_1_1);
        //        httpclient.getParams().setBooleanParameter(HttpMethodParams.USE_EXPECT_CONTINUE, false);
        //        httpclient.getHttpConnectionManager().getParams().setStaleCheckingEnabled(false);
        return httpclient;
    }

    public static void main(String[] args) throws Exception {

        //        Option iopt = new Option("i", false, "Do HEAD requests instead of GET.");
        //        iopt.setRequired(false);
        //        
        //        Option kopt = new Option("k", false, "Enable the HTTP KeepAlive feature, " +
        //                "i.e., perform multiple requests within one HTTP session. " +
        //                "Default is no KeepAlive");
        //        kopt.setRequired(false);
        //        
        //        Option nopt = new Option("n", true, "Number of requests to perform for the " +
        //                "benchmarking session. The default is to just perform a single " +
        //                "request which usually leads to non-representative benchmarking " +
        //                "results.");
        //        nopt.setRequired(false);
        //        nopt.setArgName("requests");
        //        
        //        Option popt = new Option("p", true, "File containing data to POST.");
        //        popt.setRequired(false);
        //        popt.setArgName("POST-file");
        //
        //        Option Topt = new Option("T", true, "Content-type header to use for POST data.");
        //        Topt.setRequired(false);
        //        Topt.setArgName("content-type");
        //
        //        Option vopt = new Option("v", true, "Set verbosity level - 4 and above prints " +
        //                "information on headers, 3 and above prints response codes (404, 200, " +
        //                "etc.), 2 and above prints warnings and info.");
        //        vopt.setRequired(false);
        //        vopt.setArgName("verbosity");
        //
        //        Option hopt = new Option("h", false, "Display usage information.");
        //        nopt.setRequired(false);
        //        
        //        Options options = new Options();
        //        options.addOption(iopt);
        //        options.addOption(kopt);
        //        options.addOption(nopt);
        //        options.addOption(popt);
        //        options.addOption(Topt);
        //        options.addOption(vopt);
        //        options.addOption(hopt);
        //
        //        if (args.length == 0) {
        //            showUsage(options);
        //            System.exit(1);
        //        }
        //        
        //        CommandLineParser parser = new PosixParser();
        //        CommandLine cmd = parser.parse(options, args);
        //        
        //        if (cmd.hasOption('h')) {
        //            showUsage(options);
        //            System.exit(1);
        //        }
        //        
        //        int verbosity = 0;
        //        if(cmd.hasOption('v')) {
        //            String s = cmd.getOptionValue('v');
        //            try {
        //                verbosity = Integer.parseInt(s);
        //            } catch (NumberFormatException ex) {
        //                System.err.println("Invalid verbosity level: " + s);
        //                showUsage(options);
        //                System.exit(-1);
        //            }
        //        }
        //        
        //        boolean keepAlive = false;
        //        if(cmd.hasOption('k')) {
        //            keepAlive = true;
        //        }
        //        
        //        int num = 1;
        //        if(cmd.hasOption('n')) {
        //            String s = cmd.getOptionValue('n');
        //            try {
        //                num = Integer.parseInt(s);
        //            } catch (NumberFormatException ex) {
        //                System.err.println("Invalid number of requests: " + s);
        //                showUsage(options);
        //                System.exit(-1);
        //            }
        //        }
        //        
        //        args = cmd.getArgs();
        //        if (args.length != 1) {
        //            showUsage(options);
        //            System.exit(-1);
        //        }
        //        // Parse the target url 
        //        URL url = new URL(args[0]); 
        //        
        //        // Prepare host configuration
        //        HostConfiguration hostconf = new HostConfiguration();
        //        hostconf.setHost(
        //                url.getHost(), 
        //                url.getPort(), 
        //                url.getProtocol());
        //        
        //        // Prepare request
        //        HttpMethod method = null;
        //        if (cmd.hasOption('p')) {
        //            PostMethod httppost = new PostMethod(url.getPath());
        //            File file = new File(cmd.getOptionValue('p'));
        //            if (!file.exists()) {
        //                System.err.println("File not found: " + file);
        //                System.exit(-1);
        //            }
        //            String contenttype = null;
        //            if (cmd.hasOption('T')) {
        //                contenttype = cmd.getOptionValue('T'); 
        //            }
        //            FileRequestEntity entity = new FileRequestEntity(file, contenttype);
        //            httppost.setRequestEntity(entity);
        //            if (file.length() > 100000) {
        //                httppost.setContentChunked(true);
        //            }
        //            method = httppost;
        //        } else if (cmd.hasOption('i')) {
        //            HeadMethod httphead = new HeadMethod(url.getPath());
        //            method = httphead;
        //        } else {
        //            GetMethod httpget = new GetMethod(url.getPath());
        //            method = httpget;
        //        }
        //        if (!keepAlive) {
        //            method.addRequestHeader("Connection", "close");
        //        }

        // Prepare request executor
        //        HttpClient executor = createRequestExecutor();
        //        BenchmarkWorker worker = new BenchmarkWorker(executor, verbosity);
        //        
        //        // Execute
        //        Stats stats = worker.execute(hostconf, method, num, keepAlive);
        //        
        //        // Show the results
        //        float totalTimeSec = (float)stats.getDuration() / 1000;
        //        float reqsPerSec = (float)stats.getSuccessCount() / totalTimeSec; 
        //        float timePerReqMs = (float)stats.getDuration() / (float)stats.getSuccessCount(); 
        //        
        //        System.out.print("Server Software:\t");
        //        System.out.println(stats.getServerName());
        //        System.out.print("Server Hostname:\t");
        //        System.out.println(hostconf.getHost());
        //        System.out.print("Server Port:\t\t");
        //        if (hostconf.getPort() > 0) {
        //            System.out.println(hostconf.getPort());
        //        } else {
        //            System.out.println(hostconf.getProtocol().getDefaultPort());
        //        }
        //        System.out.println();
        //        System.out.print("Document Path:\t\t");
        //        System.out.println(method.getURI());
        //        System.out.print("Document Length:\t");
        //        System.out.print(stats.getContentLength());
        //        System.out.println(" bytes");
        //        System.out.println();
        //        System.out.print("Time taken for tests:\t");
        //        System.out.print(totalTimeSec);
        //        System.out.println(" seconds");
        //        System.out.print("Complete requests:\t");
        //        System.out.println(stats.getSuccessCount());
        //        System.out.print("Failed requests:\t");
        //        System.out.println(stats.getFailureCount());
        //        System.out.print("Content transferred:\t");
        //        System.out.print(stats.getTotal());
        //        System.out.println(" bytes");
        //        System.out.print("Requests per second:\t");
        //        System.out.print(reqsPerSec);
        //        System.out.println(" [#/sec] (mean)");
        //        System.out.print("Time per request:\t");
        //        System.out.print(timePerReqMs);
        //        System.out.println(" [ms] (mean)");
    }

    //    private static void showUsage(final Options options) {
    ////        HelpFormatter formatter = new HelpFormatter();
    ////        formatter.printHelp("HttpBenchmark [options] [http://]hostname[:port]/path", options);
    //    }

}