python实现接口并发测试脚本


Posted in Python onJune 25, 2019

常用的网站性能测试指标有:并发数、响应时间、吞吐量、性能计数器等。

1、并发数

并发数是指系统同时能处理的请求数量,这个也是反应了系统的负载能力。

2、响应时间

响应时间是一个系统最重要的指标之一,它的数值大小直接反应了系统的快慢。响应时间是指执行一个请求从开始到最后收到响应数据所花费的总体时间。

3、吞吐量

吞吐量是指单位时间内系统能处理的请求数量,体现系统处理请求的能力,这是目前最常用的性能测试指标。
QPS(每秒查询数)、TPS(每秒事务数)是吞吐量的常用量化指标,另外还有HPS(每秒HTTP请求数)。
跟吞吐量有关的几个重要是:并发数、响应时间。
QPS(TPS),并发数、响应时间它们三者之间的关系是:
QPS(TPS)= 并发数/平均响应时间

4、性能计数器

性能计数器是描述服务器或操作系统性能的一些数据指标,如使用内存数、进程时间,在性能测试中发挥着"监控和分析"的作用,尤其是在分析统统可扩展性、进行新能瓶颈定位时有着非常关键的作用。
Linux中可以使用top或者uptime命令看到当前系统的负载及资源利用率情况。
资源利用率:指系统各种资源的使用情况,如cpu占用率为68%,内存占用率为55%,一般使用"资源实际使用/总的资源可用量"形成资源利用率。

压测脚本(下单的接口):

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import requests,time,json,threading,random

class Presstest(object):
  headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36',
    'Content-Type': 'application/json; charset=UTF-8',
  }
  def __init__(self,login_url,press_url,phone="1376193000",password="123456"):
    self.login_url = login_url
    self.press_url = press_url
    self.phone = phone
    self.password = password
    self.session = requests.Session()
    self.session.headers = self.headers

  def login(self):
    '''登陆获取session'''
    data = data = {'t': int(time.time() * 1000), 'userName': self.phone, 'passWord': self.password}
    res = self.session.post(self.login_url,data=json.dumps(data))
    XToken = res.json().get('data').get('companyToken')
    self.session.headers['X-Token'] = XToken

  def testinterface(self):
    '''压测接口'''
    self.session.headers['X-UnionId'] = 'of6uw1CUVhP533sQok'
    data = {"id": int(''.join(str(random.choice(range(10))) for _ in range(10))),
        "openId": "oMr0c5LGJjlTc", "addressId": 10, "shipType": "SELF", "totalAmount": 5,
        "receivable": 5, "carts": [
        {"amount": 1, "barcode": "1234567890", "skuId": 1, "spec": "34", "itemAmount": 5, "price": 0,
         "cover": "xxxx-dd.oss-cn-shanghai.aliyuncs.com/dfc91fd067ac464c096c90af33a196a5.png",
         "name": "沙宣洗发水", "packingType": "瓶", "placeOfOrigin": "上海", "productId": "310153323435134976",
         "retailPrice": 5, "suitableAge": "1-100"}], "formId": "the formId is a mock one", "comments": "aa"}
    global ERROR_NUM
    try:
      html = self.session.post(self.press_url, data=json.dumps(data))
      if html.json().get('code') != 0:
        print(html.json())
        ERROR_NUM += 1
    except Exception as e:
      print(e)
      ERROR_NUM += 1

  def testonework(self):
    '''一次并发处理单个任务'''
    i = 0
    while i < ONE_WORKER_NUM:
      i += 1
      self.work()
    time.sleep(LOOP_SLEEP)

  def run(self):
    '''使用多线程进程并发测试'''
    t1 = time.time()
    Threads = []

    for i in range(THREAD_NUM):
      t = threading.Thread(target=self.testonework, name="T" + str(i))
      t.setDaemon(True)
      Threads.append(t)

    for t in Threads:
      t.start()
    for t in Threads:
      t.join()
    t2 = time.time()

    print("===============压测结果===================")
    print("URL:", self.press_url)
    print("任务数量:", THREAD_NUM, "*", ONE_WORKER_NUM, "=", THREAD_NUM * ONE_WORKER_NUM)
    print("总耗时(秒):", t2 - t1)
    print("每次请求耗时(秒):", (t2 - t1) / (THREAD_NUM * ONE_WORKER_NUM))
    print("每秒承载请求数:", 1 / ((t2 - t1) / (THREAD_NUM * ONE_WORKER_NUM)))
    print("错误数量:", ERROR_NUM)


