理解业务

http://49.233.108.117:28019/swagger-ui.html#/
电商平台

  1. 注册用户
  2. 登录用户 登录密码需要md5 加密, 登录成功之后会返回token值,下面所有接口都需要使用到token值。

  1. 搜索商品
  2. 加入购物车

函数助手

postman内置变量可以用来生成一些常用的随机值。JMeter 中也有类似的功能,通过使用函数助手可以完成类似的功能

生成随机数字

【工具】—【函数助手对话框】
image.png

选择【Random】
image.png
在JMeter中使用函数助手生成的随机变量即可。
image.png
运行的时候可以自动生成随机电话号码
image.png

但是,登录的时候如果还是使用 ${__Random(13000000000,13099999999,)} 这个函数,调用函数会自动生成新的号码,所以登录的时候会使用新号码登录。新号码登录会失败。
在创建函数的时候对生成的值生成变量保存起来。image.png
image.png
image.png

登录的时候使用 手机号 使用 ${phone} 就可以取到注册时使用的号码。

md5 加密

打开函数助手

digest

image.png
设置密码 使用md5 加密
image.png

执行 可以看到注册的使用 号码和登录使用的号码一致,
image.png
密码也使用md5加密之后的密码。
image.png

中文显示乱码问题

服务器返回的结果中,中文显示乱码。
image.png
打开JMeter的安装目录

image.png
找到Jmetet.properties
image.png
使用 记事本打开
image.png

在最后一行添加

  1. sampleresult.default.encoding=UTF-8

image.png
重启JMeter

Jmespath json 提取器

JMespath 比 单纯的json提取器更方便灵活。

上面的业务中,用户登录成功之后返回有token 值,token值会在后面的接口中使用到,将token 值设置为变量。

json提取器

在json提取器中可以使用 $.data 提取到token的值。
image.png
image.png


搜索接口 中使用到token值
根据文档,这个接口的请求头中需要添加token
image.png
在信息头中引用 登录成功之后设置的变量。
image.png
根据文档,添加搜索的关键字。
image.png
执行可以看到结果。
image.png

jmespath json 提取器

image.png
商品搜索接口中服务器返回的结果有很多。

将 价格大于 5000的 第一个商品id提取出来。
这种动态提取变量的方式,使用json提取器已经不能满足了。因为json提取器要求提取的数据所在的位置必须是确定的,现在的位置已经不确定了。


参考文档: https://jmespath.org/tutorial.html
image.png

编写JMESpath 提取器

  1. data.list[?sellingPrice>`5000`].goodsId | [0]
  • data.list 一层一层提取
  • ?sellingPrice>5000表示搜索价格大于5000: 注意❤️ 5000 上面要添加反向的单引号 即 5000
  • | [0] | 表示管道符, [0] 表示第一个

image.png


价格大于5000 并且商品介绍(goodsIntro) 包含黑色 第一个商品id。

  1. data.list[?contains(goodsIntro,'黑色') == `true` && sellingPrice>`5200`].goodsId | [0]
  • ?contains(goodsIntro,’黑色’) == true表示商品介绍中包含 黑色的商品
  • && 表示并且 多个条件同时成立
  • sellingPrice>5200价格大于5200
  • | [0] 管道符 表示第一个商品

创建jmespath json 路径表达式

添加提取器
image.png

添加路径表达式
image.png
运行 查看调试取样器中的结果。
image.png

加入购物车接口
image.png

这个接口需要两个信息头

  1. token
  2. json格式声明

image.png

输入对应的请求数据
image.png
执行,可以看到数据
image.png

面试问题

  1. 接口加密是怎么做的?

我们的接口需要加密的不多,在我们的业务中,登录的时候使用的密码需要md5加密。
我在做过程中,使用的是函数助手中 digest 函数 (内置函数)使用 md5 算法加密。
当时测试注册,登录的时候, 函数助手也有别的函数,比如生成随机的值。我在注册用户的时候手机号码就是使用 随机函数生成。

  1. 说下你们的接口流程是怎么做的?

接口的流程测试,主要上下游传参。
常用上下游传参的方法:

  1. json 提取器
  2. jmespath 提取器。

具体的做法: 在上游提取变量, 如果提取条件比较复杂 可以使用 jmespath 提取器来提取变量。
下游接口引用变量接口。


整个流程
用户购物主流程.jmx

对应的操作录屏 meeting_01.mp4