python+requests接口压力测试500次,查看响应时间的实例


Posted in Python onApril 30, 2020

接口压力测试500次,查看响应时间

import json
import requests
import logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
restime = []
OK=[]
class Restime():
 def API(self,URL2,param):
  try:
   r = requests.get(URL2, params=param, timeout=10)
   r.raise_for_status() # 如果响应状态码不是 200,就主动抛出异常
  except requests.RequestException as e:
   print(e)
  else:
   js = json.dumps(r.json())
   return [r.json(), r.elapsed.total_seconds(),js]
 def circulation(self,num,URL2,param):
  for i in range(num):
   restime.append(Restime.API(URL2,param)[1])
   if json.loads(Restime.API(URL2, param)[2])["message"]=='ok':
    OK.append(json.loads(Restime.API(URL2, param)[2])["message"])
    logger.info('请求第' + str(i+1) + '次,请求'+json.loads(Restime.API(URL2, param)[2])["message"]+',状态码:'+json.loads(Restime.API(URL2, param)[2])["status"])
   else:
    logger.info('请求第' + str(i+1) + '次,请求' + json.loads(Restime.API(URL2, param)[2])["message"] + ',状态码:' +
       json.loads(Restime.API(URL2, param)[2])["status"])
  print('测试次数:',num)
  print('响应次数:', len(restime))
  print('正常响应次数:', len(OK))
  print('总响应最大时长:', max(restime))
  print('总响应最小时长:', min(restime))
  print('总响应时长:', sum(restime))
  print('平均响应时长:', sum(restime) / len(restime))
if __name__ == '__main__':
 Restime=Restime()
 #URL2 = 'http://wthrcdn.etouch.cn/weather_mini'
 #param = {'ip': '8.8.8.8', 'city': '西安'}
 num=500 #压力测试次数
 URL2 = 'http://www.kuaidi100.com/query' #地址
 param = {'type' : 'zhongtong' , 'postid' :'73116039505988' } #参数
 Restime.circulation(num,URL2,param)
 input('Press Enter to exit...')
测试次数: 500
响应次数: 500
正常响应次数: 500
总响应最大时长: 0.336179
总响应最小时长: 0.062753
总响应时长: 41.892936000000034
平均响应时长: 0.08378587200000007

python+requests接口压力测试500次,查看响应时间的实例

补充知识:python利用requests统计1个接口的响应时间

requests统计接口的响应时间有2种方式

r.elapsed.total_seconds()
r.elapsed.microseconds/(1000*1000)

但是第2种方式,当调用的接口响应时间大于1s时,得到的响应时间是不准确的。下面来看示例

首先看接口响应时间小于1s时,分别使用2种方式得到 post "https://www.baidu.com/" 的响应时间

代码示例:

import requests
url = "https://www.baidu.com/"
r = requests.post(url)
# print(r.text)
#推荐使用这种方式统计一个接口的响应时间,准确性更高
print(r.elapsed.total_seconds())
#当接口的响应时间大于1s时,下面这种统计方式就会不准确
print(r.elapsed.microseconds/(1000*1000))

运行结果:

0.039872
0.039872

再测试一个接口响应时间超过1s的接口,

然后看接口响应时间大于1s时,分别使用2种方式得到 post "http://cn.python-requests.org/zh_CN/1atest/" 的响应时间

果然发现2种方式统计的结果不一样了呢

import requests
url = "http://cn.python-requests.org/zh_CN/1atest/"
r = requests.post(url)
# print(r.text)
#结果正确
print(r.elapsed.total_seconds())
#结果不正确
print(r.elapsed.microseconds/(1000*1000))

运行结果:

1.298427
0.298427

很显然,r.elapsed.microseconds/(1000*1000)在接口的响应时间大于1s时,只截取了后面的小数部分

