当前位置: 首页 > news >正文

python 压力测试脚本

需求:

  1. 生成一个12位不重复的随机数
  2. 将随机数赋值给Json 串中的 orderCode字段
  3. 将Json用ECB 指定 key为bJXQezYtR4ZSNK4p进行加密并作为值传给{
    “data”: “”
    }
  4. 设置每秒30个并发持续1分钟调用接口接口
  5. 输出测试测试报告

代码示例

import json
import random
import string
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
from Crypto.Random import get_random_bytes  # 实际上对于ECB模式,这个随机字节不是必需的
from base64 import b64encode
import requests
from concurrent.futures import ThreadPoolExecutor# 加密函数
def encrypt_data(data, key):key = key.encode('utf-8')key = key[:16]  # AES-128cipher = AES.new(key, AES.MODE_ECB)ct_bytes = cipher.encrypt(pad(data.encode('utf-8'), AES.block_size))# 注意:对于ECB模式,通常不添加IV,但如果你需要发送IV(尽管它不会影响解密),可以这样做# iv = get_random_bytes(AES.block_size)  # 对于ECB,这不是必需的# return b64encode(iv + ct_bytes).decode('utf-8')return b64encode(ct_bytes).decode('utf-8')# 生成不重复的随机数(简化版)
def generate_unique_random_string(length=12):characters = string.ascii_letters + string.digitsresult = ''.join(random.choice(characters) for i in range(length))return result# 构造请求数据
def prepare_request_data():data = {"head": {"method": "batch_create_order","version": "1.0.0","requestTime": "2022-07-20 10:06:31"},"uaccount": "xxxx","body": [{"mailCode": "TEST201072000MAILCODE","orderCode": "TE_" + generate_unique_random_string(10),"length": 20.3,"width": 18.1,"height": 6.3,"weight": 0.53,"receiverCompName": "AMZ-tt","receiverName": "Kaila Gilam 123456","receiverProv": "Atlantico","receiverCity": "Barranquilla","receiverArea": "Fayetteville","receiverHouseNo": "15","receiverAddress": "138 Lowery Dr","receiverAddress2": "apto 2B","receiverMobile": "","receiverTel": "3013357358","receiverEmail": "yh267lps4r1207d@us.shipping.temuemail.com","receiverPostCode": "110121","senderCompName": "CAN109","senderName": "CAN101","senderEngProv": "guangdong","senderEngCity": "guangzhou","senderAddress": "baiyun helong","senderPostCode": "80000","senderTel": "123456456","senderMobile": "147258369","countryCode": "CO","countryName": "哥伦比亚","productCode": "COL-X","tariffType": "ddp","vatNumber": "5236523","taxNo": "3923982135","remark": "","referenceNumber": "BG-" + generate_unique_random_string(10),"declValue": "50","declCurrency": "RMB","cardType": "2","cardNo": "48452153625425361252","inner": [{"gName": "加厚压缩袋","gEngName": "compression bag","innerContext": "","innerQty": 5,"innerWeight": 0.22,"innerPrice": 3.5,"currencyCode": "USD","madePlace": "CN","hscode": "3923290000","model": "无","gBrand": "无","originCountry": "","remark": "","sku": "100010","material": "塑料","purpose": "物品","taxNo": "3923","salesAddress": "https://suijimimashengcheng.bmcx.com/","distribution": "compression","electricityFlag": "","unitCode": "11","secUnitCode": "","innerDeclValue": "25","innerDeclCurrency": "RMB"}, {"gName": "浴裙","gEngName": "Bath skirt","innerContext": "","innerQty": 5,"innerWeight": 0.472,"innerPrice": 5.73,"currencyCode": "USD","madePlace": "CN","hscode": "9807200000","model": "无","gBrand": "无","originCountry": "","remark": "","sku": "100010","material": "塑料","purpose": "物品","taxNo": "3923","salesAddress": "https://suijimimashengcheng.bmcx.com/","distribution": "compression","electricityFlag": "","unitCode": "11","secUnitCode": "","innerDeclValue": "25","innerDeclCurrency": "RMB"}]}]}return data# 发送HTTP请求
def send_request(data, key, url):encrypted_data = encrypt_data(json.dumps(data), key)response = requests.post(url, json={"data": encrypted_data})return response# 主函数
def main():url = "http://xx.xx.xx:8017/api/GDPostFeiYouTemu/NotMailTemuOrderPush"key = "bJXQezYtR4ZSNK4p"# 设置每秒30个并发请求with ThreadPoolExecutor(max_workers=30) as executor:futures = [executor.submit(send_request, prepare_request_data(), key, url) for _ in range(30)]# 输出测试结果results = [future.result() for future in futures]test_report = "\n".join([f"Request {i + 1}: Status Code {result.status_code}" for i, result in enumerate(results)])print(test_report)if __name__ == "__main__":main()

