绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
使用curl创建简单的性能监控工具
2019-12-11 13:29:02

cURL,全称Command Line URL viewer,是一种命令行工具,用来发送网络请求,然后得到和提取数据,显示在标准输出(stdout)。

我们可以使用curl来获取网页的源码,显示头信息,显示通讯过程等。

在做基于http的接口测试的时候,curl基本上可以完成postman所具备的大部分功能,如果你 惯于使用命令行,那么curl是一个非常有用且常用的工具。

CURL的基本使用

查看网页源码

curlwww.itest.info

查看response的headers

curl-i www.itest.info

显示通讯过程

curl-v www.itest.info

常用参数

使用curl发送GET请求时有一些常用参数。

-o: output,将输出的结果重定向到一个文件

-s: slient, 不显示进度信息

-w: 展示多维度的统计信息

统计请求耗时

使用下面的这条curl命令可以统计出请求的耗时。

curlwww.itest.info-o /dev/null -s -w"%{time_total}\n"

其中我们把输出丢弃了(重定向到/dev/null里),并且不显示进度信息,只展示请求的总耗时。

工具化

基于curl的统计请求耗时的能力,我们可以写一个简单的工具调用curl,然后打印出该请求的耗时。

下面是我用python写的一个简单例子。

# curl_tool.pyimportsubprocessimportsysurl = sys.argv[-1]defget_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) *1000returncostprint"%s %s\n"%(url, get_cost(url))

使用方式: 在命令行中运行

pythoncurl_tool.pywww.itest.info

运行结果

www.itest.info42.797

这里的单位是毫秒。

改进

我们的工具只支持输入1个url然后拿到耗时的结果,这显然是跟我们日常的需求不符合的。

我们的日常需求是统计n个接口或页面的耗时,然后找出其中耗时多的m个接口或页面。

下面我们对工具进行改进,使其可以支持多个url/接口的耗时统计。

importsubprocessimportsys# url = sys.argv[-1]url_list = sys.argv[-1]defget_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) *1000returncostwithopen(url_list)asf:forurlinf.read().split("\n"):ifurl:print"%s %s"%(url, get_cost(url))

这里我们需要定义1个url列表: urls.txt。

http://www.itest.info/http://www.itest.info/courses/9http://www.itest.info/courses/7http://www.itest.info/courses/2http://www.itest.info/courses/6http://www.itest.info/newclass

运行

pythoncurl_tool.pyurls.txt

结果

http://www.itest.info/ 80.16http://www.itest.info/courses/9 40.153http://www.itest.info/courses/7 54.118http://www.itest.info/courses/2 56.205http://www.itest.info/courses/6 47.896http://www.itest.info/newclass 78.962

统计

支持了一次请求多个接口以后,我们需要对耗时进行排序,找出耗时的那个页面和接口。

python curl_tool.py urls.txt |sort-k2-r

我们用sort命令对第2列进行排序,结果如下

http://www.itest.info/courses/2 49.519http://www.itest.info/newclass 44.716http://www.itest.info/courses/7 43.408http://www.itest.info/ 43.052http://www.itest.info/courses/9 42.869http://www.itest.info/courses/6 38.722

持续运行

我们希望每天晚上都运行1次统计脚本。

这时候可以使用crontab。

30 2* * * python curl_tool.py urls.txt | sort -k2-r >/res.txt2>&1

这样每天早上2:30 am的时候我们就会运行统计脚本,把接口存储在res.txt中。

持续统计

为了可以统计一段时间内的请求耗时,我们可以把每天的结果落地到es里。这里就不展开了。

讨论

有mac/linux的同学可以亲自尝试一下

python脚本基于python2,python3没试过

不错的知识广度和代码能力可以让你迅速的实现简单的测试工具

大道至简

分享好友

分享这个小栈给你的朋友们,一起进步吧。

猿,妙不可言
创建时间:2019-07-05 22:23:45
分享python,及前端一些开发心得、教程。 希望能和各位大佬交朋友~
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • 马国栋
    栈主

小栈成员

查看更多
  • ?
  • 栈栈
  • gamebus
  • 呵呵哒
戳我,来吐槽~