Jmeter并发执行Python 脚本的完整流程
这篇文章主要介绍了Jmeter并发执行 Python 脚本的问题详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
目录
- 1. 前言
- 2. Python 实现文件上传
- 2-1获取文件信息及切片数目
- 2-2切片及分段上传
- 2-3合并文件
- 2-4文件路径参数化
- 3. Jmeter 并发执行
- 4. 最后
本篇文章以文件上传为例,聊聊 Jmeter 并发执行 Python 脚本的完整流程
1. 前言
大家好,我是安果!
最近有小伙伴后台给我留言,说自己用 Django 写了一个大文件上传的 Api 接口,现在想本地检验一下接口并发的稳定性,问我有没有好的方案
本篇文章以文件上传为例,聊聊Jmeter 并发执行 Python 脚本的完整流程
2. Python 实现文件上传
大文件上传包含 3 个步骤,分别是:
- 获取文件信息及切片数目
- 分段切片,并上传- API
- 文件合并- API
- 文件路径参数化
2-1获取文件信息及切片数目
首先,获取文件的大小
然后,利用预设的切片大小获取分段总数
最后,获取文件名及 md5 值
import os
import math
import hashlib
def get_file_md5(self, file_path):
"""获取文件的md5值"""
with open(file_path, 'rb') as f:
data = f.read()
return hashlib.md5(data).hexdigest()
def get_filename(self, filepath):
"""获取文件原始名称"""
# 文件名带后缀
filename_with_suffix = os.path.basename(filepath)
# 文件名
filename = filename_with_suffix.split('.')[0]
# 后缀名
suffix = filename_with_suffix.split('.')[-1]
return filename_with_suffix, filename, suffix
def get_chunk_info(self, file_path):
"""获取分段信息"""
# 获取文件总大小(字节)
file_total_size = os.path.getsize(file_path)
print(file_total_size)
# 分段总数
total_chunks_num = math.ceil(file_total_size / self.chunk_size)
# 文件名(带后缀)
filename = self.get_filename(file_path)[0]
# 文件的md5值
file_md5 = self.get_file_md5(file_path)
return file_total_size, total_chunks_num, filename, file_md5
2-2切片及分段上传
利用分段总数和分段大小,对文件进行切片,调用分段文件上传接口
import requests
def do_chunk_and_upload(self, file_path):
"""将文件分段处理,并上传"""
file_total_size, total_chunks_num, filename, file_md5 = self.get_chunk_info(file_path)
# 遍历
for index in range(total_chunks_num):
print('第{}次文件上传'.format(index + 1))
if index + 1 == total_chunks_num:
partSize = file_total_size % chunk_size
else:
partSize = chunk_size
# 文件偏移量
offset = index * chunk_size
# 生成分片id,从1开始
chunk_id = index + 1
print('开始准备上传文件')
print("分片id:", chunk_id, "文件偏移量:", offset, ",当前分片大小:", partSize, )
# 分段上传文件
self.__upload(offset, chunk_id, file_path, file_md5, filename, partSize, total_chunks_num)
def __upload(self, offset, chunk_id, file_path, file_md5, filename, partSize, total):
"""分次上传文件"""
url = 'http://**/file/brust/upload'
params = {'chunk': chunk_id,
'fileMD5': file_md5,
'fileName': filename,
'partSize': partSize,
'total': total
}
# 根据文件路径及偏移量,读取文件二进制数据
current_file = open(file_path, 'rb')
current_file.seek(offset)
files = {'file': current_file.read(partSize)}
resp = requests.post(url, params=params, files=files).text
print(resp)
2-3合并文件
最后调用合并文件的接口,将分段小文件合成大文件
def merge_file(self, filepath):
"""合并"""
url = 'http://**/file/brust/merge'
file_total_size, total_chunks_num, filename, file_md5 = self.get_chunk_info(filepath)
payload = json.dumps(
{
"fileMD5": file_md5,
"chunkTotal": total_chunks_num,
"fileName": filename
}
)
print(payload)
headers = {
"Content-Type": "application/json"
}
resp = requests.post(url, headers=headers, data=payload).text
print(resp)
2-4文件路径参数化
为了并发执行,将文件上传路径参数化
# fileupload.py
...
if __name__ == '__main__':
filepath = sys.argv[1]
# 每一段切片的大小(MB)
chunk_size = 2 * 1024 * 1024
fileApi = FileApi(chunk_size)
# 分段上传
fileApi.do_chunk_and_upload(filepath)
# 合并
fileApi.merge_file(filepath)
3. Jmeter 并发执行
在使用 Jmeter 创建并发流程前,我们需要编写批处理脚本
其中,执行批处理脚本时,需要跟上文件路径一起执行
# cmd.bat @echo off set filepath=%1 python C:\Users\xingag\Desktop\rpc_demo\fileupload.py %*
然后,在本地新建一个 CSV 文件,写入多个文件路径
# 准备多个文件路径(csv)
C:\\Users\\xingag\\Desktop\\charles-proxy-4.6.1-win64.msi
C:\\Users\\xingag\\Desktop\\V2.0.pdf
C:\\Users\\xingag\\Desktop\\HBuilder1.zip
C:\\Users\\xingag\\Desktop\\HBuilder2.zip
接着,就可以使用 Jmeter 创建并发流程了
完整步骤如下:
- 创建一个测试计划,下面添加一个线程组
这里线程组数目与上面文件数目保持一致即可
- 线程组下,添加「同步定时器」
同步定时器中的「模拟用户组的数量」和上面参数数量保持一致
- 添加 CSV 数据文件设置
指向上面准备的 csv 数据文件,设置文件格式为 UTF-8,变量名称设置为file_path,最后将线程共享模式设置为「当前线程组」
- 添加调试取样器,方便调试
- 添加 OS 进程取样器
选择上面创建的批处理文件,命令行参数设置为「${file_path}」
- 添加查看结果数
4. 最后
运行上面创建的 Jmeter 并发流程,在结果数中可以查看并发上传文件的结果
当然,我们可以增加并发数量去模拟真实的使用场景,只需要修改 CSV 数据源及 Jmeter 参数即可
到此这篇关于Jmeter并发执行 Python 脚本的问题详解的文章就介绍到这了,更多相关Jmeter并发执行 Python 脚本内容请搜索数字提纲【www.sztg.com.cn】以前的文章或继续浏览下面的相关文章希望大家以后多多支持数字提纲【www.sztg.com.cn】!
如非特殊说明,本站内容均来自于网友自主分享,如有任何问题均请联系我们进行处理!
猜您喜欢
《逆战:未来》销金之城地图全流程介绍
2026-07-09逆战未来销金之城地图怎么玩?今天小编就带来逆战未来销金之城地图全流程介绍。当玩家踏入S3无主之地赛季的全新篇章时,销金之城这张地图,以它独特的魅力,吸引着每一位逆行者,这座城市不仅承载着与《无主之地》联动的精彩内容,更隐藏着关于斯格明石的重要线索,在探索过程中,玩家会遇到各种意想不到的事件。 《逆战:未来》销金之城地图全流程介绍 整个地图的流程设计得很巧妙,首先是BOSS的出场顺序,犇驰,痛苦制造...
《皓白初晓》全流程通关攻略分享
2026-07-07《皓白初晓》这款游戏的流程是比较长的,想要全收集的难度是非常大的,游戏的玩法非常有特点,倪克斯的阴影降临于此,祂扭曲世界化为荒芜,众神和祂们的子民也因此消失。如今,一位被除名的神选朱诺苏醒过来,她肩负着一项不可能完成的使命:夺回一切。 皓白初晓怎么通关 01世界的终结+失落之地 本文内容来源于互联网,如有侵权请联系删除。
剪映AI自动生成短视频提示词技巧:一键出脚本
2026-06-28剪映AI脚本生成需用5要素结构化提示词:主题、角色、场景、情绪、结构,缺一不可;开头20字锁定关键信息,末尾添加时长、结构和禁用指令,并插入语气锚点词提升口语感。 想让剪映ai自动生成短视频脚本,但输完“帮我写个带货视频”后只生成三行空洞文案?关键不是描述需求,而是用它能听懂的“提示词结构”喂给ai——它不理解模糊意图,只识别可拆解的要素组合。 先锁定AI能解析的5个核心要素 剪映AI脚本生成器实...
剪映AI脚本提示词写法技巧:快速生成短视频内容
2026-06-28剪映AI生成短视频脚本需精准提示词:先定义角色身份与能力标签,再用分号切分模块并指定【】格式,注入真实数据细节,最后硬性限制字数与禁用词。 想用剪映ai自动生成短视频脚本,但提示词写完总跑偏、逻辑混乱、内容空洞——不是生成一堆废话,就是完全偏离你想要的风格和卖点。问题往往出在提示词结构松散、角色定义模糊、输出格式没约束。 明确角色与身份定位 第一步:在提示词开头用一句话锁定AI的“身份”。比如写“...
MiMo Code:AI 自动编码如何辅助构建高并发缓存逻辑
2026-06-28MiMoCode是能理解项目上下文、拆解工程目标并协同执行多阶段任务的终端编码代理,擅长高并发缓存等系统级任务,具备上下文感知、Compose模式驱动、持久记忆、安全编辑与静态分析能力。 ☞☞☞AI智能聊天,问答助手,AI智能搜索,多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜ MiMoCode不是简单补几行代码的助手,而是能理解项目上下文、拆解工程目标、协同执行多阶段任务的终端编码代理。构建高...
可灵AI如何用脚本直驱模式快速生成视频【指南】
2026-06-28可灵AI“脚本直驱模式”需严格遵循【时间码】+【画面描述】+【关键动作动词】结构,校验失败超3行则降级;启用时须设60fps、强制执行、上传首帧参考图,并支持文本/CVS/JSON/Markdown/画布五种直驱路径。 ☞☞☞AI智能聊天,问答助手,AI智能搜索,多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜ 要用可灵AI把写好的短视频脚本直接变成画面连贯、节奏准确的视频,不绕路不重写不拼接,就...
如何在Fitten Code中快速生成Linux Shell脚本
2026-06-28FittenCode可在VSCode中秒级生成可运行Shell脚本:需先启用插件并设语言模式为Bash,输入中文需求后按Tab触发补全,自动生成含#!/usr/bin/envbash、规范缩进与引号的脚本,再通过bash脚本名.sh或chmod+x&&./脚本名.sh验证执行。 ☞☞☞AI智能聊天,问答助手,AI智能搜索,多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜ 你想用Fi...
《太吾绘卷:天幕心帷》新手快速赚钱流程分享
2026-06-27《太吾绘卷:天幕心帷》中新手赚钱是游戏里非常重要的事情,毕竟很多时候都可以用钱来解决问题,而新手想要快速赚钱可以在刚开始捏人时,出生地类型选森林或者湖泊,资质里。把厨艺,医术资质拉到90,成长类型拉到晚成,年龄30岁开局,其他资质没要求。 太吾绘卷天幕心帷新手怎么快速赚钱 新版本卖食物药品卖价翻了大概一倍,更容易获得钱了。 1、捏人时,出生地类型选森林或者湖泊,资质里。把厨艺,医术资质拉到90,成...
《我离开之前》全流程通关攻略分享
2026-06-27《我离开之前(BEFOREIGO)》这款游戏的流程是比较长的,想要快速通关也比较难,游戏的剧情也很独特,你将化身为内心深处那份纯粹无瑕的孩童,踏上一场寓意深刻的奥德赛之旅,一场与自我和解、接纳死亡的旅程。 我离开之前怎么通关 击败恸 本文内容来源于互联网,如有侵权请联系删除。
《电玩人生》全流程通关攻略分享
2026-06-27《电玩人生》这款游戏的流程是比较长的,想要快速通关也比较难,游戏的剧情也很独特,你收到了一封来自爷爷的信,于是踏上了返回故乡日本的旅程。爷爷已经离世,并将一家老旧的游戏商店作为遗产留给你。为了纪念他,你决定让这家商店重焕光彩。 电玩人生怎么通关 这电玩店画风有点好看? 本文内容来源于互联网,如有侵权请联系删除。
