千家信息网

Jmeter并发执行Python脚本的示例分析

发表于:2025-11-15 作者:千家信息网编辑
千家信息网最后更新 2025年11月15日,这篇文章将为大家详细讲解有关Jmeter并发执行Python脚本的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Python 实现文件上传大文件上传包含 3
千家信息网最后更新 2025年11月15日Jmeter并发执行Python脚本的示例分析

这篇文章将为大家详细讲解有关Jmeter并发执行Python脚本的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

Python 实现文件上传

大文件上传包含 3 个步骤,分别是:

  • 获取文件信息及切片数目

  • 分段切片,并上传- API

  • 文件合并- API

  • 文件路径参数化

2-1获取文件信息及切片数目

首先,获取文件的大小

然后,利用预设的切片大小获取分段总数

最后,获取文件名及 md5 值

import osimport mathimport hashlibdef 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, suffixdef 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 requestsdef 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)

Jmeter 并发执行

在使用 Jmeter 创建并发流程前,我们需要编写批处理脚本

其中,执行批处理脚本时,需要跟上文件路径一起执行

# cmd.bat@echo offset filepath=%1python  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}」

  • 添加查看结果数

最后

运行上面创建的 Jmeter 并发流程,在结果数中可以查看并发上传文件的结果

当然,我们可以增加并发数量去模拟真实的使用场景,只需要修改 CSV 数据源及 Jmeter 参数即可

关于"Jmeter并发执行Python脚本的示例分析"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

文件 路径 参数 大小 线程 脚本 数据 数目 文件名 信息 后缀 总数 数量 流程 篇文章 结果 偏移 准备 示例 分析 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 读卡器连接不上服务器怎么办 网络安全法律知识答题活动 会计证报考软件开发 软件开发怎么加工 全国大学生网络安全知识答案 云服务器需要配置网络吗 互联网公司网络安全 第一版网络安全标准 文件数据库调用管理员权限 广州大学生网络安全教育 服务器资产编码模板 金融通用信息基础数据库 计算机网络技术简历介绍 徐汇区上门软件开发定制要多少钱 网络安全接口安全 扬州多媒体视频系统服务器 阿里巴巴物联网网络安全防护 网络安全模式连接不上网怎么办 ts80x塔式服务器视频 c#+写数据库线程安全 应用软件开发涉及部门 云开发需要做数据库么 服务器未配置磁盘驱动器 怎样删除后台服务器上的内容 什么是数据库安全评估系统 民宗局网络安全现状 sql创建学生数据库教程 做网络好还是做软件开发好 互联网高科技代表什么生肖 什么进数据库
0