周末在家没事,将公司的登录接口和获得资产的接口拿出来练练手,用Jmeter编写,感觉Jmeter和postman很多地方差不多,现在将编写的过程记录如下:
1.我总共写了2个线程组,3个接口,具体如下图:
登录线程组包括接口:1.登录 2.新设备认证
挖矿线程组包括接口:1.获得用户的BTC资产(PS:其他接口还没写,目前只是将两个线程组的签名调通,第二个线程组可以拿到数据了)
2.首先需要新建测试计划,可以修改名称,注意需要勾选【独立运行每个线程组】
3.右击测试计划,新建HTTP请求默认值,填写接口的【协议】和【服务器名称或IP】
4.因为接口需要传deviceId,所以我又在测试计划中新建了一个随机变量的配置原件,随机生成deviceId,后面接口直接调用就可以了
5.右击测试计划,新建setUp线程组,这里我将线程组的名称改为了登录
线程属性 线程数:1,Ramp-Up时间(秒):1,循环次数:1
6.在setUp线程组上新建【HTTP信息头管理器】,将header中需要传的内容写在信息头管理器里面
7.在setUp线程组上新建【查看结果树】和【调试取样器】,我们可以通过查看结果树看各个接口的请求以及返回
8.在setUp线程组上新建【HTTP请求】,修改名称为登录,填写HTTP请求方法和路径
如上图:消息体数据中的内容,我是用charles抓包获得的,其中password是加密后的值,deviceId就可以直接从随机变量中获取,通过查看结果树,我们可以看到返回中有一个字段为token,下一步我们就要取出这个token的值
9.需要获取登录接口的token,就需要在登录接口下新建【正则表达式提取器】,具体填写内容如下图,就可以取出返回结果中的token值了
10.在setUp线程组上新建第二个【HTTP请求】,修改名称为新设备认证,填写HTTP请求方法和路径,其中deviceId直接从随机变量中获取,token是从登录请求的返回中获取,用${token}表示
通过查看结果树,可以看到新设备认证的接口会返回accessToken和deviceSecret这两个字段,后面sign的签名中需要这两个值,所以我们也要通过正则表达式提取器取出来
11.需要获取新设备认证接口的accessToken,就需要在新设备认证接口下新建【正则表达式提取器】,具体填写内容如下图,就可以取出返回结果中的accessToken值了
12.获取新设备认证接口的deviceSecret,同理如下
13.我们可以在新设备认证这个HTTP请求下添加【调试后置处理程序】,这样就可以在查看结果树中打印正则表达式提取器中提取的token、accessToken、secretKey
14.在新设备认证的HTTP请求下新建【BeanShell后置处理程序】,将提取的accessToken、secretKey、deviceId设置为全局变量,第二个线程组挖矿就可以使用了
15.当查看结果树的接口为绿色,返回值都正常时,证明接口都通了
16.在测试计划中新建第二个线程组【挖矿】,具体设置内容如下图:
17.新建【HTTP信息头管理器】,注意:header里面的内容可以从抓包中获取,token为全局变量中的newtoken,可以用${__P(newtoken)}获取,deviceId为全局变量中的deviceId,可以用${__P(deviceId)}获取,sign在下面的BeanShell预处理程序中获得,因为是同一个线程组,所以是用${sign}获得
18.在挖矿线程中新建HTTP请求,抓包看是个get请求,参数只有一个unit,具体配置如下图
19.因为上面的接口是需要签名验证的,所以需要新建【BeanShell预处理程序】来获得sign,我们公司的接口是将token+secret+path进行sha256加密的,我这里加密算法的代码是用java写的,然后导出为jar包,放在/lib/ext下面
具体的java加密代码查看如下:
注意:
BeanShell预处理程序中获得全局变量newtoken的方法为String token=props.get("newtoken");
获得全局变量secret的方法为String secret=props.get("secret");
我们可以通过log.info(token); log.info(secret);将值打印在控制台方便我们定位问题
20.在HTTP请求上添加【调试后置处理程序】和【BeanShell 后置处理程序】,查看结果树中查看sign的加密值
21.我们可以通过查看结果树的接口是否为绿色,请求request header中的值token和sign的值是否正确,响应数据中Response Body的返回值是否正常来判断第二个线程组的接口是否通了
如下截图,接口返回的值正常即表明获得用户的BTC资产接口ok了