Menguji Aplikasi Sampel Kami
Di bab sebelumnya, kami memahami penggunaan dasar Apache Bench untuk menguji situs web pihak ketiga. Di bagian ini, kami akan menggunakan alat ini untuk menguji aplikasi web di server kami sendiri. Agar tutorial tetap mandiri sejauh mungkin, kami telah memilih untuk menginstal aplikasi python untuk tujuan demonstrasi; Anda dapat memilih bahasa lain seperti PHP atau Ruby tergantung pada tingkat keahlian Anda.
Menginstal Python
Umumnya, Python diinstal secara default di server Linux.
Memasang Kerangka Botol dan Membuat Aplikasi Sederhana
Bottle adalah kerangka mikro yang ditulis dengan python untuk membuat aplikasi web, dan pip adalah pengelola paket python. Ketik perintah berikut di terminal untuk menginstal Bottle -
$ sudo apt-get install python-pip
$ sudo pip install bottle
Sekarang mari kita buat aplikasi Botol kecil. Untuk itu, buat direktori dan pindahkan di dalamnya -
$ mkdir webapp
$ cd webapp
Kami akan membuat skrip python baru, app.py, di dalam direktori webapp -
$ vim app.py
Sekarang, tulis kode berikut di file app.py -
from bottle import Bottle, run
app = Bottle()
@app.route('/')
@app.route('/hello')
def hello():
return "Hello World!"
run(app, host = 'localhost', port = 8080)
Setelah Anda menambahkan baris di atas, simpan dan tutup file. Setelah menyimpan file, kita dapat menjalankan skrip python untuk meluncurkan aplikasi -
$ python app.py
Output
Bottle v0.12.7 server starting up (using WSGIRefServer())...
Listening on http://localhost:8080/
Hit Ctrl-C to quit.
Output ini menunjukkan bahwa aplikasi kita berjalan di mesin lokal di host http://localhost dan mendengarkan di pelabuhan 8080.
Mari kita periksa apakah aplikasi kita merespons dengan benar permintaan HTTP. Karena terminal ini tidak dapat menerima masukan apa pun tanpa berhenti melayani aplikasi Botol, kita perlu masuk ke VPS dengan terminal lain. Setelah masuk ke VPS dengan terminal lain, Anda dapat menavigasi ke aplikasi Anda dengan mengetikkan kode berikut di terminal baru.
$ lynx http://localhost:8080/
Lynx adalah browser baris perintah dan biasanya diinstal secara default di berbagai distribusi Linux seperti Debian dan Ubuntu. Jika Anda melihat keluaran berikut, artinya aplikasi Anda berfungsi dengan baik.
Output
Jika Anda melihat keluaran di atas, itu berarti aplikasi kita hidup dan siap untuk diuji.
Menguji Aplikasi dengan Developmental Web Server
Harap dicatat bahwa ada bug di ab, dan itu tidak dapat menguji aplikasi di localhost. Jadi kami akan mengubah host dari localhost menjadi 127.0.0.1 di file app.py. Jadi file tersebut akan berubah menjadi berikut -
from bottle import Bottle, run
app = Bottle()
@app.route('/')
@app.route('/hello')
def hello():
return "Hello World!"
run(app, host = '127.0.0.1', port = 8080)
Sekarang mari kita uji aplikasi kita dengan mengetikkan perintah berikut di terminal yang sama tempat menjalankan perintah lynx -
$ ab -n 100 -c 10 http://127.0.0.1:8080/hello
Output
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: WSGIServer/0.1
Server Hostname: 127.0.0.1
Server Port: 8080
Document Path: /hello
Document Length: 12 bytes
Concurrency Level: 10
Time taken for tests: 0.203 seconds
Complete requests: 100
Failed requests: 0
Total transferred: 16500 bytes
HTML transferred: 1200 bytes
Requests per second: 493.78 [#/sec] (mean)
Time per request: 20.252 [ms] (mean)
Time per request: 2.025 [ms] (mean, across all concurrent requests)
Transfer rate: 79.56 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 0
Processing: 1 6 28.2 2 202
Waiting: 1 6 28.2 2 202
Total: 1 6 28.2 2 202
Percentage of the requests served within a certain time (ms)
50% 2
66% 2
75% 2
80% 2
90% 2
95% 2
98% 202
99% 202
100% 202 (longest request)
Sedangkan output pada terminal pertama adalah (100 kali) sebagai berikut -
...
127.0.0.1 - - [10/Jun/2017 04:30:26] "GET /hello HTTP/1.0" 200 12
127.0.0.1 - - [10/Jun/2017 04:30:26] "GET /hello HTTP/1.0" 200 12
127.0.0.1 - - [10/Jun/2017 04:30:26] "GET /hello HTTP/1.0" 200 12
...
Anda dapat mengamati bagaimana berbagai nilai hasil ab telah berubah dibandingkan dengan tes awal.
Menguji Aplikasi dengan Multi-Threaded Web Server
Dalam pengujian ab sebelumnya, kami telah menggunakan server web default yang dibundel dalam kerangka kerja Bottle.
Sekarang kita akan mengubah server web default utas tunggal dengan yang multi utas. Oleh karena itu, mari kita instal perpustakaan server web multi-utas seperticherrypy atau gunicorndan beri tahu Bottle untuk menggunakannya. Kami telah memilih gunicorn untuk tujuan demonstrasi di sini (Anda juga dapat memilih yang lain) -
$ sudo apt-get install gunicorn
Dan memodifikasi file, yaitu mengubah dari web server default menjadi gunicorn -
...
run(server = 'gunicorn'...)
...
Mari kita uji aplikasi di terminal kedua.
$ ab -n 100 -c 10 http://127.0.0.1:8080/hello
Output
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: gunicorn/19.0.0
Server Hostname: 127.0.0.1
Server Port: 8080
Document Path: /hello
Document Length: 12 bytes
Concurrency Level: 10
Time taken for tests: 0.031 seconds
Complete requests: 100
Failed requests: 0
Total transferred: 17200 bytes
HTML transferred: 1200 bytes
Requests per second: 3252.77 [#/sec] (mean)
Time per request: 3.074 [ms] (mean)
Time per request: 0.307 [ms] (mean, across all concurrent requests)
Transfer rate: 546.36 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1 0.9 0 4
Processing: 1 2 0.7 3 4
Waiting: 0 2 0.8 2 3
Total: 2 3 0.6 3 5
WARNING: The median and mean for the initial connection time are not within a normal
deviation These results are probably not that reliable.
WARNING: The median and mean for the processing time are not within a normal deviation
These results are probably not that reliable.
Percentage of the requests served within a certain time (ms)
50% 3
66% 3
75% 3
80% 3
90% 4
95% 5
98% 5
99% 5
100% 5 (longest request)
Perhatikan bagaimana Permintaan per detik meningkat dari 493 menjadi 3252. Artinya, gunicorn cocok sebagai server produksi untuk aplikasi python.