0


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

# 加密函数defencrypt_data(data, key):
    key = key.encode('utf-8')
    key = key[:16]# AES-128
    cipher = 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')# 生成不重复的随机数(简化版)defgenerate_unique_random_string(length=12):
    characters = string.ascii_letters + string.digits
    result =''.join(random.choice(characters)for i inrange(length))return result

# 构造请求数据defprepare_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":"[email protected]","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请求defsend_request(data, key, url):
    encrypted_data = encrypt_data(json.dumps(data), key)
    response = requests.post(url, json={"data": encrypted_data})return response

# 主函数defmain():
    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 _ inrange(30)]# 输出测试结果
        results =[future.result()for future in futures]
        test_report ="\n".join([f"Request {i +1}: Status Code {result.status_code}"for i, result inenumerate(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

本文转载自: https://blog.csdn.net/xiaolipanpan/article/details/141192619
版权归原作者 xiaoli_panpan 所有, 如有侵权,请联系我们删除。

“python 压力测试脚本”的评论:

还没有评论