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沒試過
- 不錯的知識廣度和代碼能力可以讓你迅速的實現簡單的測試工具
- 大道至簡