理解业务
http://49.233.108.117:28019/swagger-ui.html#/
电商平台
- 注册用户
- 登录用户 登录密码需要md5 加密, 登录成功之后会返回token值,下面所有接口都需要使用到token值。
- 搜索商品
- 加入购物车
函数助手
postman内置变量可以用来生成一些常用的随机值。JMeter 中也有类似的功能,通过使用函数助手可以完成类似的功能
生成随机数字
【工具】—【函数助手对话框】
选择【Random】
在JMeter中使用函数助手生成的随机变量即可。
运行的时候可以自动生成随机电话号码
但是,登录的时候如果还是使用 ${__Random(13000000000,13099999999,)}
这个函数,调用函数会自动生成新的号码,所以登录的时候会使用新号码登录。新号码登录会失败。
在创建函数的时候对生成的值生成变量保存起来。
登录的时候使用 手机号 使用 ${phone}
就可以取到注册时使用的号码。
md5 加密
digest
设置密码 使用md5 加密
执行 可以看到注册的使用 号码和登录使用的号码一致,
密码也使用md5加密之后的密码。
中文显示乱码问题
服务器返回的结果中,中文显示乱码。
打开JMeter的安装目录
找到Jmetet.properties
使用 记事本打开
在最后一行添加
sampleresult.default.encoding=UTF-8
重启JMeter
Jmespath json 提取器
JMespath 比 单纯的json提取器更方便灵活。
上面的业务中,用户登录成功之后返回有token 值,token值会在后面的接口中使用到,将token 值设置为变量。
json提取器
在json提取器中可以使用 $.data 提取到token的值。
搜索接口 中使用到token值
根据文档,这个接口的请求头中需要添加token
在信息头中引用 登录成功之后设置的变量。
根据文档,添加搜索的关键字。
执行可以看到结果。
jmespath json 提取器
商品搜索接口中服务器返回的结果有很多。
将 价格大于 5000的 第一个商品id提取出来。
这种动态提取变量的方式,使用json提取器已经不能满足了。因为json提取器要求提取的数据所在的位置必须是确定的,现在的位置已经不确定了。
参考文档: https://jmespath.org/tutorial.html
编写JMESpath 提取器
data.list[?sellingPrice>`5000`].goodsId | [0]
- data.list 一层一层提取
- ?sellingPrice>
5000
表示搜索价格大于5000: 注意❤️ 5000 上面要添加反向的单引号 即5000
- | [0] | 表示管道符, [0] 表示第一个
价格大于5000 并且商品介绍(goodsIntro) 包含黑色 第一个商品id。
data.list[?contains(goodsIntro,'黑色') == `true` && sellingPrice>`5200`].goodsId | [0]
- ?contains(goodsIntro,’黑色’) ==
true
表示商品介绍中包含 黑色的商品 - && 表示并且 多个条件同时成立
- sellingPrice>
5200
价格大于5200 - | [0] 管道符 表示第一个商品
创建jmespath json 路径表达式
添加提取器
添加路径表达式
运行 查看调试取样器中的结果。
加入购物车接口
这个接口需要两个信息头
- token
- json格式声明
输入对应的请求数据
执行,可以看到数据
面试问题
- 接口加密是怎么做的?
我们的接口需要加密的不多,在我们的业务中,登录的时候使用的密码需要md5加密。
我在做过程中,使用的是函数助手中 digest 函数 (内置函数)使用 md5 算法加密。
当时测试注册,登录的时候, 函数助手也有别的函数,比如生成随机的值。我在注册用户的时候手机号码就是使用 随机函数生成。
- 说下你们的接口流程是怎么做的?
接口的流程测试,主要上下游传参。
常用上下游传参的方法:
- json 提取器
- jmespath 提取器。
具体的做法: 在上游提取变量, 如果提取条件比较复杂 可以使用 jmespath 提取器来提取变量。
下游接口引用变量接口。
整个流程
用户购物主流程.jmx