解锁 JMeter FTP 性能测试的神奇密码,带你从入门到高手!

180 阅读16分钟

嘿,宝子们!今天咱来唠唠 JMeter 里超厉害的 FTP Sampler,这玩意儿可关乎着文件传输性能的大问题哦! #JMeter

一、FTP Sampler 是啥玩意儿?

FTP 呢,就像是个超级快递员,专门在网络上负责文件的传输,不过它和咱们平时上网看网页用的 HTTP 协议不太一样哦。HTTP 主要是让咱获取网页上的各种信息,而 FTP 则一门心思扑在文件的上传、下载还有目录管理这些事儿上。

image.png 在实际生活里,比如说公司内部的文件服务器,大家都在上面存工作文档、表格啥的,要是 FTP 性能不好,上传个文件老半天,那工作效率可就大打折扣啦!再或者云存储服务,大家都等着下载软件、照片、视频,如果下载速度慢得像蜗牛,用户不得气得直跺脚,分分钟可能就跑去用其他家的服务了。所以呀,对 FTP 进行性能测试就显得至关重要,而 JMeter 的 FTP Sampler 就是咱手里的 “秘密武器”,能帮咱模拟各种 FTP 操作,看看这文件传输的速度、稳定性到底咋样。

二、咋操作呢?宝子们看好咯!

(一)先把 FTP Sampler 的基本设置搞定

  1. 添加 FTP Sampler:在咱的 JMeter 里,找到线程组,然后右键点它,选 “添加”,再找到 “Sampler”,接着选 “FTP 请求”,这样就把 FTP Sampler 请出来啦。

image.png 3. 配置 FTP 服务器连接信息 - 服务器名称或 IP(Server Name or IP):这就好比快递要送去的地址,得把 FTP 服务器的主机名或者 IP 地址填这儿,比如说ftp.example.com,可别填错咯,不然快递都不知道往哪送。 - 端口号(Port Number):一般来说,FTP 服务器的默认端口是21,不过有些服务器可能会搞特殊,用了其他端口,那咱就得打听清楚,把正确的端口号填在这儿。 - 用户名(Username)密码(Password):这就是咱登录服务器的 “钥匙”,得找管理员或者自己设置好,把对应的用户名和密码填进去,这样才能顺利 “进门” 取文件或者放文件。 4. 配置 FTP 操作相关参数 - 远程文件(Remote File) - 要是想从服务器上下载文件(用get(RETR)这个操作),那就得把要下载的文件在服务器上的路径写清楚,像/documents/file.txt这样。 - 要是想往服务器上传文件(用put(STOR)),那就得把文件要存到服务器上的哪个位置写好,比如/uploads/newfile.txt。 - 本地文件(Local File) - 下载的时候,得告诉 JMeter 把文件存到咱电脑的哪个地方,像C:/Users/yourname/Downloads/file.txt,这就是文件在咱本地的 “落脚点”。 - 上传的时候,得把本地要上传的文件路径写对,比如C:/Users/yourname/Documents/uploadfile.txt,这样 JMeter 才能找到文件并送它 “上路”。 - 操作(Operation):这里就选get(RETR)就是下载,选put(STOR)就是上传,简单吧! - Use binary mode(使用二进制模式):如果要传的文件不是普通的文本,像图片、视频、压缩包这些,那就得勾选这个选项,这就像是给文件包了个特殊的 “保护膜”,让它在传输过程中不会 “受伤”。要是不确定,就先看看服务器有没有特别要求,或者试试传一下,看看效果咋样。 - Save file response(保存文件响应):勾选这个呢,JMeter 就会把服务器对咱操作的 “回复” 存起来,万一后面要看看服务器到底说了啥,排查问题的时候可能会派上用场,不过也会占点磁盘空间,就像咱收快递的时候留个快递单一样,看自己需不需要咯。

(二)监听器也得安排上

  1. 查看结果树(View Results Tree):同样右键点线程组,选 “添加”,再找到 “监听器”,选 “查看结果树”。等测试跑完,咱就能在这棵 “树” 上看到每个 FTP 请求的详细情况,比如响应时间、响应代码、响应消息啥的,就像看快递的物流信息一样清楚,哪里出问题了一眼就能瞧出来。
  2. 聚合报告(Aggregate Report):还是右键线程组,这次选 “添加”,然后 “监听器”,再选 “聚合报告”。这个报告可厉害啦,能一下子给咱展示出总体的性能指标,像平均响应时间,这就好比快递平均多久能送到;吞吐量,就是单位时间能送多少个快递;错误率,就是快递丢了或者送错的比例。通过这些指标,咱就能大概知道服务器的 “工作能力” 咋样,有没有偷懒或者累得不行啦。

