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代码真的很爽
Aug 26 Python
Python 随机生成中文验证码的实例代码
Mar 20 Python
python 示例分享---逻辑推理编程解决八皇后
Jul 20 Python
Python三元运算实现方法
Jan 12 Python
Python处理RSS、ATOM模块FEEDPARSER介绍
Feb 18 Python
Python中的rfind()方法使用详解
May 19 Python
python中print的不换行即时输出的快速解决方法
Jul 20 Python
django富文本编辑器的实现示例
Apr 10 Python
基于virtualenv创建python虚拟环境过程图解
Mar 30 Python
python图片指定区域替换img.paste函数的使用
Apr 09 Python
解决python调用自己文件函数/执行函数找不到包问题
Jun 01 Python
为什么是 Python -m
Jun 19 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输出缓存(output_buffering)的深入理解
2013/06/13 PHP
php添加数据到xml文件的简单例子
2016/09/08 PHP
PHP+Mysql无刷新问答评论系统(源码)
2016/12/20 PHP
解析JavaScript中delete操作符不能删除的对象
2013/12/03 Javascript
常用的JavaScript WEB操作方法分享
2015/02/28 Javascript
JavaScript中用getDate()方法返回指定日期的教程
2015/06/09 Javascript
javascript引用类型之时间Date和数组Array
2015/08/27 Javascript
剖析Node.js异步编程中的回调与代码设计模式
2016/02/16 Javascript
JS实现仿百度文库评分功能
2017/01/12 Javascript
详解angular用$sce服务来过滤HTML标签
2017/04/11 Javascript
Angular.js自动化测试之protractor详解
2017/07/07 Javascript
jQuery实现广告条滚动效果
2017/08/22 jQuery
JS内部事件机制之单线程原理
2018/07/02 Javascript
详解webpack打包第三方类库的正确姿势
2018/10/20 Javascript
利用Webpack实现小程序多项目管理的方法
2019/02/25 Javascript
基于vue通用表单解决方案的思考与分析
2019/03/16 Javascript
实用的Vue开发技巧
2019/05/30 Javascript
javascript sort()对数组中的元素进行排序详解
2019/10/13 Javascript
[44:40]2018DOTA2亚洲邀请赛3月30日 小组赛A组Liquid VS OG
2018/03/31 DOTA
Python 过滤字符串的技巧,map与itertools.imap
2008/09/06 Python
Python脚本实现自动将数据库备份到 Dropbox
2017/02/06 Python
pyqt5与matplotlib的完美结合实例
2019/06/21 Python
Python使用指定端口进行http请求的例子
2019/07/25 Python
Python中PyQt5/PySide2的按钮控件使用实例
2019/08/17 Python
如何基于python对接钉钉并获取access_token
2020/04/21 Python
Python读写Excel表格的方法
2021/03/02 Python
使用CSS3配合IE滤镜实现渐变和投影的效果
2015/09/06 HTML / CSS
英国豪华真皮和布艺沙发销售网站:Darlings of Chelsea
2018/01/05 全球购物
彪马日本官网:PUMA日本
2019/01/31 全球购物
Belstaff英国官方在线商店:Belstaff.co.uk
2021/02/09 全球购物
服务行业演讲稿
2014/09/02 职场文书
影视广告专业求职信
2014/09/02 职场文书
同事离别感言
2015/08/04 职场文书
听课评课活动心得体会
2016/01/15 职场文书
Python实现生活常识解答机器人
2021/06/28 Python
B站评分公认最好看的动漫,你的名字评分9.9,第六备受喜欢
2022/03/18 日漫