if __name__ == '__main__':
  login_url = 'https://ds.xxxxx.com/sys/sysUser/login'
  press_url = 'https://ds.xxxxx.com/weshop/order/checkout'
  phone = "1376193000"
  password = "123456"
  
  THREAD_NUM = 1     # 并发线程总数
  ONE_WORKER_NUM = 5   # 每个线程的循环次数
  LOOP_SLEEP = 0.1    # 每次请求时间间隔(秒)
  ERROR_NUM = 0      # 出错数
  
  obj = Presstest(login_url=login_url,press_url=press_url,phone=phone,password=password)
  obj.login()
  obj.run()

输出结果:

===============压测结果===================
URL: https://ds.xxxxx.com/weshop/order/checkout
任务数量: 1 * 5 = 5
总耗时(秒): 1.9810078144073486
每次请求耗时(秒): 0.39620156288146974
每秒承载请求数: 2.5239678327547805
错误数量: 0

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python修改Excel数据的实例代码
Nov 01 Python
python利用sklearn包编写决策树源代码
Dec 21 Python
python3+PyQt5图形项的自定义和交互 python3实现page Designer应用程序
Jul 20 Python
对Python中的@classmethod用法详解
Apr 21 Python
浅谈Django中的数据库模型类-models.py(一对一的关系)
May 30 Python
解决Shell执行python文件,传参空格引起的问题
Oct 30 Python
python下载库的步骤方法
Oct 12 Python
python 实现兔子生兔子示例
Nov 21 Python
Python脚本去除文件的只读性操作
Mar 05 Python
简单了解python shutil模块原理及使用方法
Apr 28 Python
浅谈Python里面None True False之间的区别
Jul 09 Python
Python如何执行精确的浮点数运算
Jul 31 Python
Python实现EXCEL表格的排序功能示例
Jun 25 #Python
python实现动态创建类的方法分析
Jun 25 #Python
python pandas写入excel文件的方法示例
Jun 25 #Python
python多线程http压力测试脚本
Jun 25 #Python
Pyqt5 基本界面组件之inputDialog的使用
Jun 25 #Python
对PyQt5的输入对话框使用(QInputDialog)详解
Jun 25 #Python
如何使用Python标准库进行性能测试
Jun 25 #Python
You might like
用PHP实现多服务器共享SESSION数据的方法
2007/03/16 PHP
PHP生成不同颜色、不同大小的tag标签函数
2013/09/23 PHP
php中有关字符串的4个函数substr、strrchr、strstr、ereg介绍和使用例子
2014/04/24 PHP
PHP把JPEG图片转换成Progressive JPEG的方法
2014/06/30 PHP
Linux下PHP加速器APC的安装与配置笔记
2014/10/24 PHP
Laravel 集成微信用户登录和绑定的实现
2019/12/27 PHP
jQuery创建平滑的页面滚动(顶部或底部)
2013/02/26 Javascript
jQuery ui插件的使用方法代码实例
2013/05/08 Javascript
jquery对ajax的支持介绍
2013/12/10 Javascript
js中数组排序sort方法的原理分析
2014/11/20 Javascript
jQuery 回调函数(callback)的使用和基础
2015/02/26 Javascript
老生常谈onBlur事件与onfocus事件(js)
2016/07/09 Javascript
JavaScript设计模式之单体模式全面解析
2016/09/09 Javascript
AngularJS创建自定义指令的方法详解
2016/11/03 Javascript
解决vue-cli中stylus无法使用的问题方法
2017/06/19 Javascript
详解如何构建Angular项目目录结构
2017/07/13 Javascript
关于vue.js发布后路径引用的问题解决
2017/08/15 Javascript
浅析JavaScript中的特殊数据类型
2017/12/15 Javascript
js实现动态添加上传文件页面
2018/10/22 Javascript
jquery操作checkbox的常用方法总结【附测试源码下载】
2019/06/10 jQuery
jquery实现垂直手风琴导航栏
2020/02/18 jQuery
layui实现显示数据表格、搜索和修改功能示例
2020/06/03 Javascript
python实现决策树C4.5算法详解(在ID3基础上改进)
2017/05/31 Python
numpy中的meshgrid函数的使用
2019/07/31 Python
OpenCV哈里斯(Harris)角点检测的实现
2020/01/15 Python
python数据预处理 :样本分布不均的解决(过采样和欠采样)
2020/02/29 Python
深入浅析pycharm中 Make available to all projects的含义
2020/09/15 Python
Nasty Gal英国:美国女性服饰销售网站
2021/03/02 全球购物
材料化学应届生求职信
2013/10/09 职场文书
管理学专业个人求职信范文
2013/12/13 职场文书
高中学生期末评语
2014/04/25 职场文书
2014年便民服务中心工作总结
2014/12/20 职场文书
科级干部培训心得体会
2016/01/06 职场文书
如何用threejs实现实时多边形折射
2021/05/07 Javascript
React如何使用axios请求数据并把数据渲染到组件
2022/08/05 Javascript
java获取一个文本文件的编码(格式)信息
2022/09/23 Java/Android