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.
- Download the code archieve from http://www.acme.com/software/http_load/.
- Extract the source code from the arhieve using
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.
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.
2.2 An Example
HTTPS test works the same as HTTP test. Suppose we have the URLs below in a file named surls.txt.
And another file named surls2.txt.
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.
40% Discount on My Book — Android NDK CookbookAndroid NDK Cookbook ebook 40% discount with promotion code MREANC40 at Packt Publishing The promotion code is valid until 15th June.
- Android Apps (18)
- Android Tutorial (27)
- Code Snippet (2)
- Coding Beyond Technique (18)
- Compilers and Related (2)
- ELF (2)
- Computer Languages (31)
- Data Structure & Algorithms (29)
- Database (1)
- SQLite (1)
- Digital Signal Processing (33)
- Distributed Systems (17)
- Linux Study Notes (40)
- Machinery (30)
- misc (1)
- My Ideas (1)
- My Project (3)
- My Publication (1)
- My Readings (1)
- Networking (15)
- Program for Performance (8)
- Uncategorized (1)
- Virtual Machine (2)
- Web Dev (8)
- web components (3)
- May 2013 (2)
- April 2013 (1)
- March 2013 (4)
- December 2012 (2)
- November 2012 (6)
- October 2012 (6)
- September 2012 (3)
- August 2012 (13)
- July 2012 (15)
- June 2012 (3)
- May 2012 (8)
- April 2012 (4)
- March 2012 (13)
- February 2012 (19)
- January 2012 (9)
- December 2011 (11)
- November 2011 (12)
- October 2011 (4)
- September 2011 (12)
- August 2011 (16)
- July 2011 (15)
- June 2011 (6)
- May 2011 (10)
- April 2011 (13)
- March 2011 (20)
- February 2011 (4)
- November 2010 (2)
- May 2010 (1)
- April 2010 (1)
- February 2010 (1)