很多时候我们的接口之前都是有依赖的,比如商城数据;也有一些操作必须登录之后才能进行下一步的操作;为了安全,大部分网站都会使用token,这节我们主要讲怎么获取登录后的token,然后携带登录后的token进行下一步操作
有条件的同学可以自己写一些框架服务启动后测试,这里我使用的是果创云平台大家可以免费注册一个账号
现在有一个登陆接口A,登陆成功后返回一个token值。有一个检查账号登录状态的接口B,但是接口B必须要先登录后传登录的token才能访问
A接口登录接口文档基本信息
访问地址:http://api.yesapi.cn/api/App/User/Login
请求类型:POST
请求头部:application/json
请求参数:app_key: 开发者应用的app_key
username:会员账号
password:需md5加密
返回值:
B接口接口文档基本信息
访问地址:http://api.yesapi.cn/api/App/User/AlterPassword
请求类型:POST
请求头部:application/json
请求参数:app_key: 开发者应用的app_key
uuid:UUID,全局唯一用户ID
token:会话凭证
返回值:
返回值,会话的状态码以及uuid以及凭证
这里的会话凭证我们手动的登录系统然后利用工具获取得到手动填写在这里,如下,当我们请求时,凭证一旦过期我们就无法成功访问接口,那么我们如何动态的获取会话凭证么,接下来就是就利用提取器来获取我们想要的数据
提取器有json xpath,正则,我们可以根据返回值的不同选择不同的提取器,这里已json extractor为例
Variable names(名称):提取器的名称
Apply to(应用范围):
Main sample and sub-samples:应用于主sample及子sample
Main sample only:默认的是这个,应用于主sample
Sub-samples only:应用于子sample
JMeter Variable :应用于变量命名的内容
Variable names:保存的变量名,后面使用${Variable names}引用
Names of created variables 参数名称
JSON Path expressions 提取表达式
Match No.(0 for Random) 匹配规则,-1所有,0随机,1第一个
Compute concatenation va 如果有匹配到多个值,选择此项,会将全部值保存到_ALL,并使用逗号分割每个值,注意Match No. (0 for Random)需要为-1才有效,不然只能匹配到一个值了
Default Values 没提取到就给默认值
为了表达式的准确性,我们可以在监听器中选择json path tester,选择对应的请求输入表达式验证,若涉及多个参数,用分号分开
要检查的响应字段:样本数据源,默认选主体。
引用名称:其他地方引用时的变量名称(re_token),可自定义设置,引用方法:
引
用
名
称
正
则
表
达
式
:
数
据
提
取
器
,
(
)
括
号
里
为
你
要
获
取
的
的
值
,
如
:
"
t
o
k
e
n
"
:
"
(
.
∗
?
)
"
模
板
:
{引用名称} 正则表达式:数据提取器,()括号里为你要获取的的值,如:"token": "(.*?)" 模板:
引用名称正则表达式:数据提取器,()括号里为你要获取的的值,如:"token":"(.∗?)"模板:$对应正则表达式提取器类型。-1全部,0 随机,1第一个2第二个,以此类推,若只有一个正则一般就填写
1
1
1
匹配数字:正则表达式匹配数据的所有结果可以看做一个数组,匹配数字即可看做是数组的第几个元素。
-1表示全部,0随机,1第一个,2第二个,以此类推。若只要获取到匹配的第一个值,则填写1
缺省值:匹配失败时的默认值,可以随便写个,不写也可以,或者勾选失败时候使用空值
有些web项目是前后端不分离的,返回的内容不是那种纯进口返回json格式,返回的是一个HTML页面。
并且有些参数是隐藏在html里面的,需要先从html页面中取出隐藏参数,如:django admin中的csrfmiddlewaretoken,输入账号和密码登录成功后,抓包发现除了账号和密码参数,还有一个参数csrfmiddlewaretoken,并且这个参数每次都是动态的,不是固定值
这里的错误是cookie问题 后面我们再讲
次数接口可以正常调用