侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

python实现接口并发测试脚本

Python  /  管理员 发布于 7年前   162

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

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,randomclass 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中metaclass原理与用法详解
    下一条:
    Python实现EXCEL表格的排序功能示例
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客