Jmeter压测关联接口

jmeter关联接口性能测试

需求

进行接口性能测试时候,尤其是登录类接口,经常需要先进行登录,然后拿到登录返回的token,比如sessionid,来作为参数传给下一个接口作为入参

实现

测试接口:
登录:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
POST http://192.168.0.1:8080/api/Login

POST data:
{
"mobileId":"ad9ec085",
"loginUrl":"P00019452",
"simId":"|",
"phoneModel":"vivo vivo X6SPlus D",
"phoneSysVersion":"5.1.1",
"appVersion":"4.2.0",
"language":"ZH-CN",
"isClearGesturePwd":0,
"companyCode":"test",
"registrationId":"120c83f7601a92735ae",
"isAutoLogin":"0",
"sign":"a8a922d705c15686232d963e3ce9461aa96df4689420e5abab76535c00532417",
"timeStamp":"20181029101835"
}

接口返回信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
{
"result":true,
"data":{
"sysPara":{
"CancelAttachmentAmount":"0",
"CustomerIsVisible":"N",
"ExceptionAttachmentAmount":"0",
"IsAllowRevoke":"N",
"IsNeedApproveComment":"N",
"IsNeedOTReason":"N",
"IsNeedRejectComment":"Y",
"IsShowOTType":"1",
"LeaveAttachmentAmount":"2",
"OTAttachmentAmount":"0",
"OTDayTypeIsVisible":"N",
"ShiftAttachmentAmount":"0",
"isNeedOTExplain":"1"
},
"userInfo":{
"BackGroundVersion":"Y1",
"GesturePwd":"",
"IsValid":true,
"LoginName":"P00019452",
"ModuleList":Array[9],
"PersonID":"www-2f7f-4203-23212-5cc00acbcd0a",
"ServiceTime":"11:37",
"SessionId":"19431489-f4df-4143-b254-15b2f74f449a,a13b648f-6d81-4307-8ee1-b04c5b976246",
"TimeClassE":"",
"TimeClassS":"",
"UserID":"112dcs-6d81-ewew-8ee1-b04c5b976246",
"Uuid":"darcc75332-A4E2-4FB1-AFCF-C6EB07647825"
},
"user":{
"BirthDay":"",
"CompanyEngName":"",
"CompanyName":"",
"DeptId":"0",
"DeptName":"测试部",
"EmpID":"P00019452",
"EmpName":"虚拟主管",
"EnglishName":"",
"Gender":"",
"HeadImgUrl":"",
"LoginName":"P00019452",
"Position":"测试总经理"
}
}
}

获取用户信息:

1
http://192.168.0.1:8080/api/History/GetUserInfo?sessionId=7f959f6d-4b63-4d2d-8f88-025dc80e40f9,a13b648f-6d81-4307-8ee1-b04c5b976246

其中获取用户信息接口,需要传sessionId字段,该字段为登录接口的返回字段

所以需要先登录,再获取sessionid,再传给获取用户信息接口

jmeter实现

jmeter也是正常的创建线程组,添加http请求头,添加http请求,添加响应断言,添加查看结果树和聚合报告

不同的是,在一个线程组中会有两个接口,第一个是登录,第二个是获取用户信息,并且在登录接口后需要添加一个组件:JSON Extractor作用就是提取登录返回的sessionid

JSON Extractor内容:

1
2
3
Name of created variables:  变量名(后面参数化的变量名称,这边是sessionid)

JSON Path expressions: json提取表达式

根据登录接口返回的层级结构,json表达式可以写成:$.data.userInfo.SessionId
需要注意的是$后有一个.,表示当前路径

JSON表达式可以实现,只需要在登录接口后添加一个查看结果树,显示模式切换成JSON Path Tester,右下角就有JSON Path Expression测试

jmeter关联接口的层级结构:

1
2
3
4
5
6
7
8
9
10
11
- 线程组
- - CSV数据文件设置
- - HTTP信息头管理器
- - 登录接口(http请求)
- - 查看结果树
- - 响应断言
- - JSON Extractor
- - 获取用户信息接口
- - 响应断言
- - 查看结果树
- - 聚合报告

完~

文章目录
  1. 需求
  2. 实现
    1. jmeter实现
|