• Jmeter之『上传文件』


    方法一:通过勾选『对POST使用multipart/form-data;』

    注意坑

    手动设置Content-Type后,该方法失效。需要在预处理程序中,移除:Content-Type,移除代码如下:
    添加JSR223 预处理程序(Java):

    // 在低版本Jmeter可能不成功,在5.3版本中,该脚本测试通过
    sampler.getHeaderManager().removeHeaderNamed("Content-Type");
    

    但移除后,后续的接口如果仍然想要设置默认Content-Type,则需要添加JSR223 后置处理程序(Java):

    import org.apache.jmeter.protocol.http.control.Header;
    // 创建Header,需要导入
    Header header = new Header("Content-Type","application/json; charset=UTF-8");
    // 添加Header
    sampler.getHeaderManager().add(header);
    

    除此之外,上传文件的名字为中文时,会乱码,解决方案参考:https://blog.csdn.net/qq_18298049/article/details/106817246

    传参:

    普通参数:

    Content-Disposition: form-data; name="productId"
    
    # 以上类型的参数,在Jmeter中通过『参数tab』添加
    

    文件:

    Content-Disposition: form-data; name="file"; filename="测试条款.pdf"
    Content-Type: application/pdf
    
    以上类型的参数,在Jmeter中通过『文件上传』添加,其中:
    name:对应Jmeter的参数名称
    filename:对应Jmeter的文件名称(全路径)
    Content-Type:对应Jmeter的MIME类型
    

    方法二:直接构建参数(留下疑问:通过__FileToString为什么会导致文件失效)

    创建Post请求后,该方法只适合上传文本,不适合图片、PDF等上传,因为__FileToString方法会导致该类文件失效,上传后文件不可用。

    除此之外,还需注意:参数,编码格式,请求头,boundary

    请求参数

    注意设置上传文件的name,filename,Content-Type及调用__FileToString生成文件内容

    --edc290560458f57dad9d94d0b7a2f03e7f2ae30f133b85756a659cfcdf39
    Content-Disposition: form-data; name="productId"
    
    581
    --edc290560458f57dad9d94d0b7a2f03e7f2ae30f133b85756a659cfcdf39
    Content-Disposition: form-data; name="file"; filename="测试条款.pdf"
    Content-Type: application/pdf
    
    ${__FileToString(C:UsersDELLDesktopv3.7.3迭代	estProduct.pdf,utf-8,)}
    --edc290560458f57dad9d94d0b7a2f03e7f2ae30f133b85756a659cfcdf39--
    

    编码格式

    在调用__FileToString函数时,注意使用『正确(如utf-8)』格式,否则乱码

    请求头

    使用该方法实现文件上传时,注意覆盖接口的请求头Content-Type,设置为:

    # 通过HTTP信息头管理器设置,boundary可自定义
    Content-Type: multipart/form-data; boundary=edc290560458f57dad9d94d0b7a2f03e7f2ae30f133b85756a659cfcdf39
    

    boundary

    注意boundary的值,需要与请求参数中的boundary相同

  • 相关阅读:
    bzoj 4361: isn
    bzoj 2560: 串珠子
    bzoj 3622: 已经没有什么好害怕的了
    UOJ #30. 【CF Round #278】Tourists
    Codeforces Round #452 E. New Year and Old Subsequence
    bzoj 2653: middle
    codeforces701C
    codeforces437C
    codeforces518B
    codeforces706C
  • 原文地址:https://www.cnblogs.com/testopsfeng/p/13787171.html
Copyright © 2020-2023  润新知