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

显示全文
为您推荐
鸡肉玉米汤怎么做好吃
鸡肉玉米汤怎么做好吃

【导读】 鸡肉玉米汤怎么做好吃,下面是小编为你收集整理的,希望对你有帮助!1、玉米切节,鸡切块,香菇泡发备用。2、锅中倒水煮开,加鸡块煮十分钟左右,捞起来放入炖锅里。3、加玉米、香菇、调料煮45分钟左右,放盐调味即可。鸡肉含有维生素C、E等,蛋白质的含量比例较高,种类多,而......

发布时间:2023-10-28 03:01:05

元轻白俗,郊寒岛瘦是指什么意思?
元轻白俗,郊寒岛瘦是指什么意思?

【导读】 元轻白俗,郊寒岛瘦是指什么意思?,下面是小编为你收集整理的,希望对你有帮助!关于“元轻白俗,郊寒岛瘦”这个词语的意思,小编认为可以分开去说。“轻”在古代有轻薄、轻松、重量小、程度浅等意思,“俗”有通俗、风俗、世俗等意思,而“寒”有清寒、畏惧、贫困等意思,“瘦”有消瘦、窄小、孤......

发布时间:2023-10-28 02:01:07

学生如何分期买手机
学生如何分期买手机

【导读】 学生如何分期买手机,下面是小编为你收集整理的,希望对你有帮助!第一、首先,我们需要找个可以分期买手机的购物网站,此处我们选择天猫上来购买分期手机,我们先登录进入天猫网;第二、之后我们在搜索框中输入手机,然后点击搜索;第三、弹出的搜索结果,我们点击一款手机;第四、......

发布时间:2023-10-28 01:01:05

白煮虾要煮多久
白煮虾要煮多久

【导读】 白煮虾要煮多久,下面是小编为你收集整理的,希望对你有帮助!五分钟左右。主料:虾半斤、花椒适量、盐1勺、水适量。1、虾剪去虾须,用清水冲洗1遍。2、锅中放水,水开,放入适量花椒。3、倒入虾,煮五分钟,倒入一勺盐,出锅。虾是甲壳纲十足目动物。虾分布于中国海域、江......

发布时间:2023-10-28 00:01:06

和字由来
和字由来

【导读】 和字由来,下面是小编为你收集整理的,希望对你有帮助!在中国古代汉语及古文字史中,“和”字出现较早,最早见于甲骨文和金文。在早期甲骨文中,“和”作“龢”。以下文献中均可考证:《说文解字》:“龢调也,读与和同”。朱骏声《通训定声》:“《一切经音义》六引《说......

发布时间:2023-10-27 23:01:07

九寨沟在哪
九寨沟在哪

【导读】 九寨沟在哪,下面是小编为你收集整理的,希望对你有帮助!1、九寨沟县,隶属于四川省阿坝藏族羌族自治州,九寨沟以有九个藏族村寨而得名,有历史记载的人类活动早至殷商九寨沟长期以来即为藏族聚居地。位于青藏高原东部边缘,阿坝州东北部。总面积5288平方千米。九寨沟......

发布时间:2023-10-27 22:01:08

月饼来历
月饼来历

【导读】 月饼来历,下面是小编为你收集整理的,希望对你有帮助!1、南宋的月饼是菱花形的,和菊花饼、梅花饼、五仁饼等同时存在,并且是四时皆有,任便索唤,不误主顾。可见这时的月饼,还不只是在中秋节吃。2、明代起有大量关于月饼的记载,这时的月饼已是圆形,而且只在中秋节......

发布时间:2023-10-27 21:01:06

唐僧是什么佛:旃檀功德佛(纪念唐僧不忘初心)
唐僧是什么佛:旃檀功德佛(纪念唐僧不忘初心)

【导读】 唐僧是什么佛:旃檀功德佛(纪念唐僧不忘初心),下面是小编为你收集整理的,希望对你有帮助!在西游记中唐僧最终被封为了旃檀功德佛,由此可知唐僧在如来佛祖心目中的地位非常的高,唐僧的前世本是金蝉子,由于在天庭中犯了错误被贬下界,必须经历九九八十一难才能够再次回归天庭,在生活中唐僧是一个性格温和......

发布时间:2023-10-27 20:01:05

会冒烟的饮料怎么做
会冒烟的饮料怎么做

【导读】 会冒烟的饮料怎么做,下面是小编为你收集整理的,希望对你有帮助!1、在饮料中加入干冰即可成为市面上的冒烟饮料,这种干冰是一种食用干冰,在饮料上面加入,干冰在常温下会快速升华,升华的过程中就会产生烟雾。2、干冰是固态的二氧化碳,在6250.5498千帕压力下,把二氧......

发布时间:2023-10-27 19:01:06

榴莲的储存和保鲜方法
榴莲的储存和保鲜方法

【导读】 榴莲的储存和保鲜方法,下面是小编为你收集整理的,希望对你有帮助!1、自然保存:完整的榴莲可在外层包裹上一层纸箱,直接放在阴凉通风的地方保存,可保存三到四天。2、冷藏保存:榴莲果肉取出来放在保鲜盒中,密封之后把保鲜盒放入冰箱冷藏保存,可保存一个星期左右,不会出现变质......

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

传统节日清明节来历之谜,清明节习俗详解/源于周代寒食节
传统节日清明节来历之谜,清明节习俗详解/源于周代寒食节

【导读】 传统节日清明节来历之谜,清明节习俗详解/源于周代寒食节,下面是小编为你收集整理的,希望对你有帮助!清明节是我国重要的传统节日之一,早在很久很久以前就有了清明节。由于历史悠久,学界关于清明节来历之谜一直没有确切的答案。其中最为流传的版本就是来源于周代的寒食节,清明节取代了寒衣节,清明节来历之谜一起来......

发布时间:2023-10-27 17:01:08

揭秘加拿大水怪奥古布古真相,实则一条巨大的海蛇
揭秘加拿大水怪奥古布古真相,实则一条巨大的海蛇

【导读】 揭秘加拿大水怪奥古布古真相,实则一条巨大的海蛇,下面是小编为你收集整理的,希望对你有帮助!其实关于水怪的传闻在世界各地都有,每个地方都有着不同的有关水怪的传说,下面小编要说的是加拿大水怪奥古布古,想必很多人都是有所耳闻的,因为这是加拿大湖中最著名的水怪,据说奥古布古最早是由印第安人而来,意......

发布时间:2023-10-27 16:01:07