以上这篇python+requests接口压力测试500次,查看响应时间的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在Python中使用SQLite的简单教程
Apr 29 Python
使用Python的Scrapy框架十分钟爬取美女图
Dec 26 Python
Pycharm学习教程(7)虚拟机VM的配置教程
May 04 Python
flask中使用蓝图将路由分开写在不同文件实例解析
Jan 19 Python
Python多线程应用于自动化测试操作示例
Dec 06 Python
python变量赋值方法(可变与不可变)
Jan 12 Python
python os.fork() 循环输出方法
Aug 08 Python
python中的列表与元组的使用
Aug 08 Python
python实现操作文件(文件夹)
Oct 31 Python
解决django model修改添加字段报错的问题
Nov 18 Python
解决python彩色螺旋线绘制引发的问题
Nov 23 Python
python使用建议与技巧分享(二)
Aug 17 Python
Pycharm连接远程服务器过程图解
Apr 30 #Python
python3发送request请求及查看返回结果实例
Apr 30 #Python
python获取响应某个字段值的3种实现方法
Apr 30 #Python
如何在python中执行另一个py文件
Apr 30 #Python
在Ubuntu 20.04中安装Pycharm 2020.1的图文教程
Apr 30 #Python
Python实现转换图片背景颜色代码
Apr 30 #Python
Python requests.post方法中data与json参数区别详解
Apr 30 #Python
You might like
php中选择什么接口(mysql、mysqli)访问mysql
2013/02/06 PHP
smarty模板中拼接字符串的方法
2014/02/14 PHP
避免Smarty与CSS语法冲突的方法
2015/03/02 PHP
js 判断 enter 事件
2009/02/12 Javascript
JS类的封装及实现代码
2009/12/02 Javascript
Javascript事件热键兼容ie|firefox
2010/12/30 Javascript
jQuery boxy弹出层插件中文演示及使用讲解
2011/02/24 Javascript
jsp 网站引入外部css或者js失效问题解决
2016/10/31 Javascript
JavaScript获取短信验证码(周期性)
2016/12/29 Javascript
JavaScript如何一次性展示几万条数据
2017/03/30 Javascript
ES6生成器用法实例分析
2017/04/10 Javascript
JavaScript数据类型的存储方法详解
2017/08/25 Javascript
基于js中的原型(全面讲解)
2017/09/19 Javascript
ES7中利用Await减少回调嵌套的方法详解
2017/11/01 Javascript
Angular2整合其他插件的方法
2018/01/20 Javascript
vue+element实现批量删除功能的示例
2018/02/28 Javascript
elementUI 设置input的只读或禁用的方法
2018/10/30 Javascript
vue解决使用$http获取数据时报错的问题
2019/10/30 Javascript
node.JS的crypto加密模块使用方法详解(MD5,AES,Hmac,Diffie-Hellman加密)
2020/02/06 Javascript
JS实现纸牌发牌动画
2021/01/19 Javascript
[01:07:57]DOTA2-DPC中国联赛 正赛 Ehome vs Magma BO3 第二场 1月19日
2021/03/11 DOTA
python中的__init__ 、__new__、__call__小结
2014/04/25 Python
Pandas之drop_duplicates:去除重复项方法
2018/04/18 Python
Python 操作 ElasticSearch的完整代码
2019/08/04 Python
python中对二维列表中一维列表的调用方法
2020/06/07 Python
怎么快速自学python
2020/06/22 Python
西尔斯百货官网:Sears
2016/09/06 全球购物
高级运动鞋:GREATS
2019/07/19 全球购物
给领导的致歉信范文
2014/01/13 职场文书
职工运动会邀请函
2014/01/19 职场文书
机关出纳岗位职责
2014/04/03 职场文书
中华魂演讲稿
2014/05/13 职场文书
党的群众路线教育实践活动专题组织生活会发言材料
2014/10/17 职场文书
Django如何创作一个简单的最小程序
2021/05/12 Python
MongoDB安装使用并实现Python操作数据库
2021/06/28 MongoDB
一文带你探究MySQL中的NULL
2021/11/11 MySQL