• 【JMeter】jmeter测试 - 上传多个图片/批量上传图片接口 CSV文件参数化方法


    在这里插入图片描述

    前言

    在网上查了一下,没有查到很满意的方法,这里记录了一个比较好用的方法。

    需要测试的接口,是直接将图片File放到请求体中。

    在这里插入图片描述

    接口的函数签名如下:

    @Slf4j
    @Controller
    @RequestMapping(Constants.IMG_SYSTEM_URL_PREFIX + Constants.IMAGE_SERVICE_URL)
    public class FileController {
    
        @ResponseBody
        @PostMapping(value = "/upload-images")
        public Response uploadImages(HttpServletRequest httpServletRequest, 
        							@RequestParam("authorizedUsers") List authorizedUsers) throws IOException {
    		xxx
    		(省略)
    		xxx
    		
            return response;
        }
        
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    数据情况与路径生成

    如果你跟我一样,图片放在一个文件夹里,可以写个小脚本自动生成所有图片的绝对路径。

    有图片文件夹images如下(图片名不能是中文,出现中文jmeter会报错,详情见后面):

    在这里插入图片描述

    先在图片文件夹里创建一个 txt 新建文本:

    在这里插入图片描述

    在文本中输入如下指令:

    DIR *.* /S/ON/B>LIST.TXT DIR
    
    • 1

    如下:
    在这里插入图片描述

    然后退出,修改这个文档的后缀 txtbat,命名为提取所有图片名字到txt.bat如下:

    在这里插入图片描述

    然后双击运行这个 bat文件,可以得到所有文件的绝对路径,存于LIST.TXT:

    在这里插入图片描述

    我们将LIST.TXT改名为images.csv,打开里面如下:

    在这里插入图片描述

    我们删除一下里面的非图片地址,就准备好了要上传图片的绝对路径,均放在csv表格中。

    测试 - 上传多个图片/批量上传图片

    创建CSV文件设置:

    在这里插入图片描述

    配置如下,怕报错可以完全按照我的配置。地址为刚刚的 images.csv 文件的地址,这里变量名就是imageName,待会跟http请求的变量保持一致,我们在csv中没有表格首行,所以不需要忽略首行。

    在这里插入图片描述

    线程组设置:

    在这里插入图片描述
    在jmeter的测试环境下,线程组的循环次数代表我们在image.csv遍历的图片数量。

    如果我们的图片 image.csv 中有100张图片路径,当线程数选择1,那么当循环次数为1时,线程会取 image.csv 中的第一行图片路径进行读取,传给我们的服务端代码。如果循环次数为100,线程才会取 image.csv 中所有的100行图片路径进行读取。所以我建议循环次数和 image.csv 图片路径的数量保持一致

    在这个基础下,线程数按照测试需求进行选取即可。

    然后先创建必要的http请求

    在这里插入图片描述

    如下:

    在这里插入图片描述

    这里【重定向】和【keepalive】和【对POST使用multipart/form-data】勾上。

    参数名称选择接口的参数名,我这里是 image,我们使用csv表格来存图片地址,这里MIME类型选择 image/form-data,文件名称选择 ${imageName}

    运行

    启动
    在这里插入图片描述

    成功了

    在这里插入图片描述

    图片名含中文时出现乱码的问题

    如果图片名包含中文,那么除非像 https://blog.csdn.net/weixin_44383795/article/details/122866207 一样修改jmeter源码,否则无法解决报错问题。我这里建议是修改图片名为英文名。

    第一,如果csv配置文件编码用UTF-8,或者jmeter.properties修改编码配置,或者用BeanShell预处理或者后置处理,都没有用的,而且从jmeter编码时就会报错。

    在这里插入图片描述

    在这里插入图片描述

    第二,csv配置文件编码可以选择GBK,或者GB2312随便你,这样的确可以让jmeter成功读取到csv文件的图片名,但是编码成功之后,还需要解码给服务端代码,由于jmeter源码中csv解码是写死的,默认用的ISO而不是UTF-8,因此在服务端侧收到的文件名就会变成乱码。

    第三,我下载了较新的jmeter5.5版本,依然不解决问题。

    所以如果赶时间的话建议还是改图片名字吧,不赶时间可以改源码

    参考

    https://blog.csdn.net/weixin_44383795/article/details/122866207

  • 相关阅读:
    个人博客系统
    基于JavaWeb的网站图片爬虫系统
    827万!朔黄铁路基于5G边缘计算的智慧牵引变电所研究项目
    基于Matlab的遥感图像变化监测系统
    ssh总是很短时间自动断开连接
    webpack5 打包环境抽离分环境基本配置
    什么是间谍软件恶意软件?
    电脑重装系统提示activex部件不能创建对象如何解决
    IS-LM模型:从失衡到均衡的模拟
    Linux下通过yum安装nginx【详细步骤】
  • 原文地址:https://blog.csdn.net/fisherish/article/details/126165969