(三)开始测试咯

点一下 JMeter 工具栏上的 “启动” 按钮,或者用快捷键(Windows/Linux 用Ctrl+R,Mac 用Command+R),然后就等着看 JMeter 大展身手,模拟好多线程按照咱设置的参数去执行 FTP 操作,同时还会把相关的性能数据都收集起来,就像一群小助手在帮咱记录快递的各种情况。

(四)分析测试结果

  1. 查看结果树分析:在 “查看结果树” 里,咱得仔细瞅瞅每个 FTP 请求的详细信息,看看有没有哪个请求 “迷路” 了(失败了)或者服务器的 “回复” 不太对劲(响应异常)。要是有问题,就得找找原因,可能是服务器配置不对,就像快递站的路线没规划好;也可能是网络不太稳定,就像路上堵车了;还有可能是咱 FTP Sampler 的配置有问题,就像快递单写错了地址。
  2. 聚合报告分析:从 “聚合报告” 里的那些指标,咱就能评估 FTP 服务器的整体表现。要是平均响应时间太长,那就得想想办法,是不是服务器配置得升级一下,或者网络带宽得加点 “料”,又或者看看 FTP 操作的逻辑有没有问题,是不是有啥不必要的 “绕路”。要是错误率高,那就得深入调查,是不是权限没设置好,就像快递员没拿到进小区的权限;还是文件不存在,就像快递要送的东西压根没在仓库;或者是服务器太累了,一下子处理不了这么多请求,就像快递站爆仓了一样。

三、高手进阶技巧来咯!

(一)让性能飞起来的技巧

  1. 设置连接池
    • 先在测试计划里添加一个 “FTP Request Defaults” 配置元件。右键点测试计划,选 “添加”,再选 “配置元件”,然后找到 “FTP 请求默认值”。
    • 在这个配置元件里设置参数:
      • Server Name or IP:把 FTP 服务器的主机名或者 IP 地址再填一遍,这是为了让连接池知道往哪连接。
      • Port:服务器的端口号也得写上。
      • UsernamePassword:登录信息不能忘。
      • Connection Pool Configuration
        • Max number of connections:这就像快递站最多能同时处理的快递数量,根据服务器的 “体力” 和咱的测试需求来定,比如说设成10。要是设得太大,服务器可能会累垮;设得太小,又可能测不出真实的性能,得拿捏好这个度。
        • Max number of connections per host:如果咱要测试的服务器有多个 “入口”(主机),这个参数就能控制每个 “入口” 最多能有几个连接,比如设成5,这样就能合理分配资源,不让某个 “入口” 太挤。
        • Time - out in milliseconds:这是连接的 “耐心时间”,单位是毫秒,比如设成5000(就是 5 秒)。要是 JMeter 等了这么久还连不上服务器,就会放弃,避免一直傻等,耽误其他测试。
  2. 使用定时器模拟真实用户行为
    • 在线程组下面添加一个 “固定定时器”(或者其他合适的定时器,像 “高斯随机定时器” 也不错)。右键点线程组,选 “添加”,再选 “定时器”,然后找到 “固定定时器”。
    • 在 “固定定时器” 里设置 “延迟时间(毫秒)”,比如说设成1000,这就意味着每个 FTP 请求之间会间隔 1 秒,就像咱平时发快递不会一下子发好多,总会有个时间间隔,这样测试出来的结果更接近真实情况。要是用 “高斯随机定时器”,那就更像真实用户了,请求间隔会有点随机,不会那么死板。

