记一次jmeter的使用

1,232 阅读3分钟

前言

准备上架一款聊天app,上架之前准备做一些测试工作,模拟用户进入房间,维持心跳,房间送礼,发言等行为(因为用的第三方im以及声网,这些都是基于http的),也不是很懂测试,听老大说过一嘴,可以用jmeter,就尝试了下。

安装

直接去官网下载下载地址 下载完成之后直接解压 点击这个文件就可以打开了

使用

默认会有一个测试计划 test plan,可以改名也可以不改,我是懒得改

创建一个Thread Group

一个线程组其实就可以用来测一个接口了 number of threads 可以定义开多少个线程(模拟的用户数量), Ramp-up Period(in seconds):达到指定线程数所需要的时间。举例:线程数设置为50,此处设置为5,那么 每秒启动的线程数 = 线程数50/5 = 10。loop count循环次数

创建一个HTTP Request

线程组定义了策略,而http request就是具体执行的方法了 protocol定义协议,ip定义域名,port指定端口,post这个下拉框指定请求方法,path指定访问路径,encoding指定编码,body data因为指定post的body

遇到的问题

  • 不同的用户有不同的token,怎么给不同的用户分配不同的token
  • 设置请求头
  • 接口有签名校验,怎么通过java代码传递签名
  • 加密的jar包怎么引入

通过csv文件把需要模拟的用户的token放进去

基本上看下配置就知道怎么回事了,filename指定文件位置,encoding指定编码,variable names变量名(用分隔符区分 --基本上csv文件有多少个字段,定义多少个变量) Delimiter 分隔符 csv文件一般用 , share mode就是共享模式了 all thread可以分配给所有的线程

我定义了两个字段,下面我的csv文件

定义好了变量,我们直接使用${token}的方式就可以获取token了

设置请求头

最重要的info : G={sign}&s={token},这里的${token}就是上面csv文件里分配的token了,sign一会再解释

加密签名

使用java代码来执行加密操作 下面的script提供了一些全局变量,分别ctx估计是context,var就是变量了,log就是日志

import com.x.x.x.x.x.EncryptUtils;

String body="roomId=123456";
String token=vars.get("token");
String apiKey="abcdef";
String info="s="+token+"&t="+client;
String key=info+body+apiKey;
log.info("key="+key);
String sign=EncryptUtils.md5(key);
String header="G="+sign+"&"+info;
log.info("sign="+header);
vars.put("sign",header);

这里就把上面header需要的sign给回填进去了,这样就可以完成验签的工作了,当然我这里写的比较简单

引入jar包

上面的脚本里面有我们自己写的jar包,需要import进jmeter才能被import。流程如下

请求结果归档

定时发送

比如我们的心跳接口是需要client 每隔5s访问一次,需要定时发送 我这里写的是30s

结束语

jmeter有很多功能,我这里只是用来测试接口。