http_load is simple open source tool sends multiple HTTP requests in parallel. It runs a single thread picking up URLs randomly from an input file. Both HTTP and HTTPS are supported.

0. Build http_load

Build http_load is quite simple.

tar xvf http_load-12mar2006.tar.gz

  • Start terminal, go to the extracted directory, and type make to build it.
  • Start http_load by ./http_load command.

1. Use http_load for HTTP testing

1.1 Controlling Request Rate

http_load supports a few options. We can control the request rate by either -parallel or -rate. parallel indicates the number of concurrent connections. For example, if we specify -parallel 5, then http_load will try to establish and maintain (create new connection once a connection is closed) 5 connections, and send out one request through each connection.

Rate controls the request rate in a different manner. It refers to number of requests sent out per second. If we specify -rate 5, then http_load will make 5 requests per second. It will determine how many connections to open internally. We can specify either parallel or rate, but not both.

1.2 Controlling Test Time

Another important parameter is seconds, it allows us to specify how long the test should run. Or we can specify fetches, which indicates the number of requests to send for the entire test.

1.3 Specify Test URLs

The last parameter is always the url_file, a file which contains a list of URLs for test. http_load will read all URLs at the beginning and randomly pick up one for each request. There’re a few other parameters, one can refer to http_load help message for more info.

1.4 An Example

As an example, suppose we have a URL file named urls.txt contains the following URLs.

http://en.wikipedia.org/wiki/Hello_world_program
http://en.wikipedia.org/wiki/Computer_program
http://en.wikipedia.org/wiki/Computer_multitasking
http://en.wikipedia.org/wiki/Computer_process
http://en.wikipedia.org/wiki/Context_switch
http://en.wikipedia.org/wiki/Central_processing_unit
http://en.wikipedia.org/wiki/Integrated_circuit
http://en.wikipedia.org/wiki/Microchip_(disambiguation)
http://en.wikipedia.org/wiki/Microchip_implant_(animal)
http://en.wikipedia.org/wiki/Penguins

Then if we want to simulate 5 users sending requests for 10 seconds, we can specify the command as below,

./http_load -parallel 5 -seconds 10 urls.txt

http_load will output the results once the test is completed.

From the results, we can read the min, max and average response time, and throughput (No. of fetches per second) etc.

2. Use http_load for HTTPS Testing

2.1 Compile http_load with HTTPS support

By default, HTTPS support is disabled. We can enable the HTTPS by uncomment the lines below in the Makefile.

#SSL_TREE =     /usr/local/ssl
#SSL_DEFS =     -DUSE_SSL
#SSL_INC =      -I$(SSL_TREE)/include
#SSL_LIBS =     -L$(SSL_TREE)/lib -lssl –lcrypto

Once enabled the above lines, simply type the following commands in terminal to build it.

make clean
make

2.2 An Example

HTTPS test works the same as HTTP test. Suppose we have the URLs below in a file named surls.txt.

https://github.com/

And another file named surls2.txt.

https://chrome.google.com/webstore/category/home
https://chrome.google.com/webstore/category/popular
https://chrome.google.com/webstore/category/from_your_circles
https://chrome.google.com/webstore/category/trending
https://chrome.google.com/webstore/category/collections
https://chrome.google.com/webstore/category/collection/perfect_date
https://chrome.google.com/webstore/category/collection/football
https://chrome.google.com/webstore/detail/gocaejggjgdmkhmbinicknpbhagkblop
https://chrome.google.com/webstore/category/collection/editors_picks
https://chrome.google.com/webstore/category/app/3-games

We first test with surls.txt, and below is the result.

Then surls2.txt, and below is the result.

The result for surls.txt seems wired. As we’re increasing the number of parallel connections, the response time increases too. For website like github.com, it’s unlikely to be the server side issue. Could it be the client side issue? NO. Because test with surls2.txt shows the client can take care of 30 parallel connections just fine. So WHY? We investigate this issue in next post.

 

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Set your Twitter account name in your settings to use the TwitterBar Section.