(二)数据驱动测试技巧(让测试更灵活)

  1. 文件路径参数化
    • 先创建一个 CSV 文件,名字就叫file_paths.csv吧。在里面把要测试的远程文件路径和对应的本地文件路径写好,每行写成remote_path,local_path的格式,像/documents/file1.txt,C:/Users/yourname/Downloads/file1.txt/documents/file2.txt,C:/Users/yourname/Downloads/file2.txt这样。记得保存的时候要选好编码格式,不然可能会出现乱码,就像密码锁输错密码一样,打不开文件的 “门” 啦。
    • 然后在测试计划里添加一个 “CSV Data Set Config” 配置元件。右键点测试计划,选 “添加”,再选 “配置元件”,然后找到 “CSV 数据文件设置”。
    • 在这个配置元件里设置参数:
      • Filename:把刚才创建的 CSV 文件的路径写清楚,比如C:/test/file_paths.csv,得让 JMeter 找到它。
      • Variable Names:设置两个变量名,remoteFilelocalFile,这两个名字就对应着 CSV 文件里的两列数据,一会儿在 FTP Sampler 里要用到它们。
      • Delimiter:这里写逗号 “,”,因为咱 CSV 文件里的数据是用逗号分开的,要是写成别的,JMeter 就会找不到路,不知道数据咋分了。
      • Recycle on EOF:如果勾选这个,当 CSV 文件里的数据读完了,JMeter 会像个勤劳的小蜜蜂一样,又回到开头继续读,继续测试。要是不勾选,读完就结束啦。
      • Stop Thread on EOF:勾选这个的话,数据读完了,当前线程就会停下来休息,不干活了。
    • 最后在 FTP Sampler 里,把 “Remote File” 字段改成${remoteFile},“Local File” 字段改成${localFile}。这样每次测试的时候,JMeter 就会从 CSV 文件里拿不同的文件路径组合来干活,就像有个魔法盒子,每次都能变出不同的文件传输任务,是不是很神奇?
  2. 用户名和密码参数化
    • 跟文件路径参数化差不多,先创建一个 CSV 文件,叫user_creds.csv,每行写成username,password的格式,像user1,password1user2,password2。同样要注意文件编码和数据格式别出错哦。
    • 添加一个 “CSV Data Set Config” 配置元件,设置好文件名、变量名(这次是usernamepassword)和分隔符这些参数,和上面文件路径参数化的设置差不多。
    • 在 FTP Sampler 里,把 “Username” 字段改成${username},“Password” 字段改成${password},这样就能测试不同用户权限下的 FTP 操作啦,或者模拟好多用户登录的场景,就像好多人同时在快递站取快递,看看服务器能不能应付得来。

(三)保证测试准确性的技巧(断言的使用)

  1. 响应码断言
    • 在 FTP Sampler 下面添加一个 “断言”。右键点 FTP Sampler,选 “添加”,再选 “断言”,然后找到 “响应断言”。
    • 在 “响应断言” 里设置参数:
      • Apply to:选 “Main sample only”,就是只对主要的样本进行断言,这就像咱只检查快递有没有送到正确的地址,其他的先不管。
      • Response Field to Test:选 “Response Code”,这就是服务器给咱的 “回复码”,就像快递的签收码一样。
      • Pattern Matching Rules:选 “Equals”,然后在Patterns to Test里输入预期的响应码,比如文件下载成功的响应码通常是 “200”,上传操作的响应码可能因服务器而异,但一般也是 “200” 系列的。这样就能保证 FTP 操作返回的是咱想要的 “回复码”,如果不是,那就说明有问题,测试就会被标成失败,在监听器里还能看到错误信息,就像快递送错地方了会有个提示一样。
  2. 文件大小断言(下载操作)
    • 还是在 FTP Sampler 下面添加一个 “断言”,这次选 “添加”,再选 “断言”,然后找到 “Size Assertion”。
    • 在 “Size Assertion” 里设置参数:
      • Apply to:选 “Main sample only”。
      • Response Field to Test:选 “Content Size in bytes”,这就是要下载的文件大小,以字节为单位。
      • Pattern Matching Rules:根据情况选合适的匹配规则,像 “Equals”“Greater than”“Less than” 这些。比如说咱知道要下载的文件大小是1024字节,那就选 “Equals”,然后在Patterns to Test里输入 “1024”,这样就能保证下载的文件大小是对的,不会缺斤少两,就像买东西得称称重量对不对一样。

