在本章中,我们将学习如何同时测试多个URL.为此,我们需要编辑我们的应用程序文件app.py以包含两个URL :
from bottle import Bottle, runapp = Bottle()@app.route('/')@app.route('/hello1')def hello(): return "Hello World! It is first URL."@app.route('/hello2')def hello(): return "Hello World! It is second URL."run(app,server = 'gunicorn',host = '127.0.0.1', port = 8080)
创建一个简单Shell脚本
您可以通过创建具有多个ab调用的shell脚本来完成此操作.创建一个文件test.sh并添加以下行并减去;
ab -n 100 -c 10 http://127.0.0.1 :8080/hello1 ab -n 100 -c 10 http://127.0.0.1:8080/hello2
当你添加了以上内容时行,保存并关闭文件.使文件可执行 :
chmod u + x test.sh
现在让我们运行脚本 :
./test.sh
为了避免重复和清晰的目的,我们将仅显示ab输出的相关性,通过点指示哪些部分被省略,如下所示.
输出
...Document Path: /hello1Document Length: 732 bytesConcurrency Level: 10Time taken for tests: 0.040 secondsComplete requests: 100Failed requests: 0Non-2xx responses: 100Total transferred: 90000 bytesHTML transferred: 73200 bytesRequests per second: 2496.13 [#/sec] (mean)Time per request: 4.006 [ms] (mean)Time per request: 0.401 [ms] (mean, across all concurrent requests)Transfer rate: 2193.87 [Kbytes/sec] receivedConnection Times (ms) min mean[+/-sd] median maxConnect: 0 0 0.8 0 3Processing: 1 3 1.0 4 5Waiting: 0 3 1.2 4 4Total: 1 4 0.6 4 5WARNING: The median and mean for the processing time are not within a normal deviation These results are probably not that reliable....
将Apache Bench输出保存到文件的Shell脚本
您可以将Apache Bench输出保存到文件中创建一个带有多个ab调用的shell脚本.在每一行的末尾,放置一个& ;; 这使得命令在后台运行,并让下一个命令开始执行.您还需要使用< filename>将输出重定向到每个URL的文件.例如,我们的文件test.sh在修改后会显示如下 :
$ ab -n 100 -c 10 http://127.0.0.1:8080/hello1> test1.txt& $ ab -n 100 -c 10 http://127.0.0.1:8080/hello2> test2.txt&
此处, test1.txt 和 test2.txt 是保存输出数据的文件.
您可以检查上面的脚本是否创建了两个文件test1.txt和test2.txt,其中包含各个URL的ab输出 :
$ ls -l
输出
... -rw-r - r-- 1 root root 5225 5月30日12:11 out.data -rwxr - r-- 1 root root 118 Jun 10 12:24 test.sh -rw-r - r-- 1 root root 1291 Jun 10 12:31 test1.txt -rwxr - r-- 1 root root 91 Jun 10 13 :22 test2.sh -rw-r - r-- 1 root root 1291 Jun 10 12:31 test2.txt ...
注销情况
使用ab时,您应该在没有警告的情况下警惕失败的测试.例如,如果您检查错误的URL,您可能会得到类似于以下内容的内容(我们故意在此更改端口).
$ ab -l -r -n 100 -c 10 -k -H"Accept-Encoding:gzip,deflate"http://127.0.0.1:805/
输出
This is ApacheBench, Version 2.3 <$Revision: 1604373 $>Copyright 1996 Adam Twiss, Zeus Technology Ltd, https://img01.yuandaxia.cn/Content/img/tutorials/apache_bench/yuebofa.phpLicensed to The Apache Software Foundation, https://img01.yuandaxia.cn/Content/img/tutorials/apache_bench/Benchmarking 127.0.0.1 (be patient).....doneServer Software:Server Hostname: 127.0.0.1Server Port: 805Document Path: /Document Length: VariableConcurrency Level: 10Time taken for tests: 0.002 secondsComplete requests: 100Failed requests: 150 (Connect: 0, Receive: 100, Length: 0, Exceptions: 50)Keep-Alive requests: 0Total transferred: 0 bytesHTML transferred: 0 bytesRequests per second: 44984.26 [#/sec] (mean)Time per request: 0.222 [ms] (mean)Time per request: 0.022 [ms] (mean, across all concurrent requests)Transfer rate: 0.00 [Kbytes/sec] receivedConnection Times (ms) min mean[+/-sd] median maxConnect: 0 0 0.0 0 0Processing: 0 0 0.2 0 0Waiting: 0 0 0.0 0 0Total: 0 0 0.2 0 0Percentage of the requests served within a certain time (ms) 50% 0 66% 0 75% 0 80% 0 90% 0 95% 0 98% 0 99% 0 100% 0 (longest request)