Kiểm tra nhiều URL đồng thời

Trong chương này, chúng ta sẽ học cách kiểm tra nhiều URL đồng thời. Đối với điều đó, chúng tôi sẽ cần chỉnh sửa tệp ứng dụng của mình, app.py để bao gồm hai URL -

from bottle import Bottle, run

app = 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)

Tạo một tập lệnh Shell đơn giản

Bạn có thể làm điều này bằng cách tạo một tập lệnh shell, với nhiều lệnh gọi ab. Tạo một tệp test.sh và thêm các dòng sau vào tệp đó:

ab -n 100 -c 10 http://127.0.0.1:8080/hello1 
ab -n 100 -c 10 http://127.0.0.1:8080/hello2

Khi bạn đã thêm các dòng trên, Lưu và Đóng tệp. Làm cho tệp thực thi được -

chmod u+x test.sh

Bây giờ chúng ta hãy chạy script -

./test.sh

Để tránh lặp lại và mục đích rõ ràng, chúng tôi sẽ chỉ hiển thị phần liên quan của đầu ra ab, chỉ ra bằng dấu chấm phần nào đã bị bỏ qua, như trong phần sau.

Đầu ra

.
.
.
Document Path:          /hello1
Document Length:        732 bytes

Concurrency Level:      10
Time taken for tests:   0.040 seconds
Complete requests:      100
Failed requests:        0
Non-2xx responses:      100
Total transferred:      90000 bytes
HTML transferred:       73200 bytes
Requests 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] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.8      0       3
Processing:     1    3   1.0      4       5
Waiting:        0    3   1.2      4       4
Total:          1    4   0.6      4       5
WARNING: The median and mean for the processing time are not within a normal deviation
        These results are probably not that reliable.
.
.
.

Shell Script để lưu đầu ra Apache Bench vào một tệp

Bạn có thể lưu Đầu ra của Apache Bench vào tệp bằng cách tạo một tập lệnh shell, với nhiều lệnh gọi ab. Ở cuối mỗi dòng, đặt một&;điều này làm cho lệnh chạy trong nền và cho phép lệnh tiếp theo bắt đầu thực thi. Bạn cũng sẽ muốn chuyển hướng đầu ra đến một tệp cho mỗi url bằng cách sử dụng <tên tệp>. Ví dụ: tệp test.sh của chúng tôi sẽ trông giống như sau sau khi sửa đổi:

$ 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 &

Đây, test1.txttest2.txt là các tệp để lưu dữ liệu đầu ra.

Bạn có thể kiểm tra xem tập lệnh trên đã tạo hai tệp, test1.txt và test2.txt chứa đầu ra ab cho các URL tương ứng hay chưa -

$ ls -l

Đầu ra

...
-rw-r--r-- 1 root root  5225 May 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
...

Tình huống đề phòng

Trong khi sử dụng ab, bạn nên cảnh giác với việc kiểm tra không thành công mà không có cảnh báo. Ví dụ: nếu bạn kiểm tra một URL sai, bạn có thể nhận được một cái gì đó tương tự như sau (chúng tôi đã cố tình thay đổi cổng ở đây).

$ ab -l -r -n 100 -c 10 -k -H "Accept-Encoding: gzip, deflate"  http://127.0.0.1:805/

Đầu ra

This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient).....done

Server Software:
Server Hostname:        127.0.0.1
Server Port:            805

Document Path:          /
Document Length:        Variable

Concurrency Level:      10
Time taken for tests:   0.002 seconds
Complete requests:      100
Failed requests:        150
   (Connect: 0, Receive: 100, Length: 0, Exceptions: 50)
Keep-Alive requests:    0
Total transferred:      0 bytes
HTML transferred:       0 bytes
Requests 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] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.0      0       0
Processing:     0    0   0.2      0       0
Waiting:        0    0   0.0      0       0
Total:          0    0   0.2      0       0

Percentage 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)