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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/51237.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙验证码,鸿蒙认证服务验证码,鸿蒙云存储上传图片

1、在entry / oh-package.json5目录下,增加依赖: "dependencies": {hw-agconnect/cloud: "^1.0.0",hw-agconnect/hmcore: "^1.0.0",hw-agconnect/auth-component: "^1.0.0",long: ^5.2.1} 整体效果 {"…

vue.js - 看板娘 Live2d

文中的资源文件在这里:我的资源中,打好包了已经,地址:live2d资源 1、在项目的 src/assets 文件夹中,添加 live2d 的资源文件 2、在 src/components 文件中,编写 live2d的index.vue组件 3、在 App.vue 中…

技术文档索引

1.Python爬虫之BeautifulSoup的文章链接 2.Python爬虫之正则表达式

【重点】人工智能大语言模型技术发展研究报告2024|附下载

人工智能作为引领新一轮科技产业革命的战略性技术和新质生产力重要驱动力,正在引发经济、社会、文化等领域的变革和重塑。 2023 年以来,以ChatGPT、GPT-4 为代表的大模型技术的出台,因其强大的内容生成及多轮对话能力,引发全球新…

MYSQL————数据库的约束

1.约束类型 1.not null:指示某列不能存储null值 2.unique:保证某列的每行必须有唯一值 3.default:规定没有给列赋值时的默认值 4.primary key:not null和unique的结合。确保某列(或两个或多个列的结合)有唯…

《中国科技论坛》

《中国科技论坛》杂志   刊名:中国科技论坛/Forum on Science and Technology in China 主办:中国科学技术发展战略研究院 编辑出版:中国科技论坛杂志社 创刊:1985 刊期/版面:月刊,大16开 刊号&#…

聊聊最近很火的后端即服务

最近,你可能经常听到“后端即服务”(Backend as a Service, BaaS)这个词。不论是在技术论坛上,还是在开发者社区,BaaS都成了大家讨论的热点。究竟是什么让这个概念如此火爆?今天我们就来聊聊这个话题&#…

TCP粘包和抓包

在 TCP 套接字中,发送和接收缓冲区用于暂存数据,以确保数据的可靠传输。具体来说,TCP 的 socket 收发缓冲区的主要特点和概念如下: 1. 发送缓冲区(Send Buffer) 定义: 发送缓冲区用于存储待发送的数据。应…

大模型从入门到精通——词向量及知识库介绍

词向量及知识库介绍 1.词向量 1.1 什么是词向量 词向量是一种将单词表示为实数向量的方式。每个单词通过一个高维向量来表示,向量的每一维都是一个实数,这些向量通常位于一个高维空间中。词向量的目标是将语义相似的单词映射到相邻的向量空间中&#…

自定义@ResponseBody以及SpringMVC总结

文章目录 1.需求分析2.目录3.自定义ResponseBody注解4.MonsterController.java5.Monster.java 实现序列化接口6.引入jackson7.Adapter.java 如果有ResponseBody注解就返回json8.测试9.SpringMVC执行流程 1.需求分析 2.目录 3.自定义ResponseBody注解 package com.sunxiansheng…

[Linux][软件]CentOS 系统部署 RabbitMQ

简介 MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通…

24暑假算法刷题 | Day39 | 动态规划 VII | LeetCode 198. 打家劫舍,213. 打家劫舍 II,337. 打家劫舍 III

目录 198. 打家劫舍题目描述题解 213. 打家劫舍 II题目描述题解 337. 打家劫舍 III题目描述题解 打家劫舍的一天 😈 198. 打家劫舍 点此跳转题目链接 题目描述 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷…

(贪心) LeetCode 135. 分发糖果

原题链接 一. 题目描述 n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。 你需要按照以下要求,给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果。 相邻两个孩子评分更高的孩子会获得更多的糖果。 请你给每个孩子分发糖果&#xf…

rapidjson的移植

因为rapidjson是只有头文件 使用模板来实现json 所以只需要添加头文件就行 make使用-I/路径指定头文件 解压后编写makefile 下载地址 https://github.com/Tencent/rapidjson https://github.com/Tencent/rapidjson/releases/tag/v1.1.0 下载了版本 rapidjson-1.1.0.zip 使用…

OpenCV与AI深度学习 | 基于改进YOLOv8的景区行人检测算法

本文来源公众号“OpenCV与AI深度学习”,仅用于学术分享,侵权删,干货满满。 原文链接:基于改进YOLOv8的景区行人检测算法 作者:贵向泉,刘世清,李立等 来源:《计算机工程》期刊 编…

docker应用

打包传输 1.将镜像打包 #查看帮助文件 docker --help #找到save,可以将镜像保存为一个tar包 docker save --help #查看save使用方式 #查看现有的镜像 docker images # docker save --output centos.tar centos:latest ls ...centos.tar... 可以将tar发送给其他用户…

若依如何添加测试单元

一、引入依赖 在ruoyi-admin的pom文件中加入以下依赖&#xff0c;此处为什么不需要写版本号&#xff1f;SpringBoot版本中有对应的默认版本&#xff0c;可以防止新手小白乱写版本后引发冲突。 <dependency><groupId>org.springframework.boot</groupId><…

class_4:条件语句和逻辑运算符

mood_index int(input("对象今天的心情怎么样&#xff01;"))if mood_index > 80:print("今天可以好好happy一下了")print("O(∩_∩)O哈哈~") else:print("今天还是乖乖的吧&#xff01;否则小命不保") #BMI 体重 /&#xff08;身…

[mysql][sql]安装完mysql8跨主机不能访问解决办法

SQL语句是针对MySQL数据库的操作&#xff0c;用于更新用户信息和用户密码。 use mysql; update user set host% where userroot; ALTER USER root% identified with mysql_native_password by 密码;以下是每个命令的简要说明&#xff1a; 切换到mysql数据库: USE mysql; 这…

css实现闪烁渐变背景,@property自定义属性

自 2024 年 7 月起&#xff0c;此功能适用于最新的设备和浏览器版本。此功能可能无法在较旧的设备或浏览器中使用。 property 是 CSS 中一个相对较新的功能&#xff0c;主要用于定义自定义属性&#xff08;即 CSS 变量&#xff09;的类型、继承性以及初始值。它允许开发者更好地…