diff options
-rw-r--r-- | CHANGES | 4 | ||||
-rw-r--r-- | docs/manual/programs/ab.xml | 6 | ||||
-rw-r--r-- | support/ab.c | 27 |
3 files changed, 30 insertions, 7 deletions
@@ -1,6 +1,10 @@ -*- coding: utf-8 -*- Changes with Apache 2.5.0 + *) ab: Add a new -l parameter in order not to check the length of the responses. + This can be usefull with dynamic pages. + PR9945, PR27888, PR42040 [<ccikrs1 cranbrook edu>] + *) mod_ssl: Fix possible truncation of OCSP responses when reading from the server. [Joe Orton] diff --git a/docs/manual/programs/ab.xml b/docs/manual/programs/ab.xml index 660fd4737a..640b132193 100644 --- a/docs/manual/programs/ab.xml +++ b/docs/manual/programs/ab.xml @@ -49,6 +49,7 @@ [ -<strong>H</strong> <var>custom-header</var> ] [ -<strong>i</strong> ] [ -<strong>k</strong> ] + [ -<strong>l</strong> ] [ -<strong>n</strong> <var>requests</var> ] [ -<strong>p</strong> <var>POST-file</var> ] [ -<strong>P</strong> <var>proxy-auth-username</var>:<var>password</var> ] @@ -127,6 +128,11 @@ <dd>Enable the HTTP KeepAlive feature, <em>i.e.</em>, perform multiple requests within one HTTP session. Default is no KeepAlive.</dd> + <dt><code>-l</code></dt> + <dd>Do not report errors if the length of the responses is not constant. This + can be usefull for dynamic pages. + </dd> + <dt><code>-n <var>requests</var></code></dt> <dd>Number of requests to perform for the benchmarking session. The default is to just perform a single request which usually leads to diff --git a/support/ab.c b/support/ab.c index 5fb6bf81c2..95bf2edf20 100644 --- a/support/ab.c +++ b/support/ab.c @@ -273,6 +273,7 @@ int requests = 1; /* Number of requests to make */ int heartbeatres = 100; /* How often do we say we're alive */ int concurrency = 1; /* Number of multiple requests to make */ int percentile = 1; /* Show percentile served */ +int nolength = 0; /* Accept variable document length */ int confidence = 1; /* Show confidence estimator and warnings */ int tlimit = 0; /* time limit in secs */ int keepalive = 0; /* try and do keepalive connections */ @@ -787,7 +788,10 @@ static void output_results(int sig) #endif printf("\n"); printf("Document Path: %s\n", path); - printf("Document Length: %" APR_SIZE_T_FMT " bytes\n", doclen); + if (nolength) + printf("Document Length: Variable\n"); + else + printf("Document Length: %" APR_SIZE_T_FMT " bytes\n", doclen); printf("\n"); printf("Concurrency Level: %d\n", concurrency); printf("Time taken for tests: %.3f seconds\n", timetaken); @@ -1059,9 +1063,14 @@ static void output_html_results(void) printf("<tr %s><th colspan=2 %s>Document Path:</th>" "<td colspan=2 %s>%s</td></tr>\n", trstring, tdstring, tdstring, path); - printf("<tr %s><th colspan=2 %s>Document Length:</th>" - "<td colspan=2 %s>%" APR_SIZE_T_FMT " bytes</td></tr>\n", - trstring, tdstring, tdstring, doclen); + if (nolength) + printf("<tr %s><th colspan=2 %s>Document Length:</th>" + "<td colspan=2 %s>Variable</td></tr>\n", + trstring, tdstring, tdstring); + else + printf("<tr %s><th colspan=2 %s>Document Length:</th>" + "<td colspan=2 %s>%" APR_SIZE_T_FMT " bytes</td></tr>\n", + trstring, tdstring, tdstring, doclen); printf("<tr %s><th colspan=2 %s>Concurrency Level:</th>" "<td colspan=2 %s>%d</td></tr>\n", trstring, tdstring, tdstring, concurrency); @@ -1299,7 +1308,7 @@ static void close_connection(struct connection * c) /* first time here */ doclen = c->bread; } - else if (c->bread != doclen) { + else if ((c->bread != doclen) && !nolength) { bad++; err_length++; } @@ -1543,7 +1552,7 @@ static void read_connection(struct connection * c) /* first time here */ doclen = c->bread; } - else if (c->bread != doclen) { + else if ((c->bread != doclen) && !nolength) { bad++; err_length++; } @@ -1907,6 +1916,7 @@ static void usage(const char *progname) fprintf(stderr, " -d Do not show percentiles served table.\n"); fprintf(stderr, " -S Do not show confidence estimators and warnings.\n"); fprintf(stderr, " -q Do not show progress when doing more than 150 requests\n"); + fprintf(stderr, " -l Accept variable document length (use this for dynamic pages)\n"); fprintf(stderr, " -g filename Output collected data to gnuplot format file.\n"); fprintf(stderr, " -e filename Output CSV file with percentages served\n"); fprintf(stderr, " -r Don't exit on socket receive errors.\n"); @@ -2091,7 +2101,7 @@ int main(int argc, const char * const argv[]) myhost = NULL; /* 0.0.0.0 or :: */ apr_getopt_init(&opt, cntxt, argc, argv); - while ((status = apr_getopt(opt, "n:c:t:s:b:T:p:u:v:rkVhwix:y:z:C:H:P:A:g:X:de:SqB:" + while ((status = apr_getopt(opt, "n:c:t:s:b:T:p:u:v:lrkVhwix:y:z:C:H:P:A:g:X:de:SqB:" #ifdef USE_SSL "Z:f:" #endif @@ -2153,6 +2163,9 @@ int main(int argc, const char * const argv[]) method = PUT; send_body = 1; break; + case 'l': + nolength = 1; + break; case 'r': recverrok = 1; break; |