使用curl建立簡單的效能監控工具
阿新 • • 發佈:2019-12-11
cURL,全稱Command Line URL viewer,是一種命令列工具,用來發送網路請求,然後得到和提取資料,顯示在標準輸出(stdout)。
我們可以使用curl來獲取網頁的原始碼,顯示頭資訊,顯示通訊過程等。
在做基於http的介面測試的時候,curl基本上可以完成postman所具備的大部分功能,如果你習慣於使用命令列,那麼curl是一個非常有用且常用的工具。
CURL的基本使用
檢視網頁原始碼
curl www.itest.info
檢視response的headers
curl -i www.itest.info
顯示通訊過程
curl -v www.itest.info
常用引數
使用curl傳送GET請求時有一些常用引數。
- -o: output,將輸出的結果重定向到一個檔案
- -s: slient, 不顯示進度資訊
- -w: 展示多維度的統計資訊
統計請求耗時
使用下面的這條curl命令可以統計出請求的耗時。
curl www.itest.info -o /dev/null -s -w "%{time_total}\n"
其中我們把輸出丟棄了(重定向到/dev/null裡),並且不顯示進度資訊,只展示請求的總耗時。
工具化
基於curl的統計請求耗時的能力,我們可以寫一個簡單的工具呼叫curl,然後打印出該請求的耗時。
下面是我用python寫的一個簡單例子。
# curl_tool.py import subprocess import sys url = sys.argv[-1] def get_cost(url): cmd_list = ['curl', '-o', '/dev/null', '-s', '-w', '%{time_total}\n'] cmd_list.append(url) out = subprocess.Popen(cmd_list, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) stdout, stderr = out.communicate() cost = float(stdout) * 1000 return cost print "%s %s\n" %(url, get_cost(url))
使用方式: 在命令列中執行
python curl_tool.py www.itest.info
執行結果
www.itest.info 42.797
這裡的單位是毫秒。
改進
我們的工具只支援輸入1個url然後拿到耗時的結果,這顯然是跟我們日常的需求不符合的。
我們的日常需求是統計n個介面或頁面的耗時,然後找出其中耗時最多的m個介面或頁面。
下面我們對工具進行改進,使其可以支援多個url/介面的耗時統計。
import subprocess
import sys
# url = sys.argv[-1]
url_list = sys.argv[-1]
def get_cost(url):
cmd_list = ['curl', '-o', '/dev/null', '-s', '-w', '%{time_total}\n']
cmd_list.append(url)
out = subprocess.Popen(cmd_list, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
stdout, stderr = out.communicate()
cost = float(stdout) * 1000
return cost
with open(url_list) as f:
for url in f.read().split("\n"):
if url:
print "%s %s" %(url, get_cost(url))
這裡我們需要定義1個url列表: urls.txt。
http://www.itest.info/
http://www.itest.info/courses/9
http://www.itest.info/courses/7
http://www.itest.info/courses/2
http://www.itest.info/courses/6
http://www.itest.info/newclass
執行
python curl_tool.py urls.txt
結果
http://www.itest.info/ 80.16
http://www.itest.info/courses/9 40.153
http://www.itest.info/courses/7 54.118
http://www.itest.info/courses/2 56.205
http://www.itest.info/courses/6 47.896
http://www.itest.info/newclass 78.962
統計
支援了一次請求多個介面以後,我們需要對耗時進行排序,找出最耗時的那個頁面和介面。
python curl_tool.py urls.txt | sort -k 2 -r
我們用sort命令對第2列進行排序,結果如下
http://www.itest.info/courses/2 49.519
http://www.itest.info/newclass 44.716
http://www.itest.info/courses/7 43.408
http://www.itest.info/ 43.052
http://www.itest.info/courses/9 42.869
http://www.itest.info/courses/6 38.722
持續執行
我們希望每天晚上都執行1次統計指令碼。
這時候可以使用crontab。
30 2 * * * python curl_tool.py urls.txt | sort -k 2 -r >/res.txt 2>&1
這樣每天早上2:30 am的時候我們就會執行統計指令碼,把介面儲存在res.txt中。
持續統計
為了可以統計一段時間內的請求耗時,我們可以把每天的結果落地到es裡。這裡就不展開了。
討論
- 有mac/linux的同學可以親自嘗試一下
- python指令碼基於python2,python3沒試過
- 不錯的知識廣度和程式碼能力可以讓你迅速的實現簡單的測試工具
- 大道至簡