聊聊Jmeter如何并发执行Python脚本

2021-09-08 15:33:19 来源:网络整理 作者:管理员

原标题:聊聊 Jmeter 如何并发执行 Python 脚本

来源:AirPython

作者:星安果

聊聊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脚本

显示全文
为您推荐
宋伊人、丁泽仁主演的《花青歌》过审,人设有趣,口碑却让人担忧
宋伊人、丁泽仁主演的《花青歌》过审,人设有趣,口碑却让人担忧

2021年由楼健执导,苏晓彤、王子奇领衔主演的《御赐小仵作》可以说取得了不错的口碑与成绩,使这部小成本剧集达到了S+级的热度与播放量,成了近两年来当之无愧的古代仵作题材的古装甜爽探案喜剧。如今距离这部.........

发布时间:2023-06-01 18:03:12

鹅蛋能蒸蛋羹吗
鹅蛋能蒸蛋羹吗

【导读】 鹅蛋能蒸蛋羹吗,下面是小编为你收集整理的,希望对你有帮助!能。鹅蛋是家禽鹅生下的卵,表面较光滑,白色,呈椭圆形,个体很大,其重量是一般鸡蛋的四、五倍,味道有些油,但质地较粗糙,草腥味较重,食味不及鸡鸭蛋,新鲜的鹅蛋必须烹饪后食用。此外,鹅蛋中还含有丰富的营养......

发布时间:2023-06-01 18:01:06

江疏影与王传君同框叙旧
江疏影与王传君同框叙旧

江疏影和王传君,两个看似完全没有交集的名字,在5月28日有了神奇的新反应因为一起参加《五十公里桃花坞3》,老同学很少在镜头前同框。除了花旦 江疏影说,他想和王传君在一起,因为这会让他更有安全感。这也让.........

发布时间:2023-06-01 17:03:17

向日葵传播种子的方法 这些方法可以传播种子
向日葵传播种子的方法 这些方法可以传播种子

【导读】 向日葵传播种子的方法 这些方法可以传播种子,下面是小编为你收集整理的,希望对你有帮助!向日葵不仅可以观赏食用,另外在工业方面也有一定作用,向日葵有很多种不同传播种子的方法,分别是自体传播、风体传播、水体传播、鸟类传播、哺乳类动物传播等,传播范围也是相当广泛。向日葵传播种子的方法1.自体......

发布时间:2023-06-01 17:01:05

《奥本海默》新预告泄露 展示更多新角色
《奥本海默》新预告泄露 展示更多新角色

在很早之前发布首支官方预告后,人们关于克里斯托弗·诺兰自编自导的新片《奥本海默》愈加等待。而近日网上走漏出了一段长达 3 分钟的最新预告,其中展示了更多新角色,包含马特·达蒙、佛罗伦斯·皮尤和小罗伯特.........

发布时间:2023-06-01 16:03:25

纳摩盖吐龙:蒙古超巨型恐龙(长21米/长有钉状牙齿)
纳摩盖吐龙:蒙古超巨型恐龙(长21米/长有钉状牙齿)

【导读】 纳摩盖吐龙:蒙古超巨型恐龙(长21米/长有钉状牙齿),下面是小编为你收集整理的,希望对你有帮助!纳摩盖吐龙是一种蜥脚类恐龙,诞生于7500万年前-7000万年前的白垩纪末期,体长最多可达21米,属于超巨型恐龙的一种,因为出土的四颗钉子状牙齿而被命名,第一批化石发现于蒙古国,因此也叫做蒙古纳摩盖吐......

发布时间:2023-06-01 16:01:04

日内瓦是哪个国家的首都:瑞士的一个城市(并不是首都)
日内瓦是哪个国家的首都:瑞士的一个城市(并不是首都)

【导读】 日内瓦是哪个国家的首都:瑞士的一个城市(并不是首都),下面是小编为你收集整理的,希望对你有帮助!我们知道地球对于人类来说是一个非常大的星球,因此地球上还有许多我们人类没能发掘的地方,而地球上的国家也是非常多的,日内瓦这个城市也是一个比较有名的城市,那么日内瓦是哪个国家的首都呢?它具体又在哪个地方......

发布时间:2023-06-01 15:01:04

《欢迎光临》播出近半,口碑稳中有升
《欢迎光临》播出近半,口碑稳中有升

本报记者 李夏至由正午阳光出品制作的都市生活轻喜剧《欢迎光临》在北京卫视播出接近一半,口碑稳中有升。该剧讲述一个酒店门童和空姐的恋爱故事,看似多少有点悬浮的设定需要大量的生活细节与戏剧手段来弥补。对《.........

发布时间:2023-06-01 14:03:12

月球背面为什么去不了,月球背面到底有什么?
月球背面为什么去不了,月球背面到底有什么?

【导读】 月球背面为什么去不了,月球背面到底有什么?,下面是小编为你收集整理的,希望对你有帮助!作为太阳系中最为特殊的天体,月亮总是以一面面向地球,从来没见过它的背面长什么样,这主要是由于月球的自转和公转周期相同。然而自人类登月成功以来,如今已经成功发射探测器到火星了,但却根本没有月球背面的消息......

发布时间:2023-06-01 14:01:04

朱一龙爆发式的哭戏,刷新演艺圈新水平,拭目以待
朱一龙爆发式的哭戏,刷新演艺圈新水平,拭目以待

朱一龙主演的电影《峰爆》9月17日即将在各大电影院上映,这部属于灾难型的电影,里面没有过多装饰的场景和华丽的服饰。在灾难面前,个人是多么的渺小,他们帮助困难群众,为了保护家园逆行而上,在这期间产生的父.........

发布时间:2023-06-01 13:03:11

鸡胗怎么炒
鸡胗怎么炒

【导读】 鸡胗怎么炒,下面是小编为你收集整理的,希望对你有帮助!用料:小米椒,鸡胗,大蒜,盐,生抽,黄酒。步骤:1、鸡胗冷水下锅,煮变色了捞起切片。鸡胗要切花,一来好看,二来容易熟又保持了爽口感。2、切好的鸡胗加盐加黄酒加生抽腌制半小时以上。3、大蒜切成蒜蓉,小米......

发布时间:2023-06-01 13:01:03

周迅觉得何炅黄磊太像空巢老人
周迅觉得何炅黄磊太像空巢老人

今日何炅晒出与黄磊的《向往的生活7》海报,何炅黄磊两人牵着小h小o画面很温馨夸姣的呢。可是有的网友却戏弄:“如同两个假笑空巢白叟”“孩子们都离开了,就剩俩老人了,能开心吗?”“这笑脸是p的吧?”这一季.........

发布时间:2023-06-01 12:03:13