四、分布式测试,让测试火力全开!

  1. 为啥要分布式测试呢?:有时候咱要模拟超级多用户同时操作 FTP,如果只用一台机器,就像一个人要送好多好多快递,根本忙不过来,也测不出真实的高并发情况。这时候分布式测试就派上用场了,咱可以用好多台机器一起干活,就像好多快递员一起送快递,这样就能产生更大的负载,更接近实际生产环境中那种人挤人的高并发场景。
  2. 咋操作呢?
    • 主控机(Master)上的配置
      • 打开 JMeter 的jmeter.properties文件,找到remote_hosts这一行,把IP1:1099,IP2:1099这些换成远程服务器(Slave)的 IP 地址,1099是 JMeter 默认的 RMI 端口号哦。可以多写几个远程服务器的 IP,用逗号隔开,就像召集一群小伙伴来帮忙。要是不想用 SSL 加密连接,还可以把server.rmi.ssl.disable这一行设成true,这样能少点麻烦事。
      • 保存jmeter.properties文件,这就像给小伙伴们发了个集合通知。
    • 远程服务器上的操作
      • 进到远程服务器上 JMeter 的bin目录,执行jmeter-server命令(Windows 下是jmeter-server.bat,Linux/Mac 下是jmeter-server.sh),这就像小伙伴们收到通知后都到自己的岗位上待命,等着主控机来分配任务。
    • 开始测试
      • 在主控机的测试计划里,右键点测试计划,选 “运行”,再选 “远程启动”,然后选要启动测试的远程服务器,这样就能让好多台机器一起跑咱的测试计划啦,就像一场盛大的快递接力赛,是不是很壮观?
  3. 注意事项哦
    • 主控机和远程服务器之间的网络得通畅,就像快递员送货的路得好走,不能有坑坑洼洼(防火墙得配置好,让 JMeter 的通信端口,也就是1099端口能通过)。
    • JMeter 的版本在主控机和远程服务器上得一样,不然就像大家说不同的语言,没法好好合作,可能会导致测试出问题。
    • 在测试的时候,得时不时看看远程服务器的资源使用情况,像 CPU、内存这些,别让服务器累得死机了,或者因为太累了导致测试结果不准,就像得关心一下快递员有没有累倒,不然快递就送不好啦。

五、最后的叮嘱,宝子们一定要听好!

  1. 测试前一定要确认 FTP 服务器是好的,配置也没问题,用户名、密码、端口号还有文件路径这些信息都得对。可以先用 FTP 客户端工具手动连一下服务器,看看操作是不是正常,就像出门前得检查一下车有没有油,钥匙有没有带,不然半路上出问题就麻烦了。

  2. 在大规模测试之前,先在小规模环境下试试,看看测试配置有没有问题,这就像学游泳先在浅水区扑腾扑腾,熟练了再去深水区。根据小规模测试的结果,慢慢调整线程数、循环次数这些参数,让测试更接近真实的情况,就像调整游泳的姿势,找到最省力又最快的方法。

  3. 注意 FTP 服务器的权限设置,得保证咱测试的用户有上传或下载的权限,不然就像去超市没带会员卡,啥也买不了,测试肯定会失败。

  4. 长时间测试的时候,这服务器的资源使用情况可得盯紧咯,就像盯着自家爱车的仪表盘一样。为啥呢?因为一旦服务器开始 “气喘吁吁”,也就是快过载的时候,咱就得麻溜地采取行动。要是不管不顾,那测试结果可能就跟喝醉了酒的人走路似的,东倒西歪不靠谱。

    这时候有两条路可以走。一条路是调整测试参数,这就好比给服务器松松绑,让它能缓口气。比如说减少一下并发线程的数量,原本一群人挤着要进门,现在少来点人,服务器处理起来就没那么费劲了。或者把请求的发送频率调低点,别一个劲儿地给服务器派任务,让它有时间消化消化前面的活儿。

    另一条路呢,就是优化服务器配置,给它加点厉害的 “装备”。像是给服务器的 CPU 升升级,让它的运算速度更快,处理起咱的 FTP 请求就像闪电一样迅速。或者给内存扩充扩充,这样服务器就能同时存放更多的数据,不至于因为内存不够而卡顿。还可以检查一下网络带宽是不是够,如果太窄了,就像小水管流水,数据传输肯定慢,那就得拓宽拓宽,让数据能畅快地跑来跑去。

    总之,咱得时刻留意服务器的状态,灵活运用这些方法,这样才能保证整个测试过程顺顺利利的,得到准确又可靠的测试结果,让咱的 FTP 性能测试真正发挥作用,为咱的工作或者项目保驾护航,是不是这个理儿?