返回示例

D:\PYTHON-学习\邮政接口压力测试脚本\pythonProject1\.venv\Scripts\python.exe D:\PYTHON-学习\邮政接口压力测试脚本\pythonProject1\非邮下单接口压力测试脚本.py 
Request 1: Status Code 200
Request 2: Status Code 200
Request 3: Status Code 200
Request 4: Status Code 200
Request 5: Status Code 200
Request 6: Status Code 200
Request 7: Status Code 200
Request 8: Status Code 200
Request 9: Status Code 200
Request 10: Status Code 200
Request 11: Status Code 200
Request 12: Status Code 200
Request 13: Status Code 200
Request 14: Status Code 200
Request 15: Status Code 200
Request 16: Status Code 200
Request 17: Status Code 200
Request 18: Status Code 200
Request 19: Status Code 200
Request 20: Status Code 200
Request 21: Status Code 200
Request 22: Status Code 200
Request 23: Status Code 200
Request 24: Status Code 200
Request 25: Status Code 200
Request 26: Status Code 200
Request 27: Status Code 200
Request 28: Status Code 200
Request 29: Status Code 200
Request 30: Status Code 200进程已结束,退出代码为 0

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 主要内容和创新点、研究方法和实现途径这两个概念在学术研究和技术开发中各有侧重点
  • Matplotlib基本操作
  • kubernetes的pod基础
  • MySQL 数据库管理
  • 微信小程序——弹出隐私指引教程(含代码)
  • C:每日一练:单身狗(2.0版本)
  • 【JAVA CORE_API】Day18 网络编程、线程、在线聊天室v1.0
  • 单片机存储芯片 W25QXX、AT24C02
  • Python数据库的使用
  • F1 F4 Fn lock 指示灯不亮 联想笔记本 thinkpad
  • Android T(13) The app is granted permissions by default
  • 记录git push时的报错以及解决方案
  • spring中常用注解(一)
  • 成为Python砖家(1): 在本地查询Python HTML文档
  • 【前端】onclick使用HTML页面外的的JS函数时报错:onclick _function_ is not defined.
  • $translatePartialLoader加载失败及解决方式
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 〔开发系列〕一次关于小程序开发的深度总结
  • CentOS 7 修改主机名
  • EOS是什么
  • export和import的用法总结
  • MQ框架的比较
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • spark本地环境的搭建到运行第一个spark程序
  • Vue ES6 Jade Scss Webpack Gulp
  • webpack+react项目初体验——记录我的webpack环境配置
  • 阿里云Kubernetes容器服务上体验Knative
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 解决iview多表头动态更改列元素发生的错误
  • 跨域
  • 爬虫模拟登陆 SegmentFault
  • 区块链共识机制优缺点对比都是什么
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 如何编写一个可升级的智能合约
  • 思考 CSS 架构
  • 【干货分享】dos命令大全
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • #Datawhale X 李宏毅苹果书 AI夏令营#3.13.2局部极小值与鞍点批量和动量
  • $GOPATH/go.mod exists but should not goland
  • $NOIp2018$劝退记
  • (12)Linux 常见的三种进程状态
  • (175)FPGA门控时钟技术
  • (2)STM32单片机上位机
  • (2024)docker-compose实战 (9)部署多项目环境(LAMP+react+vue+redis+mysql+nginx)
  • (rabbitmq的高级特性)消息可靠性
  • (八)Spring源码解析:Spring MVC
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (二)pulsar安装在独立的docker中,python测试
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (四)React组件、useState、组件样式
  • (学习日记)2024.01.19
  • (一)十分简易快速 自己训练样本 opencv级联haar分类器